Skip to content

Storage

VentureKit provides storage through @venturekit/storage with S3 bucket configuration, CloudFront CDN, and lifecycle policies.

Terminal window
npm install @venturekit/storage@dev
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',
},
],
},
});
PurposeDescriptionTypical Config
uploadsUser-uploaded filesVersioned, private access
assetsStatic assets (images, CSS, JS)CDN-enabled, public read
backupsDatabase and application backupsPrivate, lifecycle rules
logsApplication and access logsPrivate, expiration rules

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 };
});

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.

For programmatic use outside of intents:

import { createS3Config, DEFAULT_S3_CONFIG } from '@venturekit/storage';
const s3Config = createS3Config({
bucketName: 'my-uploads',
versioned: true,
cdn: true,
});