Quickstart
From nothing to a running app in about a minute — without installing Rust.
Scaffold
npm create nowaki@latest my-app
cd my-app
npm installThe CLI ships as a prebuilt native binary (resolved through optional dependencies per platform), so there's no Rust toolchain to install. You can also install it globally withnpm i -g nowaki or cargo install nowaki.
Develop
npm run dev # → nowaki devThe Rust/oxc pipeline transforms files on demand. Pages render to HTML; the components underislands/ hydrate in the browser. Transform and SSR errors appear as a full-screen overlay, and saving fixes them reloads automatically.
Build & serve
npm run build # → nowaki build (scope-hoisted, content-hashed ESM + SSR modules)
npm run start # → nowaki start (Rust front + Node renderer)Project layout
my-app/
routes/
index.tsx # /
about.tsx # /about
blog/[slug].tsx # /blog/:slug (+ optional server loader)
api/hello.ts # /api/hello (GET/POST handlers)
_layout.tsx # shared layout (nests per directory)
_middleware.ts # runs before routes (auth, redirects, headers)
_404.tsx _500.tsx # not-found / error pages
islands/
Counter.tsx # hydrates in the browser — nothing else does
actions/
todos.ts # "use server" RPC endpoints (optional)
nowaki.config.mjs # plugins (optional)Your first route
// routes/index.tsx
import Counter from "../islands/Counter.tsx";
export const title = "Home";
export const loader = async () => ({ now: new Date().toISOString() });
export default function Home({ data }) {
return (
<main>
<h1>Hello from Nowaki</h1>
<p>Rendered at {data.now}</p>
<Counter start={0} /> {/* the only thing that ships JS */}
</main>
);
}