5 open source tools compared. Sorted by stars — scroll down for our analysis.
| Tool | Stars | Velocity | Language | License | Score |
|---|---|---|---|---|---|
Axios Promise-based HTTP client | 108.6k | — | JavaScript | MIT License | 82 |
| 53.9k | — | Python | — | 68 | |
ky Tiny elegant HTTP client based on Fetch | 16.5k | +28/wk | TypeScript | MIT License | 77 |
got Human-friendly HTTP request library for Node.js | 14.9k | +7/wk | TypeScript | MIT License | 77 |
| 1.7k | — | Go | — | 45 |
Axios is the HTTP client that 10 million npm projects depend on. Promise-based, works in browsers and Node.js, with interceptors, automatic JSON transforms, and request cancellation. It became the default because it just works and the API is obvious. fetch is the native alternative that costs zero bytes — modern enough for most use cases now. ky is the lightweight Fetch wrapper with better ergonomics. Got is Node-specific with streaming support. For commercial, there's nothing — HTTP clients are all open source. Use Axios if your project already uses it — there's no urgent reason to migrate. For new projects, honest take: fetch or ky are better choices. Axios was essential when browser fetch support was inconsistent. That era is over. The 11KB bundle and XMLHttpRequest foundation are technical debt, not features. The catch: you probably don't need it anymore. Fetch is everywhere, ky adds the missing DX for 5KB, and Axios's interceptor pattern can be replicated with a few lines of wrapper code. The 108K stars reflect historical adoption, not current best practice.
ky is what fetch should feel like. A tiny (5KB) HTTP client built on the Fetch API that adds retries, timeout handling, JSON parsing, and hooks — all the stuff you'd write yourself anyway. From Sindre Sorhus, who has a habit of building small perfect things. Axios is the incumbent at 11KB with XMLHttpRequest baggage and a massive install base. Got/node-fetch are Node-specific options. Plain fetch is free but raw — no retries, verbose error handling, manual JSON parsing. Use ky if you're building a modern frontend or full-stack app and want clean HTTP calls without Axios's weight. It works everywhere Fetch works — browsers, Node, Bun, Deno. The hook system (beforeRequest, afterResponse) is elegant for auth headers and logging. The catch: if your project already uses Axios, switching gains you almost nothing. The 6KB size difference doesn't matter for most apps. And ky's error handling is different from Axios — HTTPError instead of status codes on the response — so migration isn't a find-and-replace.
The HTTP client Node.js deserved before fetch arrived. Got wraps HTTP requests in a clean, promise-based API with retries, timeouts, streams, pagination, and hooks built in. If you're building a Node backend that talks to external APIs, got handles the edge cases you'd otherwise discover in production. Axios is the most popular alternative — simpler API, works in browsers too, but fewer advanced features. node-fetch brought the browser fetch API to Node. Undici is the performance-focused option from the Node.js team. ky is got's browser sibling from the same author. Got's retry logic, response caching, and stream support are production-grade features you'd otherwise build yourself. The hook system lets you intercept requests and responses cleanly. The catch: got is Node-only — no browser support. With native fetch now in Node.js 18+ and Undici gaining momentum, the case for an additional HTTP library is weaker than it used to be. The ESM-only move in recent versions also broke some CommonJS projects. If you don't need advanced features, native fetch is enough.