Three Frameworks, Three Eras of Backend Development
Express.js shipped in 2010. It became the default Node.js framework because nothing else existed, and it did the job well enough. Sixteen years later, Express still powers a massive share of production Node.js applications. It hit version 5.0 in late 2024, but the architecture remains fundamentally the same: callback-based middleware on top of Node's http module.
Fastify arrived in 2017 as the performance-focused alternative. It uses JSON Schema validation, a plugin-based architecture, and a highly optimized request pipeline. Fastify consistently benchmarks 2x to 3x faster than Express for raw HTTP throughput. If you needed speed on Node.js without leaving the ecosystem, Fastify was the obvious upgrade.
Hono launched in 2022 and represents something fundamentally different. Built by Yusuke Wada, Hono is a Web Standards-based framework designed to run on any JavaScript runtime: Cloudflare Workers, Deno, Bun, Vercel Edge Functions, AWS Lambda, and yes, Node.js too. It uses the Fetch API (Request/Response) as its foundation instead of Node-specific APIs. This makes it portable in a way Express and Fastify simply are not.
The shift matters because the backend landscape has changed. Edge computing is real. Cloudflare Workers handles billions of requests per day. Vercel and Netlify deploy functions to edge locations by default. If your framework is locked to Node.js APIs, you are locked out of the fastest-growing deployment targets in web infrastructure. Let us break down how these three frameworks compare across every dimension that matters for production use.
Edge Runtime Compatibility: Hono's Defining Advantage
This is the single biggest differentiator. If you are building for edge runtimes, the choice is already made.
Hono: Write Once, Deploy Anywhere
Hono runs natively on Cloudflare Workers, Deno Deploy, Bun, Vercel Edge Functions, Fastly Compute, AWS Lambda, and Node.js. You write your route handlers once using standard Web APIs (Request, Response, Headers, URL), and the same code deploys to any of these targets with only a one-line adapter change. No conditional imports. No platform-specific wrappers. Your business logic stays identical.
This is not theoretical portability. Teams are actively running the same Hono codebase on Cloudflare Workers for latency-sensitive API endpoints and on Node.js for background processing jobs. The adapter pattern means switching from Hono/cloudflare-workers to Hono/node-server is a single import change in your entry file.
Fastify: Node.js Only
Fastify is built directly on Node.js core APIs (http/http2 modules, Streams, Buffer). It cannot run on Cloudflare Workers, Deno Deploy, or Vercel Edge Functions. Fastify requires a Node.js runtime, period. There have been community experiments with Fastify on Bun (which has Node.js compatibility), and basic workloads function, but edge runtimes are a non-starter.
Express: Node.js Only, With Caveats
Express has the same Node.js dependency as Fastify. Express 5 did not change this. There is no official path to running Express on Cloudflare Workers or Deno Deploy. Some developers have used compatibility layers (like Cloudflare's nodejs_compat flag), but these are brittle workarounds, not production solutions.
If your deployment strategy includes edge computing today or in the next two years, Hono is the only framework in this comparison that supports it natively. For a deeper look at edge deployment platforms, see our Cloudflare Workers vs AWS Lambda vs Vercel Edge comparison.
Performance Benchmarks: Raw Numbers and Real-World Context
Performance benchmarks for HTTP frameworks are everywhere, and most of them are misleading. A "hello world" throughput test tells you how fast the framework parses HTTP, not how fast your application will run. That said, framework overhead matters when you are handling thousands of concurrent requests, so let us look at the numbers honestly.
Raw HTTP Throughput (Node.js runtime, single core)
- Hono on Node.js: 55,000 to 65,000 requests/second for a simple JSON response. Hono uses a RegExpRouter by default that compiles routes into a single regex, making route matching extremely fast.
- Fastify: 45,000 to 55,000 requests/second. Fastify's JSON serialization is optimized with fast-json-stringify, and its schema-based validation adds minimal overhead.
- Express: 12,000 to 18,000 requests/second. Express uses a linear route matching algorithm and lacks built-in serialization optimization. The gap is real and widening as the other frameworks optimize further.
On Edge/Alternative Runtimes
Hono on Bun hits 130,000+ requests/second for the same workload. On Cloudflare Workers, latency is typically 1ms to 5ms at the edge location, which is faster than any origin server can achieve regardless of framework because the code runs physically closer to the user. This is where Hono's portability translates directly into performance gains you cannot replicate with Express or Fastify.
Real Application Performance
In a realistic benchmark (JSON API with JWT validation, Drizzle ORM query to PostgreSQL, response serialization), the frameworks converge significantly. Hono and Fastify both handle around 4,000 to 6,000 req/sec on Node.js with a networked database. Express handles 3,000 to 4,500 req/sec. The database query dominates the response time at 2ms to 10ms, making the framework overhead less significant.
The takeaway: Express is measurably slower, but the gap shrinks as your application logic gets more complex. Hono and Fastify perform similarly on Node.js. Hono pulls ahead when deployed to Bun or edge runtimes where it unlocks performance Express and Fastify physically cannot access.
TypeScript Support and Developer Experience
TypeScript is no longer optional for serious backend work. Type safety catches bugs before they reach production, improves IDE autocomplete, and serves as living documentation. How well each framework supports TypeScript matters.
Hono: TypeScript-First from Day One
Hono was written in TypeScript and designed around type inference. Route parameters, query strings, request bodies, and response types are all inferred automatically. When you define a Zod validator middleware, the parsed and validated body type flows through to your handler without manual type annotations. This is genuinely impressive and something neither Express nor Fastify achieves as cleanly.
Hono's RPC feature deserializes your API routes into a fully typed client, similar to tRPC but without the tight coupling. You define routes on the server, and the client gets autocomplete and type checking for every endpoint, path parameter, and response shape. For teams building both the API and the frontend, this eliminates an entire category of integration bugs.
Fastify: Strong TypeScript, Requires More Setup
Fastify has solid TypeScript support through its type providers. The @fastify/type-provider-typebox and @fastify/type-provider-zod packages integrate schema validation with TypeScript inference. It works well, but you need to configure it explicitly. Fastify's plugin system also requires some type gymnastics with declaration merging when extending the Fastify instance with custom decorators.
Express: Bolted-On Types
Express was written in JavaScript. TypeScript support comes through @types/express, which is a community-maintained type definition file. The types work for basic usage, but req.body is typed as any by default. Getting proper type inference for middleware-modified request objects requires manual declaration merging. It is functional but clunky compared to frameworks built with TypeScript in mind.
For teams using TypeScript (which should be every team in 2026), Hono offers the best developer experience. The type inference is automatic, deep, and catches real bugs. Fastify is solid with some configuration. Express TypeScript support is adequate but shows its age.
Middleware Ecosystem and the Drizzle/Neon Stack
A framework is only as useful as the ecosystem around it. Middleware for authentication, validation, CORS, rate limiting, logging, and database access determines how quickly you ship production features.
Express: The Largest Middleware Ecosystem
Express has thousands of middleware packages. Passport.js (authentication), helmet (security headers), morgan (logging), express-rate-limit, multer (file uploads), cors. Every common backend concern has a mature Express middleware. This ecosystem is Express's biggest moat. When a new SaaS product launches a server SDK, the Express middleware is usually the first one built.
Fastify: Plugin-Based, High Quality
Fastify uses a plugin architecture instead of middleware. The official @fastify scope includes plugins for CORS, rate limiting, JWT, multipart uploads, static files, WebSockets, and more. The ecosystem is smaller than Express but well-maintained. Fastify also has a compatibility layer (fastify-express) that lets you use Express middleware inside Fastify, which eases migration.
Hono: Growing Fast, Built-In Essentials
Hono ships with built-in middleware for CORS, JWT authentication, Basic Auth, ETag, caching, request logging, Bearer Auth, and security headers. Third-party middleware is growing rapidly. Because Hono middleware uses standard Web APIs, any middleware written for Hono works across all supported runtimes. You do not need separate middleware for Cloudflare Workers vs Node.js.
The Hono ecosystem is younger, so niche middleware (like specific OAuth provider integrations) may require you to write custom handlers or adapt existing libraries. For common needs, Hono's built-in middleware covers 80% of use cases out of the box.
The Modern Stack: Drizzle ORM + Neon Postgres
One of the most popular backend stacks in 2026 pairs Hono with Drizzle ORM and Neon (serverless PostgreSQL). This combination works beautifully because all three are designed for edge and serverless environments. Drizzle connects to Neon over HTTP (using Neon's serverless driver), which means you can query PostgreSQL from Cloudflare Workers without a persistent TCP connection. Express and Fastify with Prisma or TypeORM require a traditional connection pool and a Node.js runtime, which rules out true edge deployment.
Drizzle also generates fully typed queries that integrate with Hono's type system. Your database schema types flow from Drizzle through Hono's handlers to the response, giving you end-to-end type safety from database to client. This is a meaningful productivity gain over the Express + Prisma stack, where type boundaries are less seamless. For more on choosing your backend language and runtime, check our Node.js vs Python backend guide.
Migration Paths: Moving from Express to Hono or Fastify
Most teams are not starting from scratch. You have an existing Express application and want to know if migration is worth it and how painful it will be.
Express to Fastify
Fastify provides a fastify-express compatibility plugin that lets you mount Express middleware and route handlers inside a Fastify application. This means you can migrate incrementally: create a new Fastify server, mount your existing Express app as a plugin, and gradually rewrite routes. The migration path is well-documented and battle-tested.
Typical migration effort for a medium-sized API (50 to 100 routes): 2 to 4 weeks for a small team. The main work is converting Express middleware to Fastify plugins and updating error handling patterns. Route handlers translate almost one-to-one since both use req/res patterns.
Express to Hono
Hono's API is different from Express because it uses Web Standards (Request/Response) instead of Node.js-specific req/res objects. The migration requires rewriting route handlers. However, Hono's API is deliberately simple and Express-like in structure (app.get, app.post, app.use), so the rewrite is mostly mechanical.
A typical Express route handler that reads req.params, req.body, and calls res.json() translates to reading c.req.param(), c.req.json(), and returning c.json(). The patterns map cleanly. Middleware is the harder part: any Express middleware that depends on Node.js APIs (req.pipe, res.writeHead) needs to be rewritten or replaced with Hono equivalents.
Typical migration effort for a medium-sized API: 3 to 6 weeks. Longer than the Fastify migration because you are also changing the underlying API model. The payoff is runtime portability that Fastify cannot offer.
Should You Migrate?
If your Express app is stable, performs adequately, and deploys exclusively on Node.js, the migration ROI is low. Rewriting working code has a cost, and "newer framework" is not a business justification.
Migration makes sense in three scenarios. First, you are hitting Express performance limits and profiling confirms the framework is the bottleneck (not your database or business logic). Second, you need edge deployment for latency-sensitive endpoints and Express cannot run on your target runtime. Third, you are starting a major new feature or service and want to use it as a migration pilot rather than rewriting existing code. For teams evaluating their full backend stack, our Django vs FastAPI vs Express comparison covers the broader framework landscape.
Which Framework Should You Pick in 2026?
After working with all three frameworks across dozens of client projects, here is our honest recommendation based on what you are actually building.
Choose Hono If:
- You need edge deployment. Cloudflare Workers, Vercel Edge Functions, Deno Deploy. Hono is the only production-ready framework that runs natively on all of them.
- You are building a new API from scratch. Hono's TypeScript inference, built-in middleware, and modern API design make it the most productive choice for greenfield projects.
- You want runtime flexibility. Start on Node.js today, move to Bun or Cloudflare Workers tomorrow. Same code, different adapter.
- You are building with the Drizzle + Neon stack. Hono integrates seamlessly with serverless PostgreSQL over HTTP, enabling true edge database access.
Choose Fastify If:
- You are committed to Node.js. If edge runtimes are not in your roadmap and you want maximum performance on Node.js, Fastify delivers.
- You need JSON Schema validation at the framework level. Fastify's schema-based validation and serialization pipeline is more mature than Hono's middleware approach for complex validation scenarios.
- You are migrating from Express. Fastify's Express compatibility layer makes incremental migration straightforward.
Choose Express If:
- You are maintaining an existing Express app. If it works, do not rewrite it for the sake of rewriting it.
- You need maximum ecosystem compatibility. Some SDKs and libraries only ship Express middleware. Check your dependency list before committing to another framework.
- Your team knows Express and the project timeline is tight. Familiarity has real value when deadlines matter.
Our Default Recommendation
For new projects in 2026, we default to Hono. The runtime portability is a genuine competitive advantage that compounds over time. You are not just choosing a faster framework. You are choosing access to deployment targets (edge, serverless, multi-runtime) that Express and Fastify cannot reach. Combined with Drizzle ORM and a serverless database like Neon or Turso, Hono enables architectures that were impossible with the previous generation of Node.js frameworks.
The ecosystem gap is closing fast. Hono's middleware coverage is already sufficient for most production use cases. TypeScript support is best-in-class. Performance is excellent across all runtimes. And the community is one of the fastest-growing in the JavaScript ecosystem, with 20K+ GitHub stars and active development.
If you are evaluating backend frameworks for a new product or considering migrating an existing Express application to something faster and more flexible, we can help you make the right call. Book a free strategy call and we will map out the best architecture for your specific requirements, timeline, and deployment targets.
Need help building this?
Our team has launched 50+ products for startups and ambitious brands. Let's talk about your project.