Why I'm Still Writing About Express for 2027
Every few months, someone in my DMs asks: “Should I still learn Express.js? Isn’t it dead?”
My answer is always the same — no, it’s not dead. It’s mature.
I’ve been building backend systems for nearly a decade. And I keep coming back to Express — not out of habit, but because it still makes sense for a wide class of real-world problems.
I’m writing for developers at every level — from students taking their first steps in backend, to founders deciding what stack to put their product on, to engineers leading architecture decisions at scale.
Let’s start from the ground up.
What Is Express.js, Really?
Express.js is a minimal, unopinionated web framework for Node.js. That’s the official description — and it’s accurate, but it undersells the point.
Think of it this way: Node.js gives you the engine. Express gives you the steering wheel, brakes, and a gear shift — without telling you what road to drive on.
“Express provides a thin layer of fundamental web application features, without obscuring Node.js features that you know and love.”
expressjs.com
It was created by TJ Holowaychuk in 2010 and is now maintained by the Express.js open-source community. As of 2025, Express v5 is the stable, production-ready release — and as of this writing, it’s the default version on npm.
Key facts
- Express v5 requires Node.js 18 or higher
- Over 100,000 npm packages depend on Express
- It handles routing, middleware, and HTTP utilities out of the box
Express vs Fastify vs Hono
| Framework | Best For | Requests/sec (approx.) | Key Features |
|---|---|---|---|
| Express | Broad use, teams, legacy compatibility | ~8,000–15,000 | Massive ecosystem, 15+ years of middlewared> |
| Fastify | High-throughput JSON APIs | ~22,000–30,000 | Schema validation built-in, native serialization, 2–3x faster than Express |
| Hono | Edge, serverless, multi-runtime | ~25,000+ (up to 40K on Cloudflare) | TypeScript-first, ultra-small bundle (14KB), zero dependencies, runs everywhere |
But here's what the benchmarks don't tell you:
- Express has the largest middleware ecosystem on Earth. Need auth, rate limiting, file uploads, CSRF protection? There's a battle-tested package for it.
- Every junior developer on your team has used Express. Onboarding cost is near zero.
- Express is the foundation that frameworks like NestJS are built on.
"Express has been the de facto standard for Node.js web applications since 2010."
BetterStack Community
Choose Express when:
- You're building a monolith or standard REST API
- Your team has mixed experience levels
- You need a massive community for debugging and support
Choose Fastify when: raw throughput is a core requirement
Choose Hono when: you’re targeting Cloudflare Workers or edge environments
Express v5
After nearly 10 years of development, Express v5 was officially released on October 15, 2024 — a massive milestone.
The biggest changes:
Native async/await error handling
In v4, an unhandled rejected promise in a route handler would silently crash your app. In v5, rejected promises are automatically caught by the router as errors. This alone is a huge DX improvement.
// Express v5 — this just works now
app.get('/users', async (req, res) => {
const users = await db.getUsers(); // If this throws, Express catches it
res.json(users);
});
- Node.js 18+ required (goodbye legacy cruft)
- ReDoS-safe routing via updated `[email protected]`
- Cleaner dependency tree — uses native Node.js methods instead of utility packages
Setting Up a Modern Express App
Let’s build a clean, type-safe Express app from scratch using the tooling stack that made sense in 2025 and will continue to make sense in 2027.
Step 1: Initialize the project
mkdir my-express-api
cd my-express-api
npm init -y
Step 2: Install dependencies
npm install express
npm install --save-dev typescript tsx @types/express @types/node
Why `tsx`?
It’s a TypeScript runner that supports ESM natively with near-zero config — no `ts-node` complexity.
Step 3: Configure TypeScript
// tsconfig.json
{
"compilerOptions": {
"target": "ESNext",
"module": "ESNext",
"moduleResolution": "NodeNext",
"rootDir": "./src",
"outDir": "./dist",
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true
},
"include": ["src/**/*"]
}
Step 4: Update `package.json`
{
"type": "module",
"scripts": {
"dev": "tsx watch src/index.ts",
"build": "tsc",
"start": "node dist/index.js"
}
}
Step 5: Your first type-safe Express server
// src/index.ts
import express, { Request, Response } from 'express';
const app = express();
app.use(express.json());
app.get('/health', (req: Request, res: Response) => {
res.json({ status: 'ok', timestamp: new Date().toISOString() });
});
app.listen(3000, () => {
console.log('Server running on http://localhost:3000');
});
Step 6: Run it
npm run dev
Project Structure That Actually Scales
my-express-api/
├── src/
│ ├── routes/ # Route definitions (thin — just HTTP binding)
│ │ └── user.routes.ts
│ ├── controllers/ # Request/response logic
│ │ └── user.controller.ts
│ ├── services/ # Business logic
│ │ └── user.service.ts
│ ├── repositories/ # Database access layer
│ │ └── user.repository.ts
│ ├── middleware/ # Reusable middleware
│ │ ├── auth.ts
│ │ └── error.ts
│ ├── config/ # Env vars & configuration
│ │ └── env.ts
│ └── index.ts # Entry point
├── dist/
├── tsconfig.json
├── package.json
└── .env
Why layer-based over feature-based?
Business requirements change. When the product team renames a feature, you don't want to rename 15 files. Layer-based architecture keeps your backend stable while the product evolves.
Common Mistakes Beginners Make
- Putting all code in `index.ts` — your app will become unmaintainable within a week
- Not handling async errors — in v4 especially, unhandled rejections crash silently
- Skipping TypeScript — you'll thank yourself 3 months in when refactoring
- Using `require()` instead of `import` — stick with ESM, it's the present and future
Explore project snapshots or discuss custom web solutions.
The best tool is the one your team can use effectively. Mastery of fundamentals always outlasts framework trends.
Thank You for Spending Your Valuable Time
I truly appreciate you taking the time to read blog. Your valuable time means a lot to me, and I hope you found the content insightful and engaging!
Frequently Asked Questions
Yes — it's the most documented backend framework in the JavaScript ecosystem. The learning curve is gentle, and debugging help is everywhere.
Always v5 for new projects. It has native async/await support, better security, and cleaner code. v4 enters maintenance mode in 2026.
Yes, especially when paired with NestJS (which runs on Express under the hood) or when structured with clean architecture. Many Fortune 500 companies use Express in production.
NestJS is an opinionated framework built on top of Express (or Fastify). It adds dependency injection, decorators, and modules. Express is the raw, unopinionated layer beneath.
Yes — solid JavaScript (and ideally TypeScript) fundamentals are important. Specifically: async/await, callbacks, and basic HTTP concepts.
Comments are closed