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 install

The 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 dev

The 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>
  );
}