Storage
VentureKit provides storage through @venturekit/storage with S3 bucket configuration, CloudFront CDN, and lifecycle policies.
1. Install the Package
Section titled “1. Install the Package”npm install @venturekit/storage@dev2. Declare Storage Intents
Section titled “2. Declare Storage Intents”export default defineVenture({ base, security, envs: { dev, prod }, routesDir: 'src/routes', infrastructure: { storage: [ { id: 'uploads', purpose: 'uploads', versioned: true, }, { id: 'assets', purpose: 'assets', cdn: true, corsOrigins: ['https://app.example.com'], }, { id: 'backups', purpose: 'backups', }, ], },});Storage Purposes
Section titled “Storage Purposes”| Purpose | Description | Typical Config |
|---|---|---|
uploads | User-uploaded files | Versioned, private access |
assets | Static assets (images, CSS, JS) | CDN-enabled, public read |
backups | Database and application backups | Private, lifecycle rules |
logs | Application and access logs | Private, expiration rules |
Accessing Storage in Handlers
Section titled “Accessing Storage in Handlers”After deployment, storage outputs are available via ctx.intentOutputs:
import { handler } from '@venturekit/runtime';import type { IntentOutputs } from '@venturekit/core';
export const main = handler(async (_body, ctx, logger) => { const outputs = ctx.intentOutputs as IntentOutputs;
const uploadsBucket = outputs.storage['uploads'].bucketName; const assetsCdnUrl = outputs.storage['assets'].cdnUrl;
logger.info('Storage info', { uploadsBucket, assetsCdnUrl });
return { uploadsBucket, assetsCdnUrl };});CDN Configuration
Section titled “CDN Configuration”Enable CloudFront CDN for fast global delivery:
{ id: 'assets', purpose: 'assets', cdn: true, cdnDomain: 'cdn.example.com', // Custom domain (optional) corsOrigins: ['*'],}The CDN URL is available in outputs.storage['assets'].cdnUrl.
Direct S3 Configuration
Section titled “Direct S3 Configuration”For programmatic use outside of intents:
import { createS3Config, DEFAULT_S3_CONFIG } from '@venturekit/storage';
const s3Config = createS3Config({ bucketName: 'my-uploads', versioned: true, cdn: true,});