Getting Started with Thunder
Thunder is an open-source CDK library and CLI for deploying modern web applications on your own AWS account — no vendor lock-in, no black boxes.
The Thunder Library
The @thunder-so/thunder package provides CDK constructs for every deployment pattern: static sites, serverless functions, containers on Fargate, and full-stack SSR frameworks.
Install
bun add -d @thunder-so/thundernpm install @thunder-so/thunder --save-devpnpm add -D @thunder-so/thunderBootstrap AWS
If you haven’t bootstrapped your AWS environment yet:
cdk bootstrap aws://YOUR_ACCOUNT_ID/us-east-1Create a Stack
Create a stack file (e.g. stack/dev.ts) and pick the construct that matches your app:
import { Cdk, Static, type StaticProps } from '@thunder-so/thunder';
const config: StaticProps = { env: { account: 'YOUR_ACCOUNT_ID', region: 'us-east-1' }, application: 'myapp', service: 'web', environment: 'prod', rootDir: '.', outputDir: 'dist',};
new Static(new Cdk.App(), `${config.application}-${config.service}-${config.environment}-stack`, config);import { Cdk, Lambda, type LambdaProps } from '@thunder-so/thunder';
const config: LambdaProps = { env: { account: 'YOUR_ACCOUNT_ID', region: 'us-east-1' }, application: 'myapp', service: 'api', environment: 'prod', rootDir: '.', functionProps: { runtime: Cdk.aws_lambda.Runtime.NODEJS_22_X, architecture: Cdk.aws_lambda.Architecture.ARM_64, codeDir: 'src', handler: 'index.handler', memorySize: 512, timeout: 30, },};
new Lambda(new Cdk.App(), `${config.application}-${config.service}-${config.environment}-stack`, config);import { Cdk, Fargate, type FargateProps } from '@thunder-so/thunder';
const config: FargateProps = { env: { account: 'YOUR_ACCOUNT_ID', region: 'us-east-1' }, application: 'myapp', service: 'api', environment: 'prod', rootDir: '.', serviceProps: { port: 3000, cpu: 512, memorySize: 1024, dockerFile: 'Dockerfile', },};
new Fargate(new Cdk.App(), `${config.application}-${config.service}-${config.environment}-stack`, config);import { Cdk, Nuxt, type NuxtProps } from '@thunder-so/thunder';
const config: NuxtProps = { env: { account: 'YOUR_ACCOUNT_ID', region: 'us-east-1' }, application: 'myapp', service: 'web', environment: 'prod', rootDir: '.', serverProps: { runtime: Cdk.aws_lambda.Runtime.NODEJS_22_X, architecture: Cdk.aws_lambda.Architecture.ARM_64, memorySize: 1792, timeout: 10, keepWarm: true, },};
new Nuxt(new Cdk.App(), `${config.application}-${config.service}-${config.environment}-stack`, config);Deploy
npx cdk deploy --app="npx tsx stack/dev.ts" --profile defaultAfter deployment you’ll receive a CloudFront URL for your application.
Framework Guides
Pick your framework for a step-by-step deployment guide.
Thunder Console
Prefer a UI over writing CDK stacks? Thunder Console is a hosted dashboard that connects to your AWS account and manages deployments for you.
Connect your AWS account
Thunder creates a scoped IAM role in your account — you stay in control of your infrastructure.
Import from GitHub
Install the Thunder GitHub App and import any repository. Automatic build detection included.
Manage environments
Configure environment variables, custom domains, redirects, and response headers from the UI.
Real-time build logs
Watch builds and deployments stream live. Get notified on success or failure via email or Slack.