Skip to content

⚡️ Ultra-light (150 LOC, zero dep.) & Ultra-fast NodeJS request library with reliable retry on failure, http/https, redirects, gzip/deflate/brotli, extensible, proxy, streams, JSON mode, forms, timeout

License

Notifications You must be signed in to change notification settings

carboneio/rock-req

Repository files navigation

rock-req logo

Rock-req

⭐️⭐️ Ensure your HTTP requests always reach their destination as efficiently as possible! ⭐️⭐️

Tested on Mac, Linux, Windows with NodeJS 16, 18, 19, 20

npm ci javascript style guide

🔥 Why?

In most existing libraries (2023):

  • Managing reliable retries is difficult, tricky with streams and not battle-tested
  • Using multiple forward proxies has several benefits like higher availability and increased bandwidth but Intercepting retries to use another Egress controller between two requests is not possible.
  • Many request libraries are heavy: node-fetch, superagent, needle, got, axios, request
  • Lightweight alternatives are not as light as they claim due to dependencies (simple-get, tiny-req, puny-req, phin, ...)

⚡️ Rock-req solves these problems with only 150 lines of code and zero dependencies

It also supports many features:

  • Follows redirects
  • Handles gzip/deflate/brotli responses
  • Modify defaults
  • Extend and create new instances
  • Automatically destroy input/output stream on error and premature close event
  • Advanced retries
  • URL Rewrite
  • Ultra-fast (> 20k req/s)
  • Keep Alive by default (3000ms)
  • Composable
  • Timeouts
  • HTTPS / HTTP
  • Composes well with npm packages for features like cookies, proxies, form data, & OAuth
  • Keep 98% of the simple-get API (fork source)

When the callback is called, the request is 100% finished, even with streams.

🚀 Benchmark Rock-req vs got, axios, node-fetch, phin, simple-get, superagent, ...

Stop using "slow by-default" and "false-light" HTTP request libraries!

Library NodeJS 16 NodeJS 18 NodeJS 20* Size deps inc.
rock-req 🙋‍♂️ 22816 req/s 21797 req/s 21964 req/s 144 LOC
simple-get 2937 req/s 3260 req/s 21258 req/s 317 LOC
axios 5090 req/s 4910 req/s 3196 req/s 13983 LOC
got 2163 req/s 1762 req/s 9961 req/s 9227 LOC
fetch 2101 req/s 2102 req/s 2020 req/s 13334 LOC
request 2249 req/s 1869 req/s 15815 req/s 46572 LOC
superagent 2776 req/s 2100 req/s 2895 req/s 16109 LOC
phin 3178 req/s 1164 req/s 21299 req/s 331 LOC
undici* 24095 req/s 24378 req/s 24191 req/s 16225 LOC

NodeJS 20 activates HTTP keep-alive by default, like rock-req

undici is a low-level API, faster alternative to the native NodeJS http module. It is the glass ceiling limit for NodeJS.

rock-req uses only the native NodeJS http module and provides many high-level features, a lot more than phin and simple-get with fewer lines of code.

Tested on Macbook Pro M1 Max

Install

  npm install rock-req

Documentation

The full documentation is here to reduce Node package file size.

Supporters

This packaged in maintained by Carbone:

Carbone.io logo

Thank you Feross Aboukhadijeh, creator of simple-get

About

⚡️ Ultra-light (150 LOC, zero dep.) & Ultra-fast NodeJS request library with reliable retry on failure, http/https, redirects, gzip/deflate/brotli, extensible, proxy, streams, JSON mode, forms, timeout

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published