# Got — Human-Friendly HTTP Client for Node.js > Got is a lightweight, feature-rich HTTP client for Node.js with built-in retry logic, pagination, caching, and hooks for composable request pipelines. ## Install Save in your project root: # Got — Human-Friendly HTTP Client for Node.js ## Quick Use ```bash npm install got ``` ```javascript import got from "got"; const data = await got("https://api.example.com/users").json(); console.log(data); ``` ## 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 `retry` option - 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. ## Sources - https://github.com/sindresorhus/got - https://github.com/sindresorhus/got/blob/main/documentation/README.md --- Source: https://tokrepo.com/en/workflows/asset-25accf22 Author: AI Open Source