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 where every framework runs head-to-head in one suite - same machine, same session. Run it yourself and check.

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
Own native C++ engine (default)
Built-in clustering
req/sec (peak, same-session suite)70k117kn/a100k584k
Built-in
Via plugin / community
Not supported
Benchmarked in the open

Up to 584,016 req/sec.Reproduce it yourself.

No cross-sourcing — every framework measured in the same suite, same machine, same session, same tool. This is the pipelined ×10 capability profile; real-world numbers + full methodology are one click away.

Requests / second— higher is better
Express
69,540
Koa
93,903
Hono
100,278
Elysia
115,798
Fastify
117,069
MoroJS — node path
119,570
MoroJS — engine
572,053
MoroJS — clustered
584,016
vs uWebSockets.js
+9.8%
572k vs 521k
vs Fastify
4.9×
572k vs 117k
vs Koa
6.1×
572k vs 94k
vs Express
8.2×
572k vs 70k

Pipelined ×10 (wrk -c100 -d40, best-of-3) — every framework run in the same suite on a Mac Studio M2 Ultra, Node 24.11. Real-world (no-pipelining) numbers and the full comparison table are on the benchmarks page.

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