Under the hood
Every program follows the same path. The CLI starts a Rust host that executes your code on V8 and authorizes each native capability against an explicit permission model. The native APIs are written in Rust and .NET, compiled ahead-of-time to machine code.
Capabilities
A batteries-included standard library, organized by capability. Every module lives in the runtime under the ekko: namespace.
File System
Read, write, watch, and stream files and directories.
Network
TCP, UDP, and DNS for network clients and servers.
Web & HTTP
HTTP server and client, routing, and WebSockets.
Database
A typed ORM over five SQL and NoSQL engines.
Cryptography
Hashing, HMAC, AES, and RSA/ECDSA.
Authentication
Sessions, JWT, OAuth, password hashing, and TOTP.
Runtime & Threads
Real threads, channels, and parallelism.
Testing
A built-in BDD runner with assertions and coverage.
Text & Encoding
JSON, text encoding, and regular expressions.
Date & Time
Timezone-aware dates, formatting, and arithmetic.
Process
Spawn processes, read the environment, handle signals.
Logging
Structured, leveled application logging.
Compression
Compress and decompress data and archives.
Jobs & Scheduling
Cron schedules and background job queues.
Foreign Functions
Call native C libraries directly from your code.
Server Rendering
Render React to HTML on the server.
The Rune Framework
Rune is the full-stack React framework built into EkkoJS. It renders on the server by design, then hands the running app to the browser: the first load is server-rendered, and every navigation after that is local and instant. Application state lives in Mimir, Rune’s state management, so a full refresh restores exactly where you were, with no lost client state.
Server-rendered by design
Every page renders to HTML on the server, for a fast first paint that search engines can read.
Load once, then client-side
After the first load the app runs in the browser. Navigation swaps pages locally, with no further round-trips.
Refresh-safe state
State lives in Mimir and rehydrates on load, so a full refresh keeps you exactly where you were.