Runeekko:rune

The full-stack framework built into EkkoJS.

The full-stack framework built into EkkoJS.

A folder of .tsx files becomes a server-rendered, instantly-navigable app: file-based routing, SSR with caching, Mimir state that survives an F5, API routes, and a one-command build, with no node_modules and no separate API server.

SSR first paintSPA after hydrateMimir stateZero config
// server.tsx , the whole backend
import { createApp, scanRoutes, readManifest } from "ekko:rune";

const app = createApp({ port: 3000, manifest: readManifest() });
for (const r of scanRoutes("pages"))
  app.page(r.pattern, modules[r.pattern], { page: r.pageKey });
app.start();

// pages/index.tsx , a page
export function ssr() { return { title: "Home" }; }
export default function Home() {
  const [n, setN] = useAtom(countAtom);   // survives navigation
  return <button onClick={() => setN(n + 1)}>Clicked {n}x</button>;
}

Everything to ship a full-stack app

One runtime, one process, one mental model. Each piece has a deep chapter in the docs.

File-based routing

pages/blog/[slug].tsx is /blog/:slug. Static beats dynamic beats catch-all, no route table to maintain.

Learn more โ†’

SSR, then SPA

Real HTML on first paint (fast + indexable), then every navigation is client-side and instant, automatically.

Learn more โ†’

Mimir state

Atoms outside the component tree survive navigation and, with a session, an F5. The server can seed them with no flicker.

Learn more โ†’

API in the same process

app.api(...) runs beside your pages. No second server, no CORS, no type boundary, just function calls.

Learn more โ†’

SSR cache + invalidation

Eager, background, or lazy rendering with tag and path invalidation. Bust a page from an API handler.

Learn more โ†’

A real build

ekko build --client produces a content-hashed, code-split bundle and a manifest, no node_modules, no config.

Learn more โ†’

SEO built in

createSEO() emits title, Open Graph, Twitter, canonical, robots, and sitemaps from one config.

Learn more โ†’

Themed, no flash

SCSS compiled at start, a theme atom, and a no-FOUC script: dark/light with correct first paint.

Learn more โ†’

Secure by default

Deny-by-default permissions: the app only touches the files, hosts, and env vars you grant.

Learn more โ†’