Skip to content

Websites

Alchemy deploys frontends to AWS with a family of AWS.Website resources. Each one builds your project programmatically and deploys it as a serverless site — the SSR server on a streaming Lambda Function URL, static assets in a private S3 bucket, and a CloudFront distribution whose edge router serves uploaded files from S3 and forwards everything else to the server — with no AWS-specific configuration: no CDK, no CloudFormation, no adapter setup. Your framework’s own config file (astro.config.*, nuxt.config.ts, vite.config.ts, …) loads natively; Alchemy layers its AWS integration on top.

  • Vite — any client-only Vite project (React, Vue, Solid, or a plain SPA): assets-only, no Lambda; your vite.config.* loads natively.
  • Foldkit — Foldkit apps; Vite with SPA deep links on by default.
  • Astro — Astro sites, server-rendered or fully static; your astro.config.* loads natively.
  • Nextjs — Next.js apps built through the OpenNext (@opennextjs/aws) pipeline, with streaming SSR, image optimization, and ISR wiring; your next.config.* is honored as-is.
  • Nuxt — Nuxt apps built through nitro’s aws-lambda preset; your nuxt.config.ts loads natively.
  • ReactRouter — React Router v7 in framework mode, built through your own vite build.
  • SvelteKit — SvelteKit apps with a wrangler-free in-memory AWS adapter; your vite.config.ts loads natively.
  • TanStackStart — TanStack Start (React or Solid), built through your own vite build.
  • Waku — Waku (React Server Components) apps.
  • Octane — OctaneJS fullstack apps built through your own vite build with the AWS marker adapter.
  • StaticSite — any directory of files, optionally produced by a build command, for static generators like Zola and Hugo or pre-built SPAs.
  • Router — a shared CloudFront front door: one distribution serving several sites (or a site plus an API), routed at the edge.

Every resource shares the same surface: domain (ACM certificate + Route 53 records), server configuration (memorySize, timeout, env), assets, edge customizations, and invalidation. All builds are memoized by content-hashing the input files — an unchanged project skips the build and deploy entirely. Under alchemy dev, every resource runs the framework’s own dev server (native HMR) instead of deploying; Alchemy.remote() opts back into the full live deployment.

Framework Resource Guide
React / Vite SPA Vite React SPA
Vue Vite Vue
Foldkit Foldkit Foldkit
TanStack Start (React & Solid) TanStackStart TanStack Start
React Router ReactRouter React Router
Astro Astro Astro
Next.js Nextjs Next.js
Nuxt Nuxt Nuxt
SvelteKit SvelteKit SvelteKit
Waku Waku Waku
OctaneJS (fullstack) Octane Octane
Zola, Hugo, or any static generator StaticSite Static sites

Every row is backed by a checked-in example or a live deploy test in the Alchemy repository. The last row is deliberately open-ended: StaticSite deploys any directory of files (running your build command first if you give it one), so any generator works the same way.

Use the resource named after your framework. Astro, Nextjs, Nuxt, ReactRouter, SvelteKit, TanStackStart, Waku, and Octane each drive their framework’s own build and know its output layout, config surface, and dev server.

Use Vite when the app is client-only and a single vite build produces the whole thing — a React or Vue SPA, or any Vite project with no server. It creates no Lambda.

Use StaticSite when the output is plain files from an arbitrary build command that emits a directory (Zola, Hugo, or any other generator without a dedicated resource).

Use Router when several sites (or a site plus an API) should share one CloudFront distribution and one domain — distributions take minutes to create, and each custom domain can only attach to one.