Express is a web application framework for Node.js. Its own GitHub repository describes it in a single line as a “Fast, unopinionated, minimalist web framework for Node.js,” and the project site frames it as a framework “that provides a robust set of features for web and mobile applications.” First released in 2010 by TJ Holowaychuk, Express arrived only a year after Node.js itself and quickly became the standard way to write HTTP servers in JavaScript.
The defining idea of Express is middleware. A request flows through an ordered chain of functions, each of which can read or modify the request and response objects and then either end the cycle or call the next function in the stack. The Express documentation describes the framework as having “a myriad of HTTP utility methods and middleware at your disposal” for creating a “robust API quickly and easily.” Routing, body parsing, logging, authentication, and error handling are all expressed as middleware, which gave Express a uniform mental model that was easy to learn and easy to extend.
Express is deliberately unopinionated. It ships a thin layer over Node’s built-in HTTP module and does not prescribe a database, a templating language, or a project structure. That minimalism is the whole point: developers assemble an application from small, composable pieces rather than adopting a large framework wholesale. The trade-off is that Express provides less out of the box than more opinionated frameworks, leaving architecture decisions to the developer.
Because it was early, small, and well documented, Express became the foundation for a large part of the Node ecosystem. Many later frameworks were built on top of it or defined themselves in relation to it, and its middleware signature became a common shape that other tools learned to interoperate with. For much of Node’s history, “a Node web server” effectively meant an Express application.
The same team that built Express later created Koa as a next-generation alternative, applying lessons about async control flow that JavaScript’s evolving language features made possible. Express nonetheless remained the most widely used Node framework, valued precisely for its stability and its refusal to impose opinions.