A lightweight gateway programmable with JavaScript.

Route requests, rewrite URLs, and proxy to backends using Web APIs you already know — fetch(), Request, Response, Headers. Write your gateway logic in JavaScript, get auto HTTPS with ACME, and scale to 300k+ req/sec on a single machine.

Single binary. Zero dependencies. Top-tier performance with top-tier usability.

Quick Start

const app = new App();

app.get('/hello', () => new Response('Hello World!'));

app.all('/*', (req) => {
    return fetch(req, { target: 'https://httpbin.org' });
});

export default app;

Features

Architecture

client ──► HTTP/HTTPS ──► JS Handler ──► fetch ──► backend
               |              |            |
             ACME           Route         TLS
             Chunked        Rewrite       DNS
             Keep-alive     Access
             Access Log     Headers
                            Gzip

Performance

JSRealm delivers 128k requests/sec for proxy workloads — 33% faster than Bun, 3x faster than Caddy, 6x faster than Node.js.

Memory usage stays at 6MB under load, while Bun uses 50MB, Caddy 41MB, and Node.js 274MB.

Fetch/Proxy         Requests/sec          Memory (RSS)
------------------------------------------------------
JSRealm              128,703 (baseline)     6 MB (baseline)
Bun                   96,375 (-25%)        50 MB (+733%)
Caddy                 42,145 (-67%)        41 MB (+583%)
Node.js               21,663 (-83%)       274 MB (+4467%)