# Koa — Expressive Middleware Framework for Node.js > Koa is a web framework for Node.js designed by the team behind Express. It uses async/await natively for cleaner middleware composition and a smaller, more expressive core. ## Install Save in your project root: # Koa — Expressive Middleware Framework for Node.js ## Quick Use ```bash npm install koa node -e "const Koa = require('koa'); const app = new Koa(); app.use(ctx => { ctx.body = 'Hello Koa'; }); app.listen(3000);" ``` ## Introduction Koa is a next-generation web framework for Node.js created by the same team that built Express. It leverages async functions to eliminate callbacks and provide a more expressive, streamlined middleware pattern. Koa ships with a tiny core and leaves routing, templating, and other features to modular middleware packages. ## What Koa Does - Provides a minimal HTTP server foundation with async/await-based middleware composition - Implements a cascading middleware pattern where control flows downstream then back upstream - Wraps Node.js request and response objects into a single `ctx` object with convenience methods - Handles errors centrally through try/catch in middleware without callback nesting - Supports HTTP/2 and integrates with any Node.js HTTP server module ## Architecture Overview Koa's middleware stack is a chain of async functions. Each middleware receives a context object (`ctx`) and a `next` function. Calling `await next()` passes control to the next middleware; when it resolves, execution resumes in the current middleware (the "onion" model). This two-phase flow makes cross-cutting concerns like logging, timing, and error handling natural to implement. Koa's core is roughly 600 lines of code, delegating everything else to middleware. ## Self-Hosting & Configuration - Requires Node.js 12+ (16+ recommended for full ES module and async iterator support) - Install with `npm install koa` and create an app instance with `new Koa()` - Add middleware with `app.use(fn)` where fn is an async function receiving `(ctx, next)` - Use `@koa/router` for routing, `koa-body` for body parsing, and `koa-static` for file serving - Deploy behind Nginx or Caddy as a reverse proxy, or run directly with `app.listen(port)` ## Key Features - Async/await-first design eliminates callback pyramids and simplifies error handling - Cascading "onion" middleware model provides clear request and response lifecycle phases - Tiny core (~600 lines) with zero bundled middleware keeps the framework lean - Rich context object (`ctx`) unifies request/response with helpers for content negotiation, cookies, and redirects - Mature ecosystem with hundreds of middleware packages for auth, CORS, compression, sessions, and more ## Comparison with Similar Tools - **Express** — larger ecosystem and more opinionated defaults; Koa is smaller and async-native - **Fastify** — schema-based validation and faster JSON serialization; Koa is more minimalist - **Hono** — ultrafast and runs on edge runtimes; Koa is Node.js-focused with a more established ecosystem - **NestJS** — full-featured opinionated framework; Koa is a lightweight foundation you compose yourself - **Hapi** — built-in plugin system with configuration-driven routing; Koa relies on middleware composition ## FAQ **Q: Should I use Koa or Express for a new project?** A: Koa is a strong choice if you prefer async/await patterns and a minimal core. Express has a larger ecosystem and more tutorials available. **Q: Does Koa include a router?** A: No. Koa's core has no router. Use `@koa/router` (the official companion) or any compatible routing middleware. **Q: Is Koa production-ready?** A: Yes. Koa has been used in production by many companies since 2014 and is stable and well-tested. **Q: How does Koa handle errors?** A: Wrap middleware in try/catch. Unhandled errors propagate upstream through the middleware stack and can be caught by a top-level error handler. ## Sources - https://github.com/koajs/koa - https://koajs.com/ --- Source: https://tokrepo.com/en/workflows/3a5f82e0-3fb6-11f1-9bc6-00163e2b0d79 Author: AI Open Source