4× Faster Than Express
89,504 req/s on simple routes vs Express's 20,414 — and stays flat at 88,305 req/s even with 50 routes registered.
Express-compatible · works with JavaScript & TypeScript · batteries included
npm install mimi.jsimport mimi, { json, cors } from 'mimi.js';
const app = mimi();
app.use(json());
app.use(cors());
app.get('/hello', (req, res) => {
res.json({ message: 'Hello from mimi.js!' });
});
app.listen(3000, () => {
console.log('Server running on http://localhost:3000');
});node server.tsThe biggest time-saver in mimi.js. Create a routes/ folder and drop in route files — they are automatically discovered and mounted at startup.
my-app/
├── server.ts
└── routes/
├── users.ts ← loaded automatically
├── posts.ts ← loaded automatically
└── auth.ts ← loaded automatically// routes/users.ts
import type { MimiApp } from 'mimi.js';
export default function (app: MimiApp) {
app.get('/users', (req, res) => res.json({ users: [] }));
app.post('/users', (req, res) => res.status(201).json(req.body));
}// server.ts — nothing to import, routes load themselves
import mimi, { json } from 'mimi.js';
const app = mimi();
app.use(json());
app.listen(3000);Learn more about Route Loading →
Benchmarked: single Node.js process · 100 concurrent connections · 10s (autocannon)
| Framework | Simple route | 50-route app | Memory |
|---|---|---|---|
| Express 4 | 20,414 req/s | 19,704 req/s | 136 MB |
| Fastify 5 | 94,060 req/s | 94,275 req/s | 93 MB |
| mimi.js v2 | 89,504 req/s | 88,305 req/s | 96 MB |