@honzajavorek honzajavorek mentioned this issue Apr 2, 2019
3 of 3 tasks complete
@bajtos

This comment has been minimized.

Copy link

bajtos commented Apr 2, 2019

deprecate the latest npm package and auto deprecate them on publish

Please be careful about deprecation. As Mikael wrote above, there are 41K modules depending on request. Many of these modules are useful in the current state and work well for their users, but their maintainers may not have time to rework those modules to use something else than request. By deprecating request at install time, you will basically deprecate a large portion of npm module ecosystem.

As I see it, maintenance mode is not the same thing as deprecation.

  • Maintenance mode = we will fix bugs and security vulnerabilities so that you can keep using this package.
  • Deprecation = nobody should be using this package any more. This typically happens when the module is abandoned and won't receive any further bug or security fixes.
@bajtos bajtos mentioned this issue Apr 2, 2019
0 of 1 task complete
@reconbot

This comment has been minimized.

Copy link
Contributor

reconbot commented Apr 2, 2019

I hear you. The full text

deprecate the latest npm package and auto deprecate them on publish via ci (maybe after support has been stopped?)

I think we should eventually deprecate request because I don't want new projects to use it.
I've been trying to triage the issues and prs down to a list we can solve, but there are bugs that we cannot fix without a breaking change. Therefore they wont get fixed and new users will have issues.

For example following redirects looses request bodies and cookies, and url parsing to remove relative paths are both bugs but I'm not sure they'll ever be fixed.

Maybe deprecation isn't the right answer, but I don't know how else to approach that.

Does that make sense?

@mikeal

This comment has been minimized.

Copy link
Member Author

mikeal commented Apr 2, 2019

Let’s just bump the major version when we deprecate. That way most people depending on the project won’t see this error until they try to upgrade to a new major, which means they are actively developing it and really should look for an alternative.

@nylen

This comment has been minimized.

Copy link
Member

nylen commented Apr 3, 2019

I'm proud to have been part of the history of request. I will also check out bent, it looks interesting, and small, which is more important to me these days.

We’re going to have to remove inactive collaborators and enforce 2fa, because commit rights will effectively become npm publish rights.

Fine to remove me.

@JonathanRowell

This comment has been minimized.

Copy link

JonathanRowell commented Apr 4, 2019

I think we should eventually deprecate request because I don't want new projects to use it.

As a programmer who is VERY grateful for the module and who uses it all the time I WANT to use it on new projects.

@CliffS

This comment has been minimized.

Copy link

CliffS commented Apr 4, 2019

This decision must have been very hard to take but is commendable in the extreme. Well done.

@rimiti

This comment has been minimized.

Copy link

rimiti commented Apr 4, 2019

I'm proud having used this amazing tool. It forced the community to improve. 🙏
If you need help to maintain it do not hesitate to contact me.

@pdxmholmes

This comment has been minimized.

Copy link

pdxmholmes commented Apr 4, 2019

While I respect your decision, I would ask you to consider how much real world, production, code relies on request currently. It's far more than even NPM stats can tell you. I fully understand wanting to move on to a new thing and doing something in a new, more interesting way...this is the JavaScript ecosystem after all, have to chase the new thing. But please consider the amount of time and money you'd be costing professional engineering organizations by wholesale deprecating request. If you want to leave it in maintenance mode, that's fine, but understand that plenty of people have absolutely no practical reason to change libraries. Forcing people to change because of ideology is going to lead to frustration.

Regardless, thanks for the hard work everyone has put in to this library.

@kibertoad

This comment has been minimized.

Copy link

kibertoad commented Apr 5, 2019

I wonder what library could be considered modern and recommended now. Superagent is mostly in maintenance mode right now, axios not too active altogether.

@svozza

This comment has been minimized.

Copy link

svozza commented Apr 5, 2019

Just a quick note to say thank you (and all the other contributors) for all the hard work over the years on this module; it was one of the first I ever used back when I started with Node so will always have a special place in my heart.

@Vivalio

This comment has been minimized.

Copy link

Vivalio commented Apr 5, 2019

Let’s just bump the major version when we deprecate. That way most people depending on the project won’t see this error until they try to upgrade to a new major, which means they are actively developing it and really should look for an alternative.

i think this is still a viable solution for the mention above.

@millette

This comment has been minimized.

Copy link

millette commented Apr 5, 2019

@kibertoad Looks like @mikeal is working on https://github.com/mikeal/bent. I've been using https://github.com/sindresorhus/got for many years and it's well supported and evolving.

@riclf

This comment has been minimized.

Copy link

riclf commented Apr 5, 2019

With all this talk and the possibility of it being deprecated, I think there has to be equal mention of a current maturity replacement module, of parallel utility. We can't just announce its end and then suggest nothing, or a replacement of much less maturity and confidence. Request is used in serious applications. Why does this matter? Because for all its "outdated patterns at its core", it works on a daily basis, for thousands. This is not about the perfect world but the real world. What is the real world replacement, of confidence, on the day request is put in maintenance mode or is deprecated? That is an imperative.

@reconbot

This comment has been minimized.

Copy link
Contributor

reconbot commented Apr 5, 2019

You can find that discussion over here #3143

You can find a current working plan (which direct feedback is welcome) can be found here #3142 (comment)

@aalimovs

This comment has been minimized.

Copy link

aalimovs commented Apr 8, 2019

Thanks for your work on request!

The patterns at the core of request are out of date.

Patterns change every few months and years, especially in JavaScript community. Aren't the reasons why request was originally created are still valid today?

request has 10 years of commits, stability and tests. Why start from scratch? Isn't this just adding more "JavaScript fatigue", resulting in more libraries doing the same thing - HTTP requests?

It's sad to see such an important and historic library in Node's history go away because streams and callbacks are not fancy in 2019 anymore.

@stcktrce

This comment has been minimized.

Copy link

stcktrce commented Apr 8, 2019

I don't believe that deprecating the library is really needed, it's been around for about 10 years now, used in lots of places and is actually pretty stable, and in the end. all it does is make HTTP requests, what else would the library need? Support for the JS fad of the month? 👎

@cboden

This comment has been minimized.

Copy link

cboden commented Apr 8, 2019

The committers that are still active will try to merge fixes in a timely fashion, no promises though.

ba-dum-chhh! 🥁

@cphoover

This comment has been minimized.

Copy link

cphoover commented Apr 8, 2019

This is responsible deprecation. Well communicated, with a plan to follow through on. I think other OSS maintainers can look to this as a standard to aim for.

This is much better than forgetting about a package and letting random people (who can inject back-doors into the code) in as maintainers to take over when you no longer care.

Request was a great package, and we thank you tremendously for your contributions to the early node ecosystem. You are right in your assessment that callback style is no longer idiomatic JavaScript, and there are other packages like fetch which mirror WHATWG standards.

@DiegoRBaquero

This comment has been minimized.

Copy link

DiegoRBaquero commented Apr 8, 2019

@stcktrce Exactly, the library doesn't need anything else, it works just as it is. But there has been major improvements in the whole ecosystem. Deprecating the library is just marking the opportunity for others to check new and more modern libraries instead of simply relying on the most popular out there.

@mikeal thank you for all your efforts in the library (r2 too) and the ecosystem. Also, for setting this precedence of a well thought through and planned deprecation in the ecosystem.

@jasonswearingen

This comment has been minimized.

Copy link

jasonswearingen commented Apr 8, 2019

Let’s just bump the major version when we deprecate. That way most people depending on the project won’t see this error until they try to upgrade to a new major, which means they are actively developing it and really should look for an alternative.

@mikeal I don't think that's a good idea.

The problem is that most of replacements are of lower quality than request. I just moved to request from axios about a week ago.

Axios has multi-year persistent bugs around proxy support, modifying https agents, and unhandled promise exceptions. You only find these out after investing into axios heavily.

To new users axios looks superficially as good as request (similar number of users, promises by design, etc)

@jbunton-atlassian

This comment has been minimized.

Copy link

jbunton-atlassian commented Apr 9, 2019

Thanks for request :)

If anybody is looking for a minimal promise-based HTTP library with pluggable filters and good support for streams you could check out httplease. We've been using it for a few years in production.

@robberfree

This comment has been minimized.

Copy link

robberfree commented Apr 11, 2019

I love the request module.Thanks a lot.
You mean request get too much focus to prevent other same new module come out?

@reconbot

This comment has been minimized.

Copy link
Contributor

reconbot commented Apr 11, 2019

If there are specific bugs in comparable features in other libraries I’d like to specifically identify them. Proxy support is a complex feature and having a test case that request passes but other libraries fail is very valuable.

@jasonswearingen

This comment has been minimized.

Copy link

jasonswearingen commented Apr 11, 2019

@reconbot in the latest axios (^0.18.0) you can't connect to a https site through a proxy server. doing so results in EPROTO errors. this is an open bug regarding this, but the issue goes back years: axios/axios#1981

edit: specifically, you can't use axios to do https requests via a http proxy. maybe a dedicated https proxy works, didn't try that.

@mivanovaxway

This comment has been minimized.

Copy link

mivanovaxway commented Apr 11, 2019

I sure hope fixes are not considered new features, such as my pull request for Maximum Response Size, which I see as a standard required feature of any mature library.

Also I did review other request libs before I choose this one and most of them are very problematic, incomplete and buggy. Their docs do not measure either. I do not really see what can another library bring but untested code and bugs, it's not like there's a new approach to making HTTP requests. It's all about wrapping http/https module and providing sane defaults such as buffering response, decoding responses, and of course the ability to promisify the whole thing. The biggest problem of this library here is the aim of total compatibility, trying to be compatible with legacy stuff only brings pain and legacy coding practices. But this can be fixed in many ways. There's a good base that can be refactored into something elegant, modern and minimalist. And most of all reliable. There are many ways to do this - split into more files, use ECMA6 with Babel or Typescript.

No sane developer wants 10 libraries that do the same thing but lack different features, are buggy, undocumented. This library really works and I am thankful for it and hope that it's not deprecated but instead revived.

@mikeal

This comment has been minimized.

Copy link
Member Author

mikeal commented Apr 11, 2019

@rogerkmp2

This comment has been minimized.

Copy link

rogerkmp2 commented Apr 22, 2019

TIL 41k packages just became vulnerable.

Look, I agree that request should go away, but I’m always fearful of mainstream packages like this changing their release pipeline. One bad actor or one compromised dev box publishing malicious code would effectively spread to every project out there.

Please consider tightening the npm push requirements. Set up a branch for ci, require multiple approvals, something more than simply pushing to master.

picchietti added a commit to picchietti/picchietti.io that referenced this issue May 15, 2019
While I really liked the request library and was planning to use 
request-promise with it, it is [going into maintenance 
mode](request/request#3142) so I've switch my 
usage of it to axios.
KalleV pushed a commit to LabShare/node-oidc-provider that referenced this issue May 21, 2019
BREAKING CHANGE: Due to request's maintenance mode and inevitable
deprecation (see request/request#3142)
the option to switch the provider to use request has been removed.
textbook added a commit to textbook/fauxauth that referenced this issue Jun 18, 2019
Request is deprecated: request/request#3142