Express 24,430 is the default, not the only choice. Four other Node frameworks are large enough that you will meet them in job postings and in code you inherit, and each exists because of a specific complaint about Express: its middleware signature predates promises, its router does no validation, its object model is its own rather than the web platform's, and it refuses to tell you how to structure an application.
Knowing what each one fixed is worth more than knowing its API: a framework's defaults are an argument about what a web server should do for you. All five are MIT-licensed and free. Fastify 314,116 , Nest and Hono 383,227 ship their own TypeScript types; Express and Koa 304,877 need @types/express and @types/koa.
| Express 5.2.1 | Koa 3.2.1 | Fastify 5.12.5 | NestJS 12.0.4 79,377 | Hono 4.13.8 | |
|---|---|---|---|---|---|
| Model | (req, res, next) | async cascade on ctx | hooks and lifecycle | decorators and DI | web Request/Response |
| Extension | middleware | middleware | plugins with scope | modules and providers | middleware |
| Validation | none | none | JSON Schema | pipes | none, adapters |
| Runtimes | Node | Node | Node, Deno 60,577 , Bun 73,307 | Node | Node, Deno, Bun, Workers |
What follows ports the Bookshelf endpoints from The Bookshelf API onto three of them, gives NestJS a page because NestJS Version rebuilds the API in it, then ends with a measured benchmark.