# Adapters & runtimes

DaloyJS is a REST API backend framework. The core only ever sees `Request → Response`. Runtime-specific concerns, sockets, signals, edge handlers, Lambda event shapes, live in thin adapters at the edge. Choose the adapter for the place you want to deploy your API.

**Diagram: One app core, many runtimes**

- **Your DaloyJS App** (source, web-standard core) - Request -> Response
- **Node.js** (runtime) - @daloyjs/core/node
- **Bun** (runtime) - @daloyjs/core/bun
- **Deno** (runtime) - @daloyjs/core/deno
- **Cloudflare Workers** (edge) - @daloyjs/core/cloudflare
- **Vercel / Netlify** (serverless) - @daloyjs/core/vercel
- **Fastly / AWS Lambda** (edge / serverless) - @daloyjs/core/fastly · /lambda

The core only ever sees a Request and returns a Response. Each thin adapter handles one platform's sockets, signals, or event shape, so the same app ships everywhere without a rewrite.

## Pick a target

### Runtimes (you own the process)

[Node.js Long-lived process on Node 24 LTS or Node 26+. Sane request/header/keep-alive timeouts and SIGTERM-driven graceful shutdown.](/docs/adapters/node) [Bun Native Bun.serve for REST APIs. Fast startup, built-in TLS, Unix sockets, and hot reload in dev.](/docs/adapters/bun) [Deno Stable Deno.serve with AbortSignal-based shutdown. Runs anywhere, including Deno Deploy.](/docs/adapters/deno)

### Edge & serverless (platform owns the process)

[Cloudflare Workers Modules-format Worker. wrangler.jsonc, nodejs_compat, and bindings for KV, R2, D1, DO, Queues, Hyperdrive.](/docs/adapters/cloudflare-workers) [Netlify Edge Functions (Deno) and Functions v2 (Node, fetch-style). The v1 lambda shape is legacy.](/docs/adapters/netlify) [Fastly Compute JS Compute via @fastly/js-compute and the fetch-event listener model, wrapped by installFastlyListener.](/docs/adapters/fastly) [AWS Lambda API Gateway HTTP API v2.0, REST API v1.0, Function URLs, and streamifyResponse for streaming.](/docs/adapters/aws-lambda)

## Roll your own

If your runtime exposes the web-standard `Request / Response` contract and isn't listed above, you don't need an adapter at all, pass the incoming request straight to `app.fetch`:

```ts
// modules-format (Cloudflare Workers, Deno, Bun, etc.)
export default {
  fetch(request: Request): Promise<Response> {
    return app.fetch(request);
  },
};
```

## See also

- [Deployment](/docs/deployment): Docker, reverse proxies, health checks, and Node platform guides (Fly.io, Render, Railway, Heroku).
- [Scaffolder](/docs/scaffolder): `pnpm create daloy` ships runtime-specific templates.

---

Source: https://daloyjs.dev/docs/adapters