3 open source tools compared. Sorted by stars — scroll down for our analysis.
| Tool | Stars | Velocity | Language | License | Score |
|---|---|---|---|---|---|
Axios Promise-based HTTP client | 108.7k | — | JavaScript | MIT License | 82 |
ky Tiny elegant HTTP client based on Fetch | 16.5k | +31/wk | TypeScript | MIT License | 77 |
got Human-friendly HTTP request library for Node.js | 14.9k | +5/wk | TypeScript | MIT License | 77 |
If you make HTTP requests in JavaScript — calling APIs, fetching data, posting forms — Axios is the library most developers reach for. It wraps the messy parts of XMLHttpRequest (browser) and http (Node.js) into a clean, promise-based API that works the same in both environments. 109K stars, MIT license. You `npm install axios`, call `axios.get()` or `axios.post()`, and get back a promise with your data. It handles JSON parsing, request/response interceptors, timeouts, cancellation, and automatic transforms. The API is clean and the docs are solid. Everything is free. It's an npm package with no paid tier. The catch: the `fetch` API is now available everywhere — browsers and Node.js 18+. For simple requests, native fetch does what Axios does without adding a dependency. Axios still wins on interceptors, automatic retries, request cancellation (AbortController works but is clunkier), and upload progress tracking. But the gap is shrinking. For new projects, consider whether you actually need Axios or if fetch with a thin wrapper (like ky or ofetch) is enough. At 109K stars it's not going anywhere, but you should know the alternative is already built into your runtime.
If you use the Fetch API but hate writing `response.ok` checks, retry logic, timeout handling, and JSON parsing boilerplate every time — Ky wraps Fetch in a tiny, elegant API that handles all of it. Same author as Got, but built on Fetch so it works in browsers, Deno, Bun, and Node 18+. 16.5K stars, MIT licensed, growing at 31 stars/week. It's intentionally small — about 5KB. You get retries on failure, timeout support, hooks (beforeRequest, afterResponse), and JSON shortcuts. `ky.get(url).json()` instead of `const res = await fetch(url); if (!res.ok) throw...; return res.json()`. Fully free. npm package, no service, no paid tier. The catch: Ky is minimal by design. If you need advanced features like request cancellation with progress tracking, HTTP/2, or streaming uploads, Got or Axios have more batteries included. And since Ky is built on Fetch, it inherits Fetch's limitations — no built-in cookie jar, no proxy support in Node without extra config. For pure API calls where you want a thin wrapper over Fetch, Ky is perfect. For complex HTTP needs, it might not be enough.
If you're making HTTP requests in Node.js and want something friendlier than the built-in `http` module — retries, timeouts, JSON parsing, pagination, streams — Got handles all of it with a clean API. It's what `axios` wishes it was for server-side Node. 14.8K stars, MIT licensed, maintained by Sindre Sorhus (who maintains half the npm ecosystem). Got is specifically designed for Node.js — not the browser. It gives you automatic retries, request cancellation, HTTP/2 support, progress events, and RFC-compliant caching out of the box. Fully free. It's an npm package. No paid tier, no service, no account. The catch: Got is Node.js only. If you need a client that works in both browser and Node, use Axios or Ky. Got also doesn't support the Fetch API — it's its own thing. With Fetch now built into Node 18+, some teams are moving toward lighter Fetch wrappers instead. Got is feature-rich but it's also 2.2MB installed — if bundle size matters for your serverless functions, consider Ky or native Fetch.