mrkeyoor.com_
Tue 01 Sept 17:42 UTC
Webevaluationupdated 27 Aug 2026

hono review

Hono is a TypeScript web framework for building APIs and web applications around the standard Request and Response interfaces. It solves a practical portability problem: much of the same application code can run on Cloudflare Workers, Deno, Bun, Node.js, and several serverless platforms.

+70 / 5dstars / 7d
Verdict

Our Hono run installed 872 packages in 35 seconds and built in 12 seconds, but Vitest failed at startup after 22 seconds, so the contributor checkout needs more scrutiny than the tiny application API suggests. Use Hono when Web-standard portability is a real requirement and your team will test the selected adapter. Express or Fastify is the calmer choice for a Node-only service with deep existing middleware commitments.

We ran it

Lab card: what happened when we ran honoScreenshot of hono (hono.dev)
Install✓ · 35s872 packages · 765 MB
Build✓ · 12s
Tests✗ · 22sran, no count parsed
Repo486 files~84,863 lines of source · 4.7 MB · 5 CI workflows

Answers from our run

Does hono build from source?

Dependencies installed in 35 seconds (872 packages), and the build succeeded in 12 seconds. We cloned commit 499c35e into a clean Debian container with 3 CPUs and no project-specific setup.

Do hono's tests pass?

The test command failed in our container, and its output did not report a pass or fail count.

Who should not use hono?

Node.js teams expecting existing Express middleware to drop in unchanged: Hono has its own Handler and onion-style middleware model, and Node runs through a separate adapter.

What are the alternatives to hono?

Express, Fastify, Elysia. Our Hono run installed 872 packages in 35 seconds and built in 12 seconds, but Vitest failed at startup after 22 seconds, so the contributor checkout needs more scrutiny than the tiny application API suggests.

Setup3/5Quick app start, but 872 dev packages and a failed test startup
Docs5/5Clear runtime guides, middleware references, and migration notes
Community5/531,977 stars with issue and pull request activity this week
Maturity4/5v4 is widely used, though security patches still demand attention

Discussed on

  1. hnHonoJS: Small, simple, and ultrafast web framework for the Edges300 points
  2. hnHono v4.0181 points
  3. hnHono: Ultrafast Web Framework for Cloudflare Workers, Deno, and Bun4 points
  4. hnHono: Fast, Lightweight, Web-Standards3 points

Who it’s for

TypeScript teams that want one routing and middleware model across edge, serverless, Bun, Deno, and Node.js deployments.
API developers who prefer Web-standard Request and Response objects over a Node-specific framework interface.
Small services that need routing, typed clients, and common middleware without choosing a large application framework.
Teams willing to test each deployment adapter instead of assuming every runtime behaves identically.

Who it’s NOT for

Node.js teams expecting existing Express middleware to drop in unchanged: Hono has its own Handler and onion-style middleware model, and Node runs through a separate adapter.
Contributors who want a small npm-only checkout: the contribution guide requires Bun, while our install pulled 872 packages and used 765 MB.
Operators unwilling to track patch releases: v4.13.5 fixed three security problems involving query parsing, static-site output paths, and body parsing.
Applications that rely heavily on runtime-specific server APIs while also expecting portable code: WebSockets, static files, raw Node access, and shutdown behavior use adapter-specific paths.

Setup reality

Our run at commit 499c35e installed 872 packages in 35 seconds and occupied 765 MB. The build succeeded in 12 seconds. Tests failed with exit code 1 after 22 seconds, before Vitest ran assertions, because startup stopped on a missing styleText export from node:util.

A basic Hono app needs no account, secret, database, or hosted service. Deployment still requires the chosen runtime and its configuration. Node.js uses @hono/node-server; WebSocket support also needs ws, while cloud targets need their normal provider credentials and bindings.

Repository development uses Bun, and the checked package names Bun 1.2.20. The Node guide documents supported Node 18.x, 19.x, and 20.x minimums. Our fresh Node 22 sandbox could install and build the checkout, but its test command could not start Vitest; the log does not establish why that export was unavailable.

Hono targets eight runtimes with one request model

Hono builds routing and middleware around the Web-standard Request and Response interfaces. The README names 8 targets: Cloudflare Workers, Fastly Compute, Deno, Bun, Vercel, AWS Lambda, Lambda@Edge, and Node.js. A basic route receives a context and returns text, JSON, or another response. That common shape is the reason to choose Hono. A team can move more application code between an edge worker and a conventional server without replacing its router.

Portability has limits. Static files, WebSockets, environment bindings, and access to a server's native objects differ by adapter. Hono keeps the handler model consistent, while each host still owns process lifetime, filesystem behavior, and platform services. Treat portability as a design constraint: keep most handlers on Web APIs, isolate adapter code, and run acceptance tests on every runtime you intend to support. Copying the same TypeScript file into 2 deployments does not prove identical behavior.

Node.js support starts at version 18 through an adapter

Hono's Node guide says the framework was not originally designed for Node.js and now runs there through @hono/node-server. It documents minimum releases within Node 18.x, 19.x, and 20.x, and recommends a current release in each line. The adapter wraps node:http and returns the underlying server. Your application therefore owns graceful shutdown for signals such as SIGINT and SIGTERM.

Node-specific work is available when needed. The context exposes incoming and outgoing server objects, serveStatic reads from the local filesystem, and WebSockets use the Node server package plus ws. One documented trap is that a static root resolves from process.cwd(), so starting the process from another directory can break file lookup. The guide suggests resolving from import.meta.url when the path must stay tied to the source file.

What happened when we ran it

Our sandbox cloned commit 499c35e with 3 CPUs, 8 GB of RAM, Node 22, and no secrets. The checkout held 486 files, roughly 84,863 lines of source, and used 4.7 MB. Installation succeeded in 35 seconds, added 872 packages, and left 765 MB on disk. The build then succeeded in 12 seconds. Those figures describe repository development, not the dependency footprint of a small app that imports Hono.

The test command failed after 22 seconds with exit code 1. TypeScript compilation ran first, then Vitest stopped during startup. Rolldown tried to import formatWithOptions and styleText from node:util, and the runtime reported that styleText was not exported. No assertion count followed because Vitest did not start its run. The tail does not identify whether the mismatch came from the runtime image, the installed toolchain, or project configuration, so we do not assign a cause.

Our repository scan found 5 CI workflow files, no Dockerfile, and no tests directory. Test files are colocated in the source tree, and the package defines separate commands for Deno, Bun, Node, workerd, Lambda, and Lambda@Edge. That is a serious runtime matrix, but our single failed command remains a failed result. A prospective contributor should reproduce the pinned Bun workflow and the runtime-specific jobs before treating the checkout as green.

The 765 MB contributor install is the hidden setup cost

Starting an application is much lighter than preparing the framework repository. The public quick start is one create-hono command, and a basic app needs no account or secret. By contrast, the contribution guide tells developers to install Bun and use a frozen lockfile. The checked package identifies Bun 1.2.20, while our development install brought 872 packages onto disk. That difference matters for onboarding, CI caches, and source builds.

A Node deployment adds @hono/node-server; WebSockets add ws; other targets bring their own command-line tools, credentials, and resource bindings. Hono does not provision Cloudflare, AWS, Vercel, or Fastly for you. The repository also has no Dockerfile, although the Node guide supplies an example application image based on Node 22 Alpine. Deployment is approachable once a runtime is chosen, but there is no single production recipe that covers all 8 targets.

v4.13.5 fixed three security paths worth checking

Release v4.13.5 arrived on August 26, 2026 with 3 security fixes. One stops query parsing after a URL fragment so Hono does not disagree with a proxy, cache, WAF, or logger about parameters. Another closes a remaining path escape in static-site generation. The third limits dot-notation nesting in body parsing to prevent disproportionate memory allocation. The release specifically urges affected users to upgrade.

That release is evidence of maintenance and a reminder to pin deliberately. Hono covers caching, authentication helpers, parsing, streaming, static generation, and many deployment adapters, so security exposure depends on which pieces an application uses. Open issue 5299, filed August 25, reports that an invalid Server-Sent Events retry value may inject fields into a frame; the report says its finding came from static analysis and was not executed. Verify its status before relying on that path.

The August 27 push and 370-item queue show active maintenance

GitHub recorded the last push on August 27, 2026, one day after v4.13.5. The repository had 31,977 stars and 370 combined issues and pull requests when fetched. Fresh reports and proposed fixes were being updated on August 25 and 26. That activity supports a healthy maintenance judgment, while the combined open figure describes work in progress rather than 370 confirmed defects.

The project also maintains an open v5 feature list. Its wording says the team aims to implement those items, including ESM-only packaging, separate adapter packages, response validation, and type changes. Those are aspirations for the next major release, not promises with a ship date. For a new service, Hono v4 is a strong choice when runtime flexibility pays for adapter testing. A Node-only team with years of Express middleware should demand a clearer migration benefit before switching.

Alternatives

ProjectWhat it isPick it when
ExpressThe long-established Node.js web framework with a very large middleware ecosystem.pick this instead when Node.js is the fixed target and compatibility with existing Express middleware matters most.
Fastify gh↗A Node.js framework centered on plugins, schemas, and server-side API work.pick this instead when Node.js plugins and schema-driven request handling matter more than cross-runtime portability.
ElysiaA TypeScript framework designed around Bun with an integrated type system.pick this instead when Bun is a firm platform choice and you want a framework shaped specifically around it.

What people are saying

  1. [velocity-scout] honojs/hono

Sources

  1. Hono README
  2. Hono Node.js guide
  3. Hono contribution guide at measured commit
  4. Hono v4.13.5 security release
  5. Hono SSE retry field issue 5299
  6. Hono v5 feature list issue 5106

More web reviews

axios · super-productivity · Graphite · fastify · tabler · go-zero · the whole board →