Performance is the worst reason to pick among these five: on any route that reads MongoDB 1,815 the difference disappears into the query. Pick on the shape of the team and of the deployment.
Express 24,430 for a mixed team on an ordinary Node process, and for the largest supply of middleware. Express 5 fixed the async-error trap (Validation and Error Handling) that was the last real argument against it.
Fastify 314,116 for a large or public API: schemas give validation, response filtering and OpenAPI from one declaration, and plugin scope stops middleware ordering from becoming folklore.
NestJS 79,377 when the codebase will outlive its authors — a structure a new hire learns once, paid for with a build step and a steep first week.
Hono 383,227 for Workers, Deno 60,577 , Bun 73,307 or Lambda, or when cold start matters.
Koa 304,877 when you already run it, or need the cascade to post-process responses.
Two questions settle most arguments. Does the code need to run anywhere but Node? If yes, Hono. Does the team need structure imposed or agreed? If imposed, Nest; otherwise Express or Fastify with the layout from Project Layout for an API.