I launched Yatta JS 1.0 a few days ago. That post was the what. This one is the how.
Most backends are a pile of services glued together. Database here, auth service there, queue, cache, mail provider, realtime layer, monitoring. Each one is a network hop, a config, a bill, a 2am failure.
Yatta JS takes the opposite bet: the whole backend is one Bun process. Ten engines share it behind a single yatta/api entry point.
What ten engines means in practice: a type-safe SQLite ORM, auth with passkeys and TOTP two factor on Argon2id hashes and AES-256-GCM sessions, durable job queues with cron and a dead letter queue, L1 plus SQLite L2 cache with stale-while-revalidate, local and S3-compatible storage, transactional mail, unified SSE and WebSocket realtime, SLO observability, and an OpenTelemetry bridge.
One process does not mean one thread doing everything. The worker runtime sizes its CPU and IO pools from the host core count instead of spawning a worker per core. It runs sane on a two-core VPS and a 64-core box with no config changes.
Sharing a process also means sharing memory, and that is where the discipline lives. Streamed request bodies get byte caps so one huge upload cannot eat the process. Token consumption is atomic so two workers never spend the same token. Rate limiting is bounded so forged keys cannot blow up the limiter state. These are the boring details that decide whether single-process is a feature or a footgun.
There is no build step. The TypeScript you write is the TypeScript that runs. One entry point, one process, one runtime to deploy.
The numbers: 889 tests passing. Benchmarks run in CI on every push, and the current numbers are public. On my machine: Yatta JS 12.4k req/s, Hono 13.7k, Elysia 15.9k. On CI runners: Yatta JS 33.6k, Hono 38.6k, Elysia 50k. Slower than the pure routers, on purpose. Every request here passes through a runtime doing real work.
MIT licensed, free forever. Built solo in Liberia.
Docs: https://yatta.js.org
Code: https://github.com/psrockstar098/yatta.js
Install: npm i yatta.js
Top comments (0)