Hono is a web framework built on Web Standards: the Request, Response, URL, and Headers objects that every modern JavaScript runtime already ships. Because the framework speaks only those primitives, the same application runs unchanged on Cloudflare Workers, Deno, Bun, Fastly Compute, AWS Lambda, Lambda@Edge, Vercel, Netlify, and Node.js. The npm package declares zero runtime dependencies -- everything from the routers to the JSX renderer is implemented inside src/.
The entire programming model fits in four lines:
import { Hono } from 'hono'
const app = new Hono()
app.get('/', (c) => c.text('Hono!'))
export default app
export default app works on Workers, Deno, and Bun because those runtimes call the exported object's fetch(request) method directly -- there is no server abstraction between the platform and your handler.
What people build with it
- Edge APIs on Cloudflare Workers. Hono started as a Workers framework and still treats it as the first-class target:
c.envexposes Workers bindings (KV, D1, R2),c.executionCtxexposeswaitUntil, and thehono/cloudflare-workersadapter addsserveStaticand WebSocket upgrades. - One codebase, several runtimes. Teams that deploy the same service to Lambda for one customer and Workers for another keep runtime-specific code confined to a one-line adapter import; the app itself only touches Web Standard APIs.
- Type-safe full-stack apps. Route definitions carry their input and output types, so the bundled
hcclient (hono/client) gives the frontend end-to-end typed RPC calls without code generation. - Server-rendered sites. A built-in JSX runtime (
src/jsx/) renders HTML on the server with streaming support, and doubles as a client-side runtime for interactive islands.
The shape of the codebase
hono the package is a family of entry points defined in package.json exports (76 subpaths). The core class comes in three presets that differ only in router choice: hono (RegExpRouter + TrieRouter), hono/quick (LinearRouter, for per-request isolates), and hono/tiny (PatternRouter, ~12 kB minified target). Built-in middleware (hono/logger, hono/etag, hono/cors, ...) and helpers (hono/cookie, hono/streaming, ...) each live behind their own subpath so bundlers ship only what you import.
Where to go next
- Evaluating Hono or learning the mental model: read How a request flows, then Routing.
- Contributing to the framework: start with Your first day in the repo, which walks through setup, the test matrix, and a first change.
- Deciding what to import: the package exports map lists every subpath and what it is for; Configuration covers the
new Hono(...)options. - Writing an app right now: the cookbook has testing recipes and error-handling patterns.
- Curious why there are no dependencies: Zero dependencies by design explains what is built in instead of depended on.