MoroJS vs the field

Compared honestly.
Sources you can check.

Everyone evaluating MoroJS asks the same thing: why not just use Express, Fastify, NestJS, or Hono? Fair question. So here's the same endpoint written in each one, a feature-by-feature checklist, and benchmarks where every framework runs head-to-head in one suite - same machine, same session. Run it yourself and check.

The status quo

Every Node framework makes you choose

Speed or features. Simplicity or power. Type-safety or flexibility. You wire middleware in the right order and pray nothing breaks at 3am.

Express
Designed in 2010, with no types, no validation and no async-aware error handling. Every project ends up rebuilding the same handful of pieces.
Fastify
Fast, but you assemble the framework yourself: schemas, plugins, decorators, lifecycle hooks.
NestJS
Powerful, but heavy. Decorators, modules, providers, DI container. Java in TypeScript clothing.
Hono / Elysia
Small and fast, and that is the whole offer. Auth, validation, websockets and gRPC are yours to source, wire up and keep working.

MoroJS ships with all of it. You use only what you need.

Same endpoint, every framework

Less code. More guarantees.

The same validated POST endpoint in four frameworks. Identical behavior, wildly different effort.

moro · POST /users13 lines
import { createApp, z } from '@morojs/moro' const app = await createApp() app.post('/users')  .body(z.object({    name: z.string().min(1),    email: z.string().email(),    age: z.number().int().min(18),  }))  .handler((req) => {    return { id: crypto.randomUUID(), ...req.body }  }) app.listen(3000)
Result
All of it.
In one chainable call.
  • Schema, validation, types in one chain
  • req.body fully typed, already validated
  • Errors handled by intelligent defaults
  • No plugins. No boilerplate.
Feature parity, side by side

Everything in the box. Nothing to install.

Auth, validation, websockets, GraphQL, gRPC, HTTP/2, every one first-class and ready to use. No plugins to vet, no glue code to write.

FeatureExpressFastifyNestJSHonoMoroJS
Core
TypeScript nativeNot supportedVia plugin / communityBuilt-inBuilt-inBuilt-in
Zero-configVia plugin / communityNot supportedNot supportedVia plugin / communityBuilt-in
Intelligent middleware orderingNot supportedNot supportedNot supportedNot supportedBuilt-in
Multi-runtime (Node/Edge/Lambda/Workers)Not supportedNot supportedNot supportedBuilt-inBuilt-in
Validation
Zod / Joi / Yup supportVia plugin / communityVia plugin / communityVia plugin / communityVia plugin / communityBuilt-in
Type inference from schemaNot supportedVia plugin / communityVia plugin / communityVia plugin / communityBuilt-in
Auth
Built-in OAuth providersNot supportedNot supportedVia plugin / communityNot supportedBuilt-in
RBAC + sessions, zero depsNot supportedNot supportedVia plugin / communityNot supportedBuilt-in
Real-time
WebSocketsVia plugin / communityVia plugin / communityBuilt-inVia plugin / communityBuilt-in
Server-Sent EventsVia plugin / communityVia plugin / communityBuilt-inBuilt-inBuilt-in
GraphQLVia plugin / communityVia plugin / communityBuilt-inVia plugin / communityBuilt-in
gRPCVia plugin / communityVia plugin / communityBuilt-inNot supportedBuilt-in
HTTP/2 nativeNot supportedBuilt-inBuilt-inVia plugin / communityBuilt-in
Background work
Built-in job schedulerNot supportedNot supportedVia plugin / communityNot supportedBuilt-in
Worker threads facadeNot supportedNot supportedVia plugin / communityNot supportedBuilt-in
Mail (SES, SendGrid, Resend)Not supportedNot supportedVia plugin / communityNot supportedBuilt-in
Performance
Own native engine (default)Not supportedNot supportedNot supportedNot supportedBuilt-in
Built-in clusteringNot supportedNot supportedNot supportedNot supportedBuilt-in
req/sec (peak, same-session suite)66k109kn/a108k742k
Built-inVia plugin / communityNot supported
Benchmarked in the open

Up to 741,719 req/sec. Reproduce it yourself.

Nothing here is borrowed from someone else's numbers. Every framework was measured in the same suite, on the same machine, in the same session, with the same tool. These are the real-world numbers, no pipelining; the pipelined ×10 microbench peaks at 741,719 req/s clustered. Full methodology is one click away.

Requests per second, higher is betterwrk · no pipelining
Express
Koa
Hono
Elysia (Node)
Fastify
MoroJS

wrk -c100 -d40s · August 2026 · full methodology at /benchmarks · source: Moro-JS/benchmark ↗

+5.5%
vs the uWS adapter · 108,687 vs 103,061 req/s
1.6×
vs Fastify · 108,687 vs 68,880 req/s
1.8×
vs Koa · 108,687 vs 59,697 req/s
2.4×
vs Express · 108,687 vs 45,976 req/s
Start

Build it in the next 60 seconds.

One command. A typed, validated, production-ready API. No framework decisions left to make.

$npx @morojs/cli init my-apiRead the docsStar on GitHub

MIT licensed · No telemetry · Open governance