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.js SSR
Point aft at a live Next.js upstream, then
register it with aft via aft.json:
{
"name": "next-hello",
"runtime": "next",
"upstream": "https://your-app.example.com"
}
Live dogfood: next-hello.aft.page. aft.page does not build or deploy the Worker for you yet — you own that Worker and its deploys; aft.page just proxies to it.
Full compatibility matrix
Three tiers. "Verified" means the hosted CLI has actually detected, built, and shipped it end to end. "Static-capable, unverified" means the framework's build output should work as plain static files, but nobody has run it through the CLI yet — try it, but expect rough edges. "Needs a runtime we don't run" means it needs an automatic build, adapter, or container aft.page doesn't provide — bring your own upstream Worker (see Next SSR above) or it won't deploy.
Verified, shipped today
- Plain HTML
- React + Vite, Vue + Vite, Svelte + Vite
- Astro (static output)
- Next.js static export
- Next.js via an existing HTTP upstream
Static-capable, unverified — try it, no promises
Angular, Brunch, Create React App, Docusaurus, Dojo, Eleventy, Ember.js, Gatsby, Gridsome, Hexo, Hugo, Ionic (Angular/React), Jekyll, Middleman, Parcel, Polymer, Preact, Nuxt (static generation), React Router (static/SPA mode), Remix (static/SPA mode), RedwoodJS (static web output), Saber, Sanity Studio, Scully, SolidStart (static output), Stencil, Storybook, SvelteKit (static adapter), TanStack Start (static output), UmiJS, VitePress, VuePress, Zola.
Needs a runtime we don't run yet
Containers; Python (Django, FastAPI, FastHTML, Flask); Node backends (Express, Fastify, Hono, Koa, NestJS, Nitro); Go; Next.js SSR beyond the manual upstream flow above; Nuxt SSR, React Router SSR, Remix SSR, SvelteKit SSR, SolidStart SSR, TanStack Start SSR; multi-function "Services" deployments.
Next: Docs home — back to the quick start and the full platform reference.