Features

Everything ekko:rune gives you to build and ship a full-stack web app, one runtime, one process. Each item links to its chapter.

Rendering

Server-side rendering

Static routes with an ssr() are fully rendered to HTML and cached. Real content on first paint, perfect for SEO and link previews.

Learn more →

Hydration without mismatch

The server and client render the same layout(page) tree and the same seeded state, so hydration is a clean attach, no flicker, no warnings.

Learn more →

Client-side navigation

After the first load the router swaps pages in place from a baked-in route table. No reload, no white flash, instant.

Learn more →

SSR strategies

Choose eager (warm at boot), background (boot fast, warm after), or lazy (warm on first hit) per app or per route.

Learn more →

Routing

File-based routes

pages/about.tsx is /about. [param] is dynamic, [...rest] is catch-all, (group) folders are stripped from the URL.

Learn more →

The router hooks

useRouter, useParams, useSearchParams give you path, params, and query; navigate and Link move on the client.

Learn more →

Guards & redirects

Route guards redirect before render; server redirects handle moved URLs; back-button rules tame multi-step flows.

Learn more →

Programmatic routes

Register one cached, SEO-perfect route per item from data, the technique these docs use for every page.

Learn more →

State (Mimir)

Atoms

State lives in standalone atoms keyed by a string, outside the component tree, so it survives navigation.

Learn more →

Selectors

Derived state with automatic dependency tracking: recompute and re-render exactly when inputs change.

Learn more →

SSR seeding

Seed atoms from the server with fill / force / merge directives so the hydrated page already has the right values.

Learn more →

Sessions & persistence

Mirror atoms to IndexedDB (ephemeral or domain) so a cart, a theme, or a draft survives a full reload.

Learn more →

Backend & build

API routes

app.api(method, path, handler) in the same process as your pages. Return a value and it is sent as JSON.

Learn more →

Middleware

app.use(...) for auth, logging, and security headers across every request; req.user flows into SSR.

Learn more →

The build & manifest

ekko build --client emits a content-hashed, code-split bundle and a manifest the server reads, zero config.

Learn more →

SEO, robots, sitemap

createSEO() generates head tags, Open Graph, Twitter cards, robots.txt and sitemap.xml from one config.

Learn more →

Quality of life

Theming, no flash

SCSS tokens + a theme atom + a no-FOUC script: dark/light with correct first paint and no flicker.

Learn more →

Secure by default

Deny-by-default capabilities (fs, net, env, ...) with scoped grants. The blast radius is one config block.

Learn more →

No node_modules

Dependencies come from the EkkoJS store via ekko.json, no sprawling install, no lockfile drift.

Learn more →

A runbook deploy

Build the client, ship the folder + runtime, run under systemd, nginx + Let's Encrypt in front. Done.

Learn more →