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)
Reference , ekko.json
The project manifest. JSONC (comments + trailing commas allowed). See Configuration for the narrative.
Full schema
Field reference
Identity
| Field | Notes |
|---|---|
name | Scoped or plain package name. |
version | Semver. |
type | What the project is, which decides how it builds and runs. A web app is "rune" (SSR + React + Mimir, has a client bundle, ekko dev serves it); "web" is a static/client web project. "run" is a plain script or service with no client bundle (ekko run entry.ts), "lib" a published library, "tool" a CLI (uses bin), "gui"/"tui" desktop/terminal apps, "test" a test project. Building a Beacon-style app? Use "rune", not "run" , ekko dev rejects "run" because it has no client bundle. |
description, license, repository, readme | Metadata. |
minEkko | Minimum runtime version. |
Entry & modules
| Field | Notes |
|---|---|
entry | File ekko run executes. |
imports | Import map: rewrite a specifier to a package (how "react" → @ekko/react). |
exports | Public entry points (libraries). |
bin | CLI commands (tools). |
Run aliases (x)
x maps a short name to a run target, so ekko x <name> (and ekko run <name>) runs it. The target is a
store package (@ekkojs/smtp-dev) or a file path (./scripts/dev.ts). Example: with "x": { "smtp":
"@ekkojs/smtp-dev" }, ekko x smtp runs @ekkojs/smtp-dev.
- Resolution order: the workspace
x(thisekko.json, walked up from the current directory) is checked
first, then the global map in ~/.ekko/config.json (x). No match → the name resolves as usual
(file, store package, or bin), so nothing breaks.
- What's an alias name: a plain identifier (
[A-Za-z0-9_-], no dots/slashes). File names, paths, and
scoped specs like @scope/pkg are never treated as aliases.
- Relative targets in a workspace alias resolve against this
ekko.json's folder, soekko x devworks
from any subfolder. Aliases may chain to other aliases (cycles are rejected).
- Managing global aliases:
ekko alias list(shows workspace + global),ekko alias set <name> <target>,
ekko alias rm <name>. Workspace aliases are edited here in ekko.json.
Dependencies
| Field | Notes |
|---|---|
ship | Runtime deps, included when published. |
build | Build-only deps. |
peer | Consumer must provide; this package shares the consumer's single instance. |
ekko.lock records resolved versions and each dep's source ("store" or a local .ekl).
Permissions
Deny-by-default capability grants. Values: true (blanket) or a scope (glob for fs, host:port for net,
var-name list for env). See Permissions.
Packaging
package.include / package.exclude , globs controlling the published/packed artifact. A rune app includes
its source folders and the prebuilt .ekko/build.
Advanced
| Field | Notes |
|---|---|
native | Platform-specific native artifacts. |
publish / storage | Visibility / storage bucket. |
workspace | Monorepo members + name→folder map. |
A minimal rune-app ekko.json
Next: CLI commands.