Production Stability
Cold‑start · soak · cross‑framework comparison
Akan.js is production‑grade, not just fast
We ran Akan.js and five peer frameworks through a 30‑minute production‑style soak on Apple Silicon. The result: Akan.js matches the throughput of the fastest Bun‑native routers while staying stable, restart‑free, and memory‑safe for the entire run.
How we measured
Workload
Pure HTTP ping (no DB, no auth) — the lightweight‑router ceiling every framework is measured against.
Artifacts
Prebuilt production JS bundles. We measured process‑spawn to first‑ready, excluding build and TypeScript loader time for every target.
Duration
30 minutes per target at 50 concurrent virtual users with 10 s warm‑up. Resource samples every 5 seconds.
Machine
Apple Silicon MacBook Pro. Bun‑native targets on Bun 1.3. Fastify on Node 22. Background jobs were kept quiet during the entire run.
Throughput at the lightweight‑router ceiling
Akan.js delivers 112K requests per second through its gateway‑to‑worker path — within 3% of raw Bun.serve and dead even with ElysiaJS. The entire top four Bun‑native frameworks clustered within 10% of each other, which means the runtime ceiling matters more than the framework choice for this workload.
Requests per second
Bars are proportional to the highest RPS in the set. Fastify runs on Node — its number partly reflects the runtime, not just the framework.
Cold start and idle footprint
Akan.js cold‑start p50 is ~204 ms — about 100 ms slower than single‑process peers. This is the one‑time cost of spawning a gateway plus a worker process. It does not affect per‑request latency and is comfortably inside our 1,500 ms SLO.
| Target | Cold p50 | Cold p95 | Idle RSS |
|---|---|---|---|
| raw Bun.serve(Bun) | 102.5 ms | ~108 ms | 45.6 MB |
| ElysiaJS(Bun) | 104.3 ms | ~109 ms | 53 MB |
| Akan.js(Bun) | 203.6 ms | ~209 ms | 84 MB |
| Hono(Bun) | 104 ms | ~109 ms | 47.1 MB |
| raw sqlite(Bun) | 102.4 ms | ~107 ms | 49.6 MB |
| Fastify(Node) | 103.8 ms | ~109 ms | 64.3 MB |
10 iterations per target, 60 s settle between runs. Akan.js cold‑start uses the /_akan/app/health ready‑child check; peers use HTTP ping.
Soak stability: the metric that matters in production
A 30‑minute sustained load at 50 concurrent users. Zero errors, zero worker restarts, zero RSC recycles, and event‑loop lag stayed under 4 ms. All six frameworks passed, but Akan.js is the only one that can report these metrics natively through its built‑in /_akan/app/metrics endpoint.
| Metric | Akan.js | All frameworks |
|---|---|---|
| 30‑min soak error rate | 0.0% | 0.0% |
| Worker restarts | 0 | — |
| RSC worker recycles | 0 | — |
| Event-loop lag p99 | 3.78 ms | — |
| Memory growth per hour | −120.5 MB/h (stable) | All frameworks showed negative or near-zero growth. |
Why the numbers differ — and why that is fine
Gateway + worker architecture
Akan.js runs a gateway process that proxies to child worker processes. This gives you automatic process isolation, health checking, graceful restart, and per-worker metrics — all before you write a single line of infrastructure code. The cost is ~100ms of cold-start overhead versus a single-process server. That 100ms is not latency per request — it is paid once at startup and vanishes under any sustained traffic.
Full-stack runtime, not just a router
The peers in this comparison are HTTP routers with in-memory data. Akan.js loads an entire application stack: Signal context with guards and serialization, document store with DataLoader batching, SSR/RSC worker pipeline, WebSocket pubsub, and a metrics endpoint. The fact that it stays within 3% of raw Bun.serve even under this full-stack load is the actual story.
Heavier idle footprint is expected and bounded
Akan.js idle RSS (~84 MB) is about 1.8× a minimal router. This reflects the loaded service modules, schema registries, and worker scaffolding that your application actually needs. Importantly, the 30‑minute soak shows no memory creep — the growth slope is negative and the peak RSS stabilised. A memory profile that stays flat under sustained load is what matters for production, not the absolute number at startup.
Bottom line
Akan.js is not the fastest HTTP framework on a synthetic ping benchmark — and it should not be. It runs a gateway‑and‑worker architecture, loads an entire full‑stack runtime, and still delivers throughput indistinguishable from the Bun‑native ceiling. After 30 minutes of sustained load: zero errors, zero restarts, flat memory. That is what production‑grade looks like.
