Docs
CLI
Migrations
Compare
Benchmarks
Examples

© 2024 MoroJs

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 pulled straight from each project's own numbers. Click any source and check it yourself.

The Status Quo

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.

Express

Designed in 2010. No types, no validation, no async-aware errors. Every project rebuilds the same wheels.

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

Minimal and fast — but minimal. You still need auth, validation, websockets, gRPC. Plug and pray.

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.

morojs — POST /users
13 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 — 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 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)28k46k22kn/a226k
Built-in
Via plugin / community
Not supported
Benchmarked in the open

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.

Requests / second— higher is better
NestJS
9,164
Express
28,104
Koa
36,152
Hono
37,320
Fastify
46,193
Elysia
71,202
MoroJS — single
93,992
MoroJS — clustered
190,717
MoroJS — uWS
226,253
vs Fastify · uWS
+390%
226k vs 46k
vs Elysia (Bun)
+218%
226k vs 71k
vs Hono · clustered
+411%
190k vs 37k
vs Express · clustered
+579%
190k vs 28k

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 methodology

Build 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