Introduction
Got is a Node.js HTTP client designed as a modern, developer-friendly alternative to the built-in http module. It covers common needs like automatic retries, redirect following, streaming, and JSON parsing with a clean promise-based API.
What Got Does
- Sends HTTP requests with a simple promise and stream interface
- Retries failed requests automatically with configurable backoff
- Follows redirects and handles cookies transparently
- Supports pagination through built-in link-header traversal
- Provides lifecycle hooks for request and response transformation
Architecture Overview
Got wraps Node.js native http/https modules and adds a layered middleware pipeline. Each request passes through normalizers, hooks (beforeRequest, afterResponse, beforeRetry), and response handlers. Options cascade from defaults to instance-level to per-request, and the client can be extended with got.extend() to create pre-configured instances.
Self-Hosting & Configuration
- Install via npm:
npm install got - ESM-only since v12; use
import got from "got" - Create custom instances with
got.extend({ prefixUrl, headers }) - Configure retry count, methods, and status codes via the
retryoption - Set timeouts per phase (lookup, connect, socket, response) for fine-grained control
Key Features
- Automatic retries with exponential backoff on network errors and 5xx responses
- First-class TypeScript types ship with the package
- Stream and promise APIs available for every request
- RFC-compliant caching via a pluggable cache adapter
- Hooks system enables logging, auth token injection, and response transforms
Comparison with Similar Tools
- Axios — Works in both browser and Node; Got is Node-only but lighter and ESM-native
- node-fetch — Minimal Fetch API polyfill; Got adds retries, hooks, and pagination
- undici — Lower-level HTTP/1.1 client from the Node.js team; faster but less ergonomic
- ky — Browser-focused Fetch wrapper by the same author; Got is the Node.js counterpart
FAQ
Q: Does Got work in the browser? A: No. Got is Node.js-only. For browsers, use ky or native Fetch.
Q: How do I migrate from Axios to Got?
A: Replace axios.get(url) with got(url).json(). Most options map directly; see the migration guide in the repo.
Q: Can I use Got with HTTP/2?
A: Yes. Pass http2: true in the options to enable HTTP/2 with automatic ALPN negotiation.
Q: Is Got actively maintained? A: Yes. The project is maintained by Sindre Sorhus and receives regular releases.