Docs / Frameworks

Frameworks

aft.page hosts prebuilt static output (and optional Worker upstreams). Detect the project, build locally, upload the output folder only.

Detect & ship

Look at package.json, vite.config.*, next.config.*, index.html.

  • Plain HTML → upload those files (Drop, CLI, MCP).
  • Bundler app → npm run build, then upload output only (dist/, out/, build/).

Never upload src/, node_modules, or .next/. The hosted CLI auto-picks common output folders — CLI guide.

Plain HTML

aft deploy
# or Drop a folder / zip with index.html

Live: hello.aft.page. README-only (no index.html): / is 404; the file is at /README.md.

Vite / React / Vue / Svelte / Astro

npm run build
aft deploy          # uses dist/
# aft deploy dist

Example: vite-hello.aft.page. CRA / Rsbuild usually emit build/ or dist/.

Next.js static export

In next.config set output: 'export', then:

npm run build
aft deploy out

This is static hosting only — no Next server in the Worker unless you use the upstream path below.

Next SSR / OpenNext

Deploy the Worker with OpenNext (or any HTTP upstream), then register it with aft via aft.json:

{
  "name": "next-hello",
  "runtime": "next",
  "upstream": "https://your-worker.example.workers.dev"
}

Live dogfood: next-hello.aft.page. aft.page does not build or deploy the Worker for you yet.

Not supported yet

Automatic build in our cloud, in-Worker Next SSR without your own upstream, Django/Flask/Express containers, and most SSR frameworks without a customer-supplied HTTP runtime. Compatibility target: repo docs/FRAMEWORK-COMPATIBILITY.md.