Why I forked httpx | Blog

I forked the python library httpx to httpxyz after over a year without a release of this popular package

the http landscape is rather scary lately in Python. instead of forking join forces... See Niquests https://github.com/jawah/niquests

I am trying to resolve what you've seen. For years of hard work.

GitHub - jawah/niquests: Drop-in replacement for Requests. Automatic HTTP/1.1, HTTP/2, and HTTP/3. WebSocket, and SSE included.

Drop-in replacement for Requests. Automatic HTTP/1.1, HTTP/2, and HTTP/3. WebSocket, and SSE included. - jawah/niquests

GitHub
Can confirm, more features, a breeze to switch.

The basis of httpx is not very good at all.

I think that it owes its success to be first "port" of python requests to support async, that was a strong need.

But otherwise it is bad: API is not that great, performance is not that great, tweaking is not that great, and the maintainer mindset is not that great also.
For the last point, few points were referenced in the article, but it can easily put your production project to suddenly break in a bad way without valid reason.

Without being perfect, I would advise everyone to switch to Aiohttp.

It is indeed a shame that niquests isn't used more, I think trying to use the (c'est Français) argument to in French will bring you many initial users needed for the inertia

ahah, "en effet"! je m'en souviendrai.

more seriously, all that is needed is our collective effort. I've done my part by scarifying a lot of personal time for it.

Is it knee-quests or nigh-quests?

I've started seeing these emoji-prefixed commits lately now too, peculiar

nee-quests, I am French native.
There is a series of extensions for Vscode that add this functionality like https://github.com/ugi-dev/better-commits
GitHub - ugi-dev/better-commits: Powerful Visual Studio Code extension that enforces standardized commit messages, ensuring convention and consistency across Git repositories.

Powerful Visual Studio Code extension that enforces standardized commit messages, ensuring convention and consistency across Git repositories. - ugi-dev/better-commits

GitHub
ah ok, I am familiar with and not exactly against (non-emoji) commit message prefixes
it's the gitmoji thing, I really don't like it, it was a mistake. Thinking to stop it soon. I was inspired by fastapi in the early days. I prefer conventionalcommits.org
I guess the Discussion on Hacker News href should be "https://news.ycombinator.com/item?id=47514603" instead of "news.ycombinator.com/item?id=47514603"
Why I forked httpx | Hacker News

More related drama: The Slow Collapse of MkDocs (https://fpgmaas.com/blog/collapse-of-mkdocs/)
The Slow Collapse of MkDocs

How personality clashes, an absent founder, and a controversial redesign fractured one of Python's most popular projects.

Oh i recognised one of the involved people immediately, drama person.

I still think that hijacking the mkdocs package was the wrong way to go though.

The foss landscape has become way too much fork-phobic.

Just fork mkdocs and go over your merry way.

>thread to call out Read the Docs for profiting from MkDocs without contributing back.

>They also point out that not opening up the source code goes against the principles of Open Source software development

I will never stop being amused when people have feelings like this and also choose licenses like BSD (this project). If you wanted a culture that discouraged those behaviors, why would you choose a license that explicitly allows them? Whether you can enforce it or not, the license is basically a type of CoC that states the type of community you want to have.

Congratulations on forking!

Always remember that open-source is an author’s gift to the world, and the author doesn’t owe anything to anyone. Thus, if you need a feature that for whatever reason can’t or won’t go upstream, forking is just about the only viable option. Fingers crossed!

What is it about Python that makes developers love fragmentation so much? Sending HTTP requests is a basic capability in the modern world, the standard library should include a friendly, fully-featured, battle-tested, async-ready client. But not in Python, stdlib only has the ugly urllib.request, and everyone is using third party stuff like requests or httpx, which aren't always well maintained. (See also: packaging)

> Then I found out it was broken. I contributed a fix. The fix was ignored and there was never any release since November 2024.

This seems like a pretty good reason to fork to me.

> Sending HTTP requests is a basic capability in the modern world, the standard library should include a friendly, fully-featured, battle-tested, async-ready client. But not in Python,

Or Javascript (well node), or golang (http/net is _worse_ than urllib IMO), Rust , Java (UrlRequest is the same as python's), even dotnet's HttpClient is... fine.

Honestly the thing that consistently surprises me is that requests hasn't been standardised and brought into the standard library

Your java knowledge is outdated. Java's JDK has a nice, modern HTTP Client https://docs.oracle.com/en/java/javase/11/docs/api/java.net....
HttpClient (Java SE 11 & JDK 11 )

>Honestly the thing that consistently surprises me is that requests hasn't been standardised and brought into the standard library

Instead, official documentation seems comfortable with recommending a third party package: https://docs.python.org/3/library/urllib.request.html#module...

>The Requests package is recommended for a higher-level HTTP client interface.

Which was fine when requests were the de-facto-standard only player in town, but at some point modern problems (async, http2) required modern solutions (httpx) and thus ecosystem fragmentation began.