Documentation
Docs
Introduction
Getting Started
Tutorial: build an app
Core Concepts
Routing
Server-Side Rendering
Mimir, state management
Pages & Layouts
API Routes
Styling & Theming
Building & Deploying
API Reference
Guides
Recipes
FAQ (use cases)
Installation
rune is part of the EkkoJS runtime, so "installing rune" means having ekko on your machine. There is no
separate framework package to add.
Create a project
Once ekko is on your PATH, the recommended way to start a rune app is ekko init rune — it writes
the correct ekko.json ("type": "rune", entry server.tsx, the React imports map) and a working
starter, so you never hand-write the manifest:
The rest of this guide explains what the scaffold produced and how to run it.
Prerequisites
- The
ekkobinary on yourPATH. Verify it:
- A rune application depends on a few packages from the EkkoJS store, declared in
ekko.json:
These resolve from the EkkoJS package store (~/.ekko/store), not from npm. There is no
node_modules directory.
Getting a project
The fastest start is to copy a rune template, a minimal project with server.tsx, a pages/ folder, a
layout, a theme, and the docs pipeline already wired up. Then:
Open http://localhost:3000.
The two commands you will use constantly
| Command | What it does |
|---|---|
ekko build --client | Transpiles + bundles the client code (your pages, hydration) into .ekko/build/client/* and writes .ekko/build/manifest.json. Run it whenever client-rendered code changes. |
ekko run server.tsx --allow=... | Starts the rune server. It reads the manifest, compiles your SCSS, registers routes, and listens. |
The
--allowflags grant runtime capabilities. A typical rune app needsfs(read templates, SCSS, static files),net(listen and proxy), and oftenenv(readPORT). You can also declare these inekko.jsonunderpermissionsso you do not repeat them on the command line, see Permissions.
Permissions at a glance
fs, read your pages, styles, and static assets.net, bind the listening socket (and make outbound requests if your app does).env, read environment variables such asPORT.
If you forget a needed permission, the runtime throws a clear permission error naming the capability, add it
to the flag (or to ekko.json).
Editor setup
rune apps are plain TypeScript + TSX. Any editor with TypeScript support works. The ekko:* modules are
ambient (provided by the runtime); your project's tsconfig and the EkkoJS type definitions make
import { createApp } from "ekko:rune" type-check.
Next: build your first page in Quick start.