--- title: Getting Started with Thunder description: Get started with Thunder, the open source platform-as-a-service for AWS --- import { Tabs, TabItem, Aside } from '@astrojs/starlight/components'; import { Icon } from 'astro-icon/components'; import Button from '../../components/Button.astro'; import FrameworksGrid from '../../components/docs/FrameworksGrid.astro'; 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 ```sh bun add -d @thunder-so/thunder ``` ```sh npm install @thunder-so/thunder --save-dev ``` ```sh pnpm add -D @thunder-so/thunder ``` ### Bootstrap AWS If you haven't bootstrapped your AWS environment yet: ```sh cdk bootstrap aws://YOUR_ACCOUNT_ID/us-east-1 ``` ### Create a Stack Create a stack file (e.g. `stack/dev.ts`) and pick the construct that matches your app: ```ts title="stack/dev.ts" 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); ``` ```ts title="stack/dev.ts" 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); ``` ```ts title="stack/dev.ts" 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); ``` ```ts title="stack/dev.ts" 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 ```sh npx cdk deploy --app="npx tsx stack/dev.ts" --profile default ``` After 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](https://console.thunder.so) 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.