Getting Started

Build HTTP servers with web standard APIs like fetch, Request, and Response.

Quick Start (CLI)

Create a server entry:

server.ts
export default {
  fetch(req: Request) {
    return Response.json({ hello: "world!" });
  },
};

Then, run the server using your favorite runtime:

npx srvx
Read more in Using CLI.
You can also try examples in the online playground

Quick Start (API)

Instead of using the srvx CLI, you can directly import the serve method to define a self-listening server entry.

Create a server entry:

server.ts
import { serve } from "srvx";

const server = serve({
  fetch(request) {
    return Response.json({ hello: "world!" });
  },
});

Install srvx as a dependency:

npm i srvx

Then, run the server using your favorite runtime:

node server.mjs

TypeScript

srvx ships one shared set of type definitions covering every supported runtime. The runtime types they reference come from ambient type packages, declared as optional peerDependencies so that nothing is installed unless you ask for it:

RuntimeTypes package
Node.js@types/node
Deno@types/deno
Bun@types/bun
Cloudflare Workers@cloudflare/workers-types
AWS Lambda@types/aws-lambda
Service Worker@types/serviceworker
@types/deno references DOM types, so pair it with lib: ["esnext", "dom"].
Because the definitions are shared, tsc with skipLibCheck: false also resolves the references of runtimes you do not target and reports the missing ones. Installing all of them is not a way out — @types/serviceworker redeclares globals (Blob, Request, GPU*, …) that @types/bun and @types/deno declare too, and TypeScript's own lib: ["webworker"] collides with @types/bun the same way — so keep skipLibCheck: true (what tsc --init generates).

Starter Examples

ExampleSourceTry
aws-lambdaexamples/aws-lambdanpx giget gh:h3js/srvx/examples/aws-lambda srvx-aws-lambda
elysiaexamples/elysianpx giget gh:h3js/srvx/examples/elysia srvx-elysia
expressexamples/expressnpx giget gh:h3js/srvx/examples/express srvx-express
fastifyexamples/fastifynpx giget gh:h3js/srvx/examples/fastify srvx-fastify
h3examples/h3npx giget gh:h3js/srvx/examples/h3 srvx-h3
hello-worldexamples/hello-worldnpx giget gh:h3js/srvx/examples/hello-world srvx-hello-world
honoexamples/hononpx giget gh:h3js/srvx/examples/hono srvx-hono
jsxexamples/jsxnpx giget gh:h3js/srvx/examples/jsx srvx-jsx
node-handlerexamples/node-handlernpx giget gh:h3js/srvx/examples/node-handler srvx-node-handler
service-workerexamples/service-workernpx giget gh:h3js/srvx/examples/service-worker srvx-service-worker
streamingexamples/streamingnpx giget gh:h3js/srvx/examples/streaming srvx-streaming
tracingexamples/tracingnpx giget gh:h3js/srvx/examples/tracing srvx-tracing
websocketexamples/websocketnpx giget gh:h3js/srvx/examples/websocket srvx-websocket