# Deno web development

Choose the abstraction from the workload. “Building for the web” does not automatically require a full-stack framework.

| Option | Position | Good for | Poor fit |
| --- | --- | --- | --- |
| `Deno.serve` | Web-standard HTTP primitive | webhooks, small APIs, proxies | many routes and business middleware |
| Fresh 2 | Deno-first full-stack SSR | content, commerce, CRUD, progressive interaction | client-only SPAs |
| Hono | small cross-runtime framework | REST, edge, portable APIs | opinionated full-stack pages |
| Oak | Express/Koa-style middleware | Deno backends and middleware-oriented teams | minimum cross-platform bundles |
| Lume | Deno static-site generator | docs, blogs, content sites | dynamic back offices |

Aleph.js was an important Deno React SSR experiment, but new projects should verify its current releases, maintenance, and target runtime before selecting it. Do not treat a historical comparison table as a recommendation.

## Minimal HTTP service

```ts
Deno.serve({ port: 8000 }, (request) => {
  const url = new URL(request.url);
  if (url.pathname === "/health") return Response.json({ ok: true });
  return new Response("Not found", { status: 404 });
});
```

```bash
deno run --allow-net=0.0.0.0:8000 main.ts
```

## Selection rules

- Mostly server-rendered HTML with local interaction: Fresh.
- One API across Deno, Workers, Bun, or Node: Hono.
- The team prefers middleware and context: Oak.
- Only a few endpoints: keep `Deno.serve` and one less abstraction.

Next: [Fresh](/en/docs/web/fresh), [Hono](/en/docs/web/hono), [Oak](/en/docs/web/oak), [Lume](/en/docs/web/lume), and [databases](/en/docs/database).
