Why Express? Picking a Backend Without the Hype
Why Express? Picking a Backend Without the Hype
Let's be honest about how most people meet Express. You're following some tutorial, it says npm install express, you paste a "Hello World," it works, and you have absolutely no idea why you chose this thing over the dozen other options that all promised to be the fast, modern, lightweight one.
This series fixes that. But before we write a single route, this first post is the part every tutorial skips: what Express actually is, when it's the right tool, when it isn't, and who's quietly running it in production. No code gymnastics yet — just the lay of the land so the rest of the series makes sense.
How to follow along (nothing to install). Every post in this series comes with a ready-made sandbox on StackBlitz: a full Node environment running in a browser tab, with Express already installed. Whenever you see a Try it box, you can do it right there — no local setup, no
npm install, no pausing the tutorial to get your machine ready. This post's sandbox: Open the Post 1 sandbox ↗ Keep it open in another tab and poke at things as you read.
So what is Express, really?
Express is a minimal web framework for Node.js. That word minimal is the whole personality. Express doesn't tell you how to structure your project, where your database code goes, or how to name your folders. It hands you a clean way to say "when a request comes in for GET /users, run this function" and then gets out of your way.
People call this unopinionated. Translation: Express gives you a box of Lego, not a pre-built model. That's either liberating or terrifying depending on your mood, and we'll talk about both.
The mental one-liner to keep: Express is a thin layer that makes handling HTTP requests pleasant, and nothing more. Everything else — auth, validation, database access — you bring yourself or bolt on. That minimalism is exactly why it's lasted over a decade while flashier frameworks came and went.
The rest of the menu (your other options)
Express isn't the only game in town, and pretending otherwise would make me a bad tour guide. Here's the honest rundown of what else you'd consider, and the one-line reason you'd pick each.
Staying in Node.js land:
Fastify — Express's spiritual successor for people who care about speed and built-in validation. If your bottleneck is genuinely the framework (rare, but it happens), this is the one.
Koa — built by the original Express team as a "what would we do differently" project. Smaller core, modern async style. Elegant, but a thinner ecosystem.
NestJS — the opposite of Express's philosophy. Heavily opinionated, TypeScript-first, structured like Angular. Big teams love it because it enforces consistency. Fun fact: by default, NestJS runs on top of Express under the hood. Even when you leave Express, you sometimes don't.
Next.js / Remix — if you're building a React app and your "backend" is a handful of API routes, a full-stack framework might cover you and you may not need a standalone Express server at all.
Leaving Node entirely:
- Django / Flask (Python), Rails (Ruby), Laravel (PHP), Spring Boot (Java), Go's net/http. All perfectly good. The reason to stay with Express usually isn't that it's technically superior — it's that your frontend is already JavaScript and running one language across the whole stack is a genuine productivity win.
Try it (no code, just a gut check): Open the npm page for
express,fastify, andkoaand glance at the weekly download counts. You'll get an instant, visceral sense of how lopsided the ecosystem still is. We'll come back to what those numbers do and don't mean.
When Express is the right call
Reach for Express when:
You're learning how the web actually works. Because it's so thin, Express teaches you HTTP instead of hiding it. That's the entire reason it's the backbone of this series.
You're building a small-to-medium API and you want to make the structural decisions yourself rather than inherit someone else's.
You need glue. A quick service, a webhook receiver, a proxy, a prototype you'll show someone on Friday. Express goes from zero to running in about four lines.
You want a giant ecosystem. A decade of being the default means there's a middleware package for basically everything, and every Stack Overflow answer assumes you're using it.
When you should probably pick something else
I'm not here to sell you Express for every job:
Huge team, huge codebase, lots of churn? Express's "do whatever you want" freedom becomes "everyone did something different." NestJS's guardrails earn their keep here.
Throughput is your actual, measured bottleneck? Look at Fastify. (But measure first. It is almost never the framework. It's almost always your database.)
Building a full-stack React app? Check whether Next.js already covers your backend before standing up a separate server.
The grown-up answer is that "best framework" is the wrong question. "Best framework for this job and this team" is the right one, and for a huge range of jobs the answer is still Express.
Does anyone serious actually use it?
Fair question, because "minimal and old" can sound like "hobby toy." It isn't.
Express is, by a wide margin, the most-downloaded web framework in the Node ecosystem — we're talking tens of millions of npm installs a week. It's been the de facto standard for Node backends since the early 2010s, which in JavaScript years is roughly an eternity.
Plenty of large companies have run it in production — Express's own community has long pointed to names like IBM, Accenture, and Uber among its users — but honestly the more telling fact is the invisible footprint. Because frameworks like NestJS sit on top of Express, and because it's the default in countless internal tools and microservices, you almost certainly used software today that had Express somewhere in the request path without anyone advertising it. It's plumbing. Good plumbing is the stuff you never notice.
The point isn't "it's popular so it's good." Popularity can be a trap. The point is that betting on Express is low-risk: the docs, the tutorials, the hiring pool, and the middleware all already exist.
A two-minute taste (don't worry, we go deep next time)
I promised not to drown you in code, so here's the smallest honest example of what Express feels like — just enough to see the shape of it. This exact file is what's running in the Post 1 sandbox ↗, so you can read along with it live:
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('Hello from Express');
});
app.listen(3000, () => console.log('Running on http://localhost:3000'));
That's a complete, working web server. Four meaningful lines. app.get('/', ...) reads almost like English: "when someone GETs the homepage, run this." Hold that feeling — in Post 2 we'll tear it open and see what Express is actually doing for you behind those four lines (spoiler: it's saving you from a lot of tedious plumbing).
Try it live: Open the sandbox ↗ (new tab, nothing to install), look at the preview on the right, then change the
'Hello from Express'string inindex.jsto your name. The server restarts on its own and the preview updates. Congratulations, you've shipped a backend. The bar was lower than the hype suggested.
👉 Open the live demo in StackBlitz ↗
The takeaway
Express won by being small and refusing to grow up into something complicated. It's the right pick when you value control, a gentle learning curve, and a massive ecosystem — and the wrong pick when you'd rather a framework make the hard structural decisions for you. Knowing which situation you're in is the actual skill, and now you've got the map.
Dig deeper
Skim the official Express homepage. Notice how little it claims to do. That restraint is a feature.
Look up "NestJS Express adapter" and confirm for yourself that the opinionated framework is riding on the unopinionated one.
Try this too
Two parts. First, in the sandbox ↗, add a second route: app.get('/about', ...) that sends a one-line description of you. Open /about in the preview. That's the whole pattern you'll be using for the rest of the series.
Second, and this one's on paper: think about the last app you built or used. Write down, in one sentence each: which framework you'd choose for its backend today, and why. Not "because it's popular" — the actual reason. That habit, picking tools on purpose instead of by default, is worth more than any single framework.
Next up — Part 2: What Express Actually Is. We strip away the convenience and build a web server with raw Node, feel exactly how painful it gets, and then watch Express make the pain disappear. That's where the "aha" lives.