Stream Runtime

Use StreamRuntimeAdapter when the host already exposes fetch events as an async iterator.

When to Use It

This adapter is a good fit for environments such as:

  • service workers
  • custom worker hosts
  • stream-based fetch event bridges

It does not open a socket listener itself. Instead, it consumes events and dispatches them through Server.

Example

import { Server } from "@hornjs/fest";
import { StreamRuntimeAdapter } from "@hornjs/fest/stream";

async function* events() {
  while (true) {
    yield await getNextFetchEvent();
  }
}

const server = new Server({
  adapter: new StreamRuntimeAdapter({
    stream: events(),
    url: "/worker",
  }),
  fetch(request) {
    return new Response(`Hello from ${new URL(request.url).pathname}`);
  },
});

await server.serve();

Runtime Capabilities

The stream adapter intentionally exposes a minimal capability set:

  • resolve() returns null
  • open() returns null
  • createGzip() uses CompressionStream when available
  • Brotli compression is not provided

That means helpers such as serveStatic() are only useful in stream hosts if you replace or extend the runtime capability implementation.