Deployment adapters
Every adapter converts one createEdgeAdapter handler (EdgeRequest → EdgeResponse) into a platform's native signature. Your SSR code stays identical; only the adapter package changes.
| Package | Target | Entry |
|---|---|---|
@jorvel/adapter-node | Node HTTP server | createNodeHandler |
@jorvel/adapter-vercel | Vercel Functions | createVercelHandler |
@jorvel/adapter-cloudflare | Cloudflare Workers | fetch(request, env, ctx) |
@jorvel/adapter-bun | Bun.serve | createBunHandler / serveBun |
@jorvel/adapter-deno | Deno Deploy | createDenoHandler / serveDeno |
@jorvel/adapter-netlify | Netlify Functions/Edge | createNetlifyHandler |
@jorvel/adapter-aws-lambda | API Gateway v2 + Lambda@Edge | createLambdaHandler / createEdgeLambdaHandler |
Bun
ts
import { serveBun } from '@jorvel/adapter-bun';
import { App, template, routes } from './app.js';
serveBun({ App, template, routes, staticDir: 'dist', port: 3000 });
// or: const fetch = createBunHandler({ ... }); Bun.serve({ port: 3000, fetch });Deno Deploy
ts
import { serveDeno } from '@jorvel/adapter-deno';
import { App, template, routes } from './app.ts';
serveDeno({ App, template, routes }); // Deno.serve under the hood, PORT=8000 defaultNetlify
netlify/edge-functions/ssr.ts
tsimport { createNetlifyHandler, netlifyToml } from '@jorvel/adapter-netlify';
import { App, template, routes } from '../../src/app.js';
export default createNetlifyHandler({ App, template, routes });
// `netlifyToml` exports a starter netlify.toml routing /* through this functionAWS Lambda & Lambda@Edge
ts
// API Gateway HTTP API (v2)
import { createLambdaHandler } from '@jorvel/adapter-aws-lambda';
export const handler = createLambdaHandler({ App, template, routes });
// CloudFront origin-request (Lambda@Edge)
import { createEdgeLambdaHandler } from '@jorvel/adapter-aws-lambda';
export const handler = createEdgeLambdaHandler({ App, template, routes });The AWS adapter declares its own minimal event/result types, so you don't need @types/aws-lambda installed. Binary bodies are base64-encoded automatically.
Other hosts
Fly.io / Render / Railway run the Node adapter in a container — use
jorvel deploy --target docker for a Dockerfile and point the platform at it.Streaming on buffered runtimes
API Gateway (buffered) can't stream a
ReadableStream body — the AWS adapter returns an empty body for streamed responses. Use the Node/Bun/Deno/CF adapters when you rely on streaming SSR.