A high-performance HTTP/1.1 client for Node.js, written from scratch and powering the built-in fetch API.
Undici is a high-performance HTTP/1.1 client library written from scratch for Node.js. It provides low-level control over HTTP connections and serves as the engine behind Node.js's built-in `fetch` API. The library solves the need for a fast, flexible, and standards-compliant HTTP client in server-side JavaScript environments.
Node.js developers building high-throughput applications, libraries requiring fine-grained HTTP control, or anyone needing a performant alternative to built-in modules or higher-level clients like `axios` or `got`.
Developers choose Undici for its superior performance, advanced features like pipelining and custom dispatchers, and its role as the foundation of Node's modern fetch implementation. It offers a unique blend of low-level control and standards compliance.
An HTTP/1.1 client, written from scratch for Node.js
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Benchmarks show undici.request achieves over 200% higher throughput than axios and other alternatives, making it ideal for high-load scenarios like scraping or API clients.
Provides configurable dispatchers and agents for fine-grained control over pooling, keep-alive, and HTTP/1.1 pipelining, as detailed in the documentation.
Implements the WHATWG Fetch Standard with server-side adjustments, and the install() function polyfills globals for consistent behavior across Node.js versions.
Includes an HTTP caching interceptor that respects Cache-Control headers and supports memory or SQLite stores, reducing redundant network calls.
Unlike browsers, undici does not perform CORS checks by default, requiring manual implementation if cross-origin security is needed—a gap for server-side apps mimicking browser behavior.
To avoid connection leaks, response bodies must be explicitly consumed or canceled, adding complexity and error-prone steps compared to libraries that handle this automatically.
Limited to HTTP/1.1; for HTTP/2 or HTTP/3, developers must use other libraries or Node's native modules, limiting its use in modern protocol stacks.