The Libraries Behind curl's Flags: Content-Type Grew 414%, Proxy Support 300%
When you convert a curl command into code, the HTTP client is the easy half. axios.post(url, body) is one line. The other half is the flags: -H "Content-Type: …", -b cookie.jar, -x proxy:8080, --compressed, -L. Those are not features of a client library — each one is a separate problem with its own package, and most people never see them because the client library quietly depends on them.
This page counts those hidden packages. Source: the npm downloads API, window 2024-10-01 to 2026-10-10, pulled 2026-10-12, first 30 days against last 30. Swap the package name at the end of that URL to check any row.
The table
| curl flag | Package | First 30 days | Last 30 days | Change | Last publish |
|---|---|---|---|---|---|
-H content-type | mime-types | 242.4M | 1.246B | +414% | 2025-11-20 |
| (its database) | mime-db | 268.8M | 1.301B | +384% | 2025-03-18 |
-F form upload | form-data | 343M | 786.3M | +129% | 2026-06-12 |
-b / -c cookies | cookie | 246.4M | 989.3M | +302% | 2026-06-30 |
| cookie jar | tough-cookie | 171.6M | 608.7M | +255% | 2026-07-07 |
Set-Cookie parse | set-cookie-parser | 23.76M | 282.2M | +11.9× | 2026-10-08 |
-x proxy | https-proxy-agent | 295.7M | 1.182B | +300% | 2026-06-08 |
| (proxy dispatch) | proxy-agent | 41.38M | 125.3M | +203% | 2026-06-08 |
--compressed | decompress-response | 96.28M | 241M | +150% | 2025-10-13 |
-J filename | content-disposition | 146.6M | 677.2M | +362% | 2026-08-13 |
-L redirects | follow-redirects | 198M | 472.8M | +139% | 2026-10-01 |
--data-urlencode | qs | 324.8M | 850.6M | +162% | 2026-08-29 |
-u basic auth | basic-auth-parser | 0.32M | 1.116M | +249% | 2021-10-21 |
Installs, not requests made. Every figure is my own pull; publish dates come from the registry on the same date.
What the ordering says
Sort by growth and the top is set-cookie-parser (+11.9×), mime-types (+414%), content-disposition (+362%), cookie (+302%) and https-proxy-agent (+300%). Nothing at the top is "send a request." Everything at the top is understanding a header.
That is the real shape of HTTP work in 2026: the request is a solved problem, and the growth is in parsing what comes back and what goes out. Content negotiation, cookie state, attachment filenames, proxy routing — the parts a curl command encodes in eight characters of flags and a generated client has to reimplement correctly.
content-disposition at +362% is the row I did not expect. Its whole job is the Content-Disposition header — what filename a download gets. 677.2M installs a month means a large amount of software is handling file downloads, which fits everything else on this page: agents downloading artifacts, CI pulling build outputs, document pipelines. It grew four times faster than follow-redirects, and following redirects is the more fundamental capability. Adoption does not rank by importance.
Proxy support at +300% (https-proxy-agent, 1.182B installs) is the second signal worth naming. Corporate egress, scraping infrastructure, and LLM-tool sandboxes all route through an HTTP proxy, and the agent that implements -x is now installed at roughly the same scale as a content-type library. Two years ago I would have called proxying a niche requirement.
basic-auth-parser is the odd one out at +249% from a base of 0.32M — and last published 2021-10-21. It works, it is tiny, nobody maintains it, and it grew. A five-year-old unmaintained package growing 249% is not a quality signal; it is what happens when a dependency graph has no reason to move.
Two pairs that must not be summed
mime-types (1.246B) and mime-db (1.301B) are one lookup: the code and its data table. Same with proxy-agent and http-proxy-agent / https-proxy-agent, which are a dispatcher and its implementations. Adding them would invent a number — "3.5 billion installs of content-type handling" would be double-counted twice.
If you are hand-writing the code half
When a converter gives you axios.post(...) and you still have to make it behave like the curl command, these are the pieces:
- Wrong or missing
Content-Type→mime-typesto derive it from a filename rather than hardcodingapplication/octet-stream. -Fuploads arriving empty →form-datafor multipart streams;qs(+162%) when the body wants urlencoded nesting and arrays rather than a flat object.- Cookies that do not survive a redirect →
tough-cookiegives you an actual RFC 6265 jar;cookiehandles the header strings, and they are different problems. -xnot working in generated code →proxy-agentwithhttps-proxy-agent; note the client library has to accept anagent, which rules out anything browser-only.- Gzipped response saved as binary junk →
--compressedmeans the server may compress;decompress-responsehandles it, andAccept-Encodingis what triggers it. - Download saved as
downloadinstead ofreport.pdf→content-disposition, and only after following redirects (follow-redirects) because the final URL often determines the name.
I built a curl converter, so I have opinions. The last bullet is the one people hit least often and debug longest, because the failure is silent and the filename looks like a cosmetic detail.
What these numbers cannot tell you
- These are transitive dependencies. Almost nobody installs
mime-dbon purpose. The counts measure how often other tools need the capability, not developer preference. - Related packages share one install. A request that needs a cookie jar pulls
tough-cookieandcookietogether, so their growth is correlated by construction. - Growth rate and importance are unrelated.
follow-redirectsat +139% is more functionally central to using curl thancontent-dispositionat +362%, and the numbers do not care.
Related
- HTTP client trends 2026 — the client libraries these packages hide inside
- The curl flags that actually matter — what each flag really does
- Cookies and downloads —
-band-Jend to end, including the filename trap - The curl cheatsheet — the flags and the packages behind them, one line each