A drop-in replacement for request and request-promise-native using native fetch (Node.js 18+)
npm install dropin-request⚡ A modern drop-in replacement for the deprecated request and request-promise-native libraries — powered by Node.js native fetch.



---
If you're like me and have been using Node.js since the early days, you probably have massive codebases that rely heavily on request and later request-promise-native.
Now that both libraries are deprecated, the “official” solution is to migrate everything to native fetch. But realistically, rewriting every single line of code is painful.
That’s why dropin-request exists — just replace your require("request") (or require("request-promise-native")) with:
``js`
const request = require("dropin-request");
…and your code keeps working, powered by modern fetch under the hood 🚀.
---
* ✅ Drop-in replacement for request and request-promise-nativerequest(url, callback)
* ✅ Supports both callback and Promise/async usage
* ✅ Uses Node.js native fetch (no extra dependencies)
* ✅ Simple, lightweight, and future-proof
* ✅ Works with or await request(url)
---
`bash`
npm install dropin-request
Requires Node.js >= 18.17.0 (first LTS with stable fetch).
---
`js
const request = require("dropin-request");
request("https://jsonplaceholder.typicode.com/posts/1", (err, res, body) => {
if (err) throw err;
console.log("Status:", res.statusCode);
console.log("Body:", body);
});
`
`js
const request = require("dropin-request");
(async () => {
try {
const body = await request("https://jsonplaceholder.typicode.com/posts/1", { json: true });
console.log("Async Body:", body);
} catch (err) {
console.error("Error:", err);
}
})();
`
`js
request.get("https://jsonplaceholder.typicode.com/posts/1", (err, res, body) => {
console.log(body);
});
await request.post({
url: "https://jsonplaceholder.typicode.com/posts",
json: true,
body: { title: "Hello", body: "World", userId: 1 }
});
`
`js
const r2 = request.defaults({ headers: { "X-Test": "yes" } });
r2("https://jsonplaceholder.typicode.com/posts/1", (err, res, body) => {
console.log(body);
});
`
---
| Old request code | New dropin-request code |const request = require("request");
| ---------------------------------------------------- | -------------------------------------------- |
| | const request = require("dropin-request"); |request(url, cb)
| | request(url, cb) (same) |request.get(url, cb)
| | request.get(url, cb) (same) |request.post(opts, cb)
| | request.post(opts, cb) (same) |await request(url)
| (with request-promise-native) | await request(url) (same) |
Minimal to no code changes required 🚀
---
This project is not a 100% comprehensive replacement for every feature of the original request` library (e.g. multi-part and other advanced options). It covers the most common use cases and aims to make migration as painless as possible.
If you find missing features or want to enhance compatibility, contributions are very welcome!
Feel free to open an issue or submit a pull request on GitHub.
---
MIT © 2025 Manuel Vergel