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 pulled straight from each project's own numbers. Click any source and check it yourself.
Every Node frameworkmakes 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.
Designed in 2010. No types, no validation, no async-aware errors. Every project rebuilds the same wheels.
Fast, but you assemble the framework yourself — schemas, plugins, decorators, lifecycle hooks.
Powerful, but heavy. Decorators, modules, providers, DI container — Java in TypeScript clothing.
Minimal and fast — but minimal. You still need auth, validation, websockets, gRPC. Plug and pray.
Less code.More guarantees.
The same validated POST endpoint in four frameworks. Identical behavior, wildly different effort.
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)- Schema, validation, types — one chain
- req.body fully typed, already validated
- Errors handled by intelligent defaults
- No plugins. No boilerplate.
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.
| Feature | Express | Fastify | NestJS | Hono | MoroJS |
|---|---|---|---|---|---|
| Core | |||||
| TypeScript native | |||||
| Zero-config | |||||
| Intelligent middleware ordering | |||||
| Multi-runtime (Node/Edge/Lambda/Workers) | |||||
| Validation | |||||
| Zod / Joi / Yup support | |||||
| Type inference from schema | |||||
| Auth | |||||
| Built-in OAuth providers | |||||
| RBAC + sessions, zero deps | |||||
| Real-time | |||||
| WebSockets | |||||
| Server-Sent Events | |||||
| GraphQL | |||||
| gRPC | |||||
| HTTP/2 native | |||||
| Background work | |||||
| Built-in job scheduler | |||||
| Worker threads facade | |||||
| Mail (SES, SendGrid, Resend) | |||||
| Performance | |||||
| uWebSockets transport | |||||
| Built-in clustering | |||||
| req/sec (peak, MoroJS suite) | 28k | 46k | 22k | n/a | 226k |
Up to 226,253 req/sec.Reproduce it yourself.
Every number below is sourced. We pulled them straight from each framework's own published benchmarks, on the same autocannon profile. Click source ↗ on any row to check.
Same autocannon profile (-c100 -d40 -p10). Express, Koa, Hono, Fastify from fastify/benchmarks (Apr 2026, Node 24). NestJS (Fastify adapter) from Sharkbench (Aug 2025, Node 22). Elysia from APIScout 2026 on Bun. MoroJS variants from the published suite on M2 Ultra.
Full methodologyBuild it inthe next 60 seconds.
One command. A typed, validated, production-ready API. No framework decisions left to make.
MIT licensed · No telemetry · Open governance