Deploy

One build, several targets. Pick an adapter with nowaki build --adapter <target>.

Adapters

AdapterOutput
node (default)A self-contained dist/server/index.mjs — runs with just node, no Nowaki binary needed.
staticPrerendered HTML in dist/static/ for any CDN.
bun / denoThe same node:http-compatible entry, portable to Bun/Deno.
cloudflareAn edge fetch-handler worker in dist/worker/ + a wrangler.jsonc (static assets via the ASSETS binding).

Node

nowaki build --adapter node
cd dist/server && npm install --omit=dev
node index.mjs        # PORT=3000 by default

Static

nowaki build --adapter static
# dist/static/ → upload to any static host / CDN

Static deploys serve the initial SSR of Jetstream islands and degrade gracefully without a WebSocket.

Cloudflare Workers (edge)

nowaki build --adapter cloudflare
cd dist/worker && npx wrangler deploy

The worker bundles every server module statically (no runtime file imports), serves static assets from the ASSETS binding, and runs SSR, API routes, streaming, and server functions at the edge with nodejs_compat.

The Rust front (nowaki start)

nowaki start runs a Rust (axum) front for static serving and HTML assembly with a Node renderer behind it, and it's what holds the Jetstream WebSocket. Use it when you want the connected, server-reactive mode.