Thank you very much for some initial thoughts.
I agree with both Chrises. This doesn’t have to be full featured http client. This role is for requests, httpx and others. I am here to humbly suggest, that in a huge number of cases, we just need to `GET` or `POST` simple information and that’s it. And in Python currently it is not that straight forward.
I agree with Chris W. why json, or tomllib (that’s might be even better example - PEP 680 – tomllib: Support for Parsing TOML in the Standard Library | peps.python.org ) was introduced in standard library? I remember the justification: this is to simplify basic workflow, and for more advanced uses there is a dedicated full featured and frequently updated package for that.
Introducing `fetch` in Javascript simplified a lot of things.
$ python3.14 --version
Python 3.14.3
$ python3.14 -m venv .venv-requests
$ du -hs .venv-requests
13M .venv-requests
$ .venv-requests/bin/python -m pip install requests
Collecting requests
Using cached requests-2.32.5-py3-none-any.whl.metadata (4.9 kB)
Collecting charset_normalizer<4,>=2 (from requests)
Downloading charset_normalizer-3.4.5-cp314-cp314-macosx_10_15_universal2.whl.metadata (39 kB)
Collecting idna<4,>=2.5 (from requests)
Using cached idna-3.11-py3-none-any.whl.metadata (8.4 kB)
Collecting urllib3<3,>=1.21.1 (from requests)
Using cached urllib3-2.6.3-py3-none-any.whl.metadata (6.9 kB)
Collecting certifi>=2017.4.17 (from requests)
Using cached certifi-2026.2.25-py3-none-any.whl.metadata (2.5 kB)
Using cached requests-2.32.5-py3-none-any.whl (64 kB)
Downloading charset_normalizer-3.4.5-cp314-cp314-macosx_10_15_universal2.whl (280 kB)
Using cached idna-3.11-py3-none-any.whl (71 kB)
Using cached urllib3-2.6.3-py3-none-any.whl (131 kB)
Using cached certifi-2026.2.25-py3-none-any.whl (153 kB)
Installing collected packages: urllib3, idna, charset_normalizer, certifi, requests
Successfully installed certifi-2026.2.25 charset_normalizer-3.4.5 idna-3.11 requests-2.32.5 urllib3-2.6.3
$ du -hs .venv
17M .venv
$ python3.14 -m venv .venv-httpx
$ du -hs .venv-httpx
13M .venv-httpx
$ .venv-httpx/bin/python -m pip install httpx
Collecting httpx
Using cached httpx-0.28.1-py3-none-any.whl.metadata (7.1 kB)
Collecting anyio (from httpx)
Using cached anyio-4.12.1-py3-none-any.whl.metadata (4.3 kB)
Collecting certifi (from httpx)
Using cached certifi-2026.2.25-py3-none-any.whl.metadata (2.5 kB)
Collecting httpcore==1.* (from httpx)
Using cached httpcore-1.0.9-py3-none-any.whl.metadata (21 kB)
Collecting idna (from httpx)
Using cached idna-3.11-py3-none-any.whl.metadata (8.4 kB)
Collecting h11>=0.16 (from httpcore==1.*->httpx)
Using cached h11-0.16.0-py3-none-any.whl.metadata (8.3 kB)
Using cached httpx-0.28.1-py3-none-any.whl (73 kB)
Using cached httpcore-1.0.9-py3-none-any.whl (78 kB)
Using cached h11-0.16.0-py3-none-any.whl (37 kB)
Using cached anyio-4.12.1-py3-none-any.whl (113 kB)
Using cached idna-3.11-py3-none-any.whl (71 kB)
Using cached certifi-2026.2.25-py3-none-any.whl (153 kB)
Installing collected packages: idna, h11, certifi, httpcore, anyio, httpx
Successfully installed anyio-4.12.1 certifi-2026.2.25 h11-0.16.0 httpcore-1.0.9 httpx-0.28.1 idna-3.11
$ du -hs .venv-httpx
17M .venv-httpx
$ python3.14 -m venv .venv-aiohttp
$ du -hs .venv-aiohttp
13M .venv-aiohttp
$ .venv-aiohttp/bin/python -m pip install aiohttp
Collecting aiohttp
Downloading aiohttp-3.13.3-cp314-cp314-macosx_11_0_arm64.whl.metadata (8.1 kB)
Collecting aiohappyeyeballs>=2.5.0 (from aiohttp)
Downloading aiohappyeyeballs-2.6.1-py3-none-any.whl.metadata (5.9 kB)
Collecting aiosignal>=1.4.0 (from aiohttp)
Downloading aiosignal-1.4.0-py3-none-any.whl.metadata (3.7 kB)
Collecting attrs>=17.3.0 (from aiohttp)
Using cached attrs-25.4.0-py3-none-any.whl.metadata (10 kB)
Collecting frozenlist>=1.1.1 (from aiohttp)
Downloading frozenlist-1.8.0-cp314-cp314-macosx_11_0_arm64.whl.metadata (20 kB)
Collecting multidict<7.0,>=4.5 (from aiohttp)
Downloading multidict-6.7.1-cp314-cp314-macosx_11_0_arm64.whl.metadata (5.3 kB)
Collecting propcache>=0.2.0 (from aiohttp)
Downloading propcache-0.4.1-cp314-cp314-macosx_11_0_arm64.whl.metadata (13 kB)
Collecting yarl<2.0,>=1.17.0 (from aiohttp)
Downloading yarl-1.23.0-cp314-cp314-macosx_11_0_arm64.whl.metadata (79 kB)
Collecting idna>=2.0 (from yarl<2.0,>=1.17.0->aiohttp)
Using cached idna-3.11-py3-none-any.whl.metadata (8.4 kB)
Downloading aiohttp-3.13.3-cp314-cp314-macosx_11_0_arm64.whl (493 kB)
Downloading multidict-6.7.1-cp314-cp314-macosx_11_0_arm64.whl (43 kB)
Downloading yarl-1.23.0-cp314-cp314-macosx_11_0_arm64.whl (86 kB)
Downloading aiohappyeyeballs-2.6.1-py3-none-any.whl (15 kB)
Downloading aiosignal-1.4.0-py3-none-any.whl (7.5 kB)
Using cached attrs-25.4.0-py3-none-any.whl (67 kB)
Downloading frozenlist-1.8.0-cp314-cp314-macosx_11_0_arm64.whl (49 kB)
Using cached idna-3.11-py3-none-any.whl (71 kB)
Downloading propcache-0.4.1-cp314-cp314-macosx_11_0_arm64.whl (46 kB)
Installing collected packages: propcache, multidict, idna, frozenlist, attrs, aiohappyeyeballs, yarl, aiosignal, aiohttp
Successfully installed aiohappyeyeballs-2.6.1 aiohttp-3.13.3 aiosignal-1.4.0 attrs-25.4.0 frozenlist-1.8.0 idna-3.11 multidict-6.7.1 propcache-0.4.1 yarl-1.23.0
$ du -hs .venv-aiohttp
19M .venv-aiohttp
Just to send one simple HTTP GET or POST request.