NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #53 most downloaded on PyPI
Yet another URL library
Last release 13 days ago
15 Sep 2026
Release timing varies
gaps range from 1 weeks to 5 months
Nearly every release is documented
notes for 60 of the last 60 stable releases
7 versions withdrawn
withdrawn after publishing
10 years old
139 releases · first in 2016
Workaround for missing str.isascii() in Python 3.6 #389 _
Fix regression, make the library work on Python 3.5 and 3.6 again.
Fix regression, make the library work on Python 3.5 and 3.6 again.
Distinguish an empty password in URL from a password not provided at all
One column per quarter.
Distinguish an empty password in URL from a password not provided at all (#262)
Fixed annotations for optional parameters of URL.build (#309)
Use None as default value of user parameter of URL.build (#309)
Enforce building C Accelerated modules when installing from source tarball, use YARL_NO_EXTENSIONS environment variable for falling back to (slower) Pure Python implementation (#329)
Drop Python 3.5 support
Fix quoting of plus in path by pure python version (#339)
Don't create a new URL if fragment is unchanged (#292)
Included in error message the path that produces starting slash forbidden error (#376)
Skip slow IDNA encoding for ASCII-only strings (#387)
Nothing published for this version
Nothing published for this version
68b86aa86bb018a6a6ba3023e60c9760e9c869e1 Bump to 1.4.0a10
68b86aa86bb018a6a6ba3023e60c9760e9c869e1 Bump to 1.4.0a10
6382c61a8d8f4c4edec170ff82603f3da6ac2b0a Polish deployment (#360)
60d2c1321baa2b5ee67eafe4f94c1db8e2ab2b43 Fix a path to repaired wheels
5afbdf1ba48a1e8c55a7fd97d450585e0dacadd8 Fix path
309d116fb2a0d417fcd5ab8400489dab1e4eac4d Fix aftifact path
58acb5d6b36cffc0dcfa6cc361525fc4224f586e Fix file pattern
2835df884c98f45125cfe2b396394efb5bdc66e7 Bump to 1.4.0a5
057f915445828fb487072ba4581de67d68d34c93 Upload settings from env vars
d0e026edf2ea16f466b03990a326e2a4b2717945 Fix azure config again
8e72e20fac05295e8cf57030732662229eaa6099 Fix config <details><summary><b>See More</b></summary>
91941a33b60a85b105e2aff3c1882994fec3b3c8 Install twine before uploading
7235202f3fdd941b326a2fa92e08deae1a401232 Bump to 1.4.0a1
a16a88f02402ab9c51c44dde052ff47c2ff7b791 Deploy (#358)
c81633ccf9802444bca60c220576a131d79d91d0 Fix pattern
30947f56f45aa18898fbf9d25ea1669f705900cf Work on deployment
5b54757e5ede5366d8c2c23adedea6c42ae25936 Fix
48331d80b47f60bc2a8ece863829bfe3e786ba05 Fix task name
50028fa5d8543899ab49719bf465869046d22f0b Publish dists
f8dc847bcd24fc3c0a0ef4b95e0ad5ab6c858da6 Add linters on azure (#354)
bed20f9015b5ca65de4b60022d98bce61928d744 Add linters on azure (#353)
b99629bc8029237e59ec2ae267b13fec7ff77939 Add new test (#352)
dd3833a30775eca046f8a03aae2e1f491ce0b453 Fix quoting of plus in path by pure python version (#339)
2062ecb301c1420e98d0bff4e48802fffd32b575 Update CHANGES
03a10a71b8a13c5245671e8f71fb0444ecbc02c8 Drop pytohn 3.5 from appveyor build
33cc05778dc433ab17aebbe452c9a645e4e110a8 Return argument untouched on quoting/unquoting if no operation is required (#338)
cd37b659d16b8036a92a5fc83399aedb344a19e1 Use python 3.6 as minimal requirement
523af4ad2bd4d715ad92144e4fa706d652e5911e Add windows and macosx to build matrix
f958a2507718a5d99e2e1bdaa2b1b72f004a2d69 Fix typo
dbe03066ccce307f6d6dfae9f2b62e6e793e5f45 Don't install mypy on pypy
3fddba717ee020937ca4210d0929423c8aa1bfed Correct pypy spec
03325c65e834850280c0e02b6e61cf38102f0f7b Add pypy to build matrix
31713da8501015f25d4540b8a9e65a2b41673e37 Fix appveyor
5df013b743b154a5bed57dc6f1947434f69049ba Add pure python builds to matrix
a49b5f314b4e853c666b283cd3dc552797d17bd8 Fix CI
f8e45e4e1be8a1b55e621c67a554853127cb88cf Fix build
be56553c3a52173c1ec9dde4ed721534dffa46cd Work on azure
c4c06e4244c367b3af31a555cca0c7a9b0d403b7 Polish makefile
3a41f4846564474e233b60d0d65929e27e4fbba7 Cythonize sources
b175d3255ddaa05d7c5f750464376cf624bb7118 Drop setup.py test obsolete command
65456de92f1ed44c067c7b29f2a558221aa5f169 Cleanup setup
ec4942d7195b443d216aa2ff475d591b468055ff Cleanup pipeline
4851e240a0762ee7252311b609c7d75121774496 Move azure config file
70d9dc8b5d2bd67b7d123c0b71f50567075c698a Bump pytest from 5.1.3 to 5.2.0 (#336)
0d6385ccea8871bdd011f31135ecff6d1d302546 Bump mypy from 0.720 to 0.730 (#335)
ba622352cdcb43f56de8402f99d968e0968be473 Bump pytest from 5.1.2 to 5.1.3 (#334)
191960da6308dccc79311e6b52fa2b8dfb618d74 Update CHANGES
e722879962d7cf66d19aac15878365714b9193f2 Adapt Cython building to pip==19 (#329)
8adaa3785d1c493d0c524acf54d8f76b8548e149 Remove pyup configuration (#331)
fe7bb1412dd40366d7fcc55b48cb313f56d5253e Bump pytest from 5.1.1 to 5.1.2
99a3efc27ecfa95d310786df13641965f1b59932 Scheduled weekly dependency update for week 34 (#328)
72b1f683f84496e72e66e3b31d761c265df59446 Allow user=None in URL.build and sync .pyi with source. (#309)
32f56264b14a1cadb4da077c9c855e56f1c29a7e add 'from exc' to exception (#326)
53dc6f616faedb3136900a77a7a332743638e20a Scheduled weekly dependency update for week 22 (#310)
3d371f9baca090e740418774479ab2b6d93b016f Update pytest from 4.5.0 to 4.6.1
065c7a73df9c488aa214fc130ce2860e022741a5 Update cython from 0.29.7 to 0.29.10
116ece6e1a2f06293979b6cdd3acb36cc87db6c2 Update sphinx from 2.0.1 to 2.1.0
c41b9fe34afb49479d6b0f25b051a394211938a8 Merge pull request #308 from aio-libs/pyup-scheduled-update-2019-05-13
79e260dedf9b470226d0e731f48dfbd3c8fd349b Update mypy from 0.670 to 0.701
f24e5ca9d5e6837da809fc187b43b71643171c51 Update pytest from 4.3.1 to 4.5.0
458de92198d543d6ff82a1b1006ad001463aeb98 Update cython from 0.29.6 to 0.29.7
c85ff73f16cbc53483327ed8d44731833cc489ea Update sphinx from 1.8.5 to 2.0.1
f67da7f46d2f80066d4152030588b3051d6675e5 Update wheel from 0.33.1 to 0.33.4
e47da02c00ad764e030ca7647a9565548c97d362 Scheduled weekly dependency update for week 11 (#296)
d7138eb990a239b0b3c5459cf7451cf9fcd7e7d1 Merge pull request #291 from aio-libs/pyup-scheduled-update-2019-03-04
cd6a73715c63ba2ce9624858844e66c94b4054f6 Update mypy from 0.650 to 0.670
c09b9fa2564c5b814c0dbc9af8f366f6c844bb05 Update pytest from 4.1.1 to 4.3.0
a17b0d0bc019a70c34abb2c2338d8373f04470b9 Update cython from 0.29.2 to 0.29.6
e7fc99617f6c876733f0030858a1bd97a9a6a61c Update flake8-pyi from 18.3.1 to 19.3.0
b615781e39f24028c26737c32c32a5d76dc69829 Update flake8 from 3.6.0 to 3.7.7
9d096692c37991045e4ea28762b5679746115af6 Update sphinx from 1.8.3 to 1.8.4
898afe49c9388cffcfc795886a708c2e951ebae1 Update wheel from 0.32.3 to 0.33.1
948f9c2df5a40a7a59e4bea3901bdd537d984b28 Merge pull request #282 from aio-libs/pyup-scheduled-update-2019-01-14
dc3fd53cb8ffed2bc44ab8b54723e48d0daa240a Update pytest from 4.1.0 to 4.1.1
8317ed40a37b96ef83759f0b7b215731fe838e6d Update pytest from 4.0.2 to 4.1.0 (#279)
4e43024f7bc51b883502464e24c41e0707552ffa Disallow passing NoneType to URL.build (#276)
31d1fc3e6ce3845d14694b34f68546b50ed9bbcb Update sphinx from 1.8.2 to 1.8.3 (#277)
28f9683feb56c10643b38723cd2c824830327784 Scheduled weekly dependency update for week 51 (#274)
e79090209d25c561d60f1996d8b6c33122360c45 Update CHANGES
8fe668657806c95425a16f90b5bc6381f48056ae Support empty password in URL (#262)
b6addc9617eef52d4e127e89b226c8c99fcda090 Tune ignore linter list
619cc2203b8888fb9ad552c4a3da6f8b31d1fbac Bump to 1.3.0
39ccc40c8d11f2d279ab58d3e7d9771ace04f7ea Enable back flake8-pyi
43caccaaa6da4f708619ba1bd905fb7920edf125 Don't install black on Python 3.5
36723be4fc8118a900591dff52f02d146e84e650 Fix CI badge
dd91d07acaa99c23b2a8b6a58c9123fe1c7025ff Fix travis
deeefd698309385c3a25901b61aa224e9e259cb9 Apply black
60aa3e3169d0f63a6dba474cdc6df2f80c188b7c Scheduled weekly dependency update for week 42 (#254)
f6bbe2338d57f41ebb867ad9093cf0ebf5a88597 Update cython from 0.28.5 to 0.29 (#252)
a3ad3346be85f6a82224c79aac091e56f85d0af6 Refactor sequence in test_never_quote
805bb9e39513e2e41616f4ee89fc1d9cac6ae6dd Scheduled weekly dependency update for week 40 (#247)
16bdfed57ecfdbc2a726d3a0b7098cb5fcabdcf3 Drop explicit python nightly Travis rule (#251)
b8609dfed490e32730cf2cd5b29aa44717517391 Post-fix for #243: hide non-public API
e5ed57c099f7e34d8ee5c208d42e880d9a5ea219 Drop in-deploy step conditions
c333973345d98a91c0de934dc424b802b58d9599 Move PyPI publishing to a separate stage
18c83281e40a37e3ab7b974c2d7d3fa735e4cc04 Fix typo in Travis CI config
efa1a6b52f51fc95a3a2b1ef7514401c568a19d7 Fix line length linter complaint in init
74735bb5f7aaee2b7dc14ee2541a096908521eff Raise ValueError for URL with authority with path without leading slash [ #243 ]
d7ebbff21db972c7f37d48f9efec78bd10e1b245 Improve reason in validate_authority_uri_abs_path
a054dd90be9d137a289505ced080b5f18273e4dd Adjust validate_authority_uri_abs_path for PEP257
47d8c1aef1a6341fe898805d78805d338e00d515 Minor fixes in test_quoting.py (#250)
d277516c0a70286dc73e67075574c68aa9255b94 Update CHANGES
4ec84f5a2d93ce99c4da2557d8b05112fbc3cd80 Issue#168: give friendlier error when port cant be converted to int (#249)
9249448a023e06cc993d22e2b5b7fcfe9b7bc741 Suppress failures on Python 3.8
58e6f825bcff7334e43ebc32be48d1653aa53e04 Raise ValueError for URL with authority with path without leading slash
df137a4d85eec506e82c5a1d754b8a8d856694b0 Merge pull request #246 from aio-libs/imgbot
be67cd6a6dbcaba4be96822a93ad7c1867692d41 [ImgBot] optimizes images
bfe33b326b8f402d68bb67bc006952cc4fb8003e Update wheel from 0.31.1 to 0.32.0 (#244)
6daf1fd3606710c2c658f476ac354ad027d92b3f Set up CI with Azure Pipelines
619b59abffcd54c0f125a0d9d0f6adc9aa8dbc98 Merge pull request #241 from aio-libs/pyup-scheduled-update-2018-09-24
3c044992bd1513b603deabf0f3945cff0cb210b7 Update mypy from 0.620 to 0.630
036f619568dc7bf882fd3e8f1e1b4d35a95b3e9e Update multidict from 4.3.1 to 4.4.2
ae177e457530115b751e43e6a7d05fb5dd954730 Update pytest from 3.8.0 to 3.8.1
a12661b07446fbe43202dd228f5a5e91b0f09a0f Update sphinx from 1.7.9 to 1.8.1
50e90ec35d1cb47c298b7dbf3952e02dd372c410 Merge pull request #238 from aio-libs/pyup-scheduled-update-2018-09-10
b23c3dc3e9c340c7122f752dac61d5124e32fd43 Update pytest from 3.7.2 to 3.8.0
699f3c98902c2d72b16567586594dc30ff7dff87 Update sphinx from 1.7.7 to 1.7.9
84a9a2b6afee5ec80a3ec255beff50a0af5fcf33 Merge pull request #232 from aio-libs/pyup-scheduled-update-2018-08-20
30cd946790f69a85efe307ffc980024f266a37b5 Update pytest from 3.7.1 to 3.7.2
16956da3d68798b55fdd86c7b53f8b490ca19a37 Update sphinx from 1.7.6 to 1.7.7
989642e25519c5eed6cc2ec43d76c9be48b16d62 Update CHANGES
3114d2e4845dc3705e4696c9af905a65ec3b141a URL: Add explicit_port instance property (#218)
ef965b7de489447e67526a9b4a2d51bafdeb5846 Allow failures on unstable pythons
0e9b288e10e0b41d01fddb3c5cc2c9d8a2d14678 tests: Drop some xfails and add info for the rest (#216)
525835369615c8c48abcba6be05841dd0fd1b6c6 URL::build(): Accept host-only URLs (#217)
e51c1df5492c3cd4c97a70677916d7eb605fdcf5 Fixed doc for URL.build (#229)
4ed5efbc8f7707019cbd87567ef3d66a71e17361 Merge pull request #230 from aio-libs/pyup-scheduled-update-2018-08-06
362b5c535ddede15c7ca960316081fce7ec31e3a Update pytest from 3.6.4 to 3.7.1
5aaa14f72ae2e717cf4ad5e3fa69f2cb2ae04c45 Update cython from 0.28.4 to 0.28.5
279d55f7641b430838138d7b871ffc9d981042b3 Merge pull request #227 from aio-libs/pyup-scheduled-update-2018-07-30
c1c26c8ffaf2ca023e89f6c56f5c5b9e5ff7b461 Update pytest from 3.6.3 to 3.6.4
6402a632ea5f04eb8f6b947d02311a91eed0da69 Add more verbose error message on type mismatch [ #226 ]
8d0c2651a3e84a301a1314ea2ef08caa12feaf27 more informative error message
1c64efcefc5281115d4e4e3a73caf3bc4b5cd3ad Merge pull request #225 from aio-libs/pyup-scheduled-update-2018-07-23
7fbd8f08f84c68829ff9b2b09c1723d591f296d7 Update mypy from 0.610 to 0.620
dc343aaf831027ef175ac03f04c525eab5b37ab8 Update sphinx from 1.7.5 to 1.7.6
9246fba1ad8c276eeb83996b3ba3607b382a0d56 test_normalize_path: Add tests for non-ASCII characters (#215)
f1cb2e06d934bbb0cdac483443eab249f19d6b78 Merge pull request #219 from behnam/travis-py37
23809c0a376b63841f15c44f2a9d8fcd3a6adca3 Enable Python 3.7 env in AppVeyor
bec05120a40b60b1c71cac352c6785f64d6ba959 Enable proper envs for 3.7+
7fef763e67931baaf9a60895c6a59a045c94b16d travis.yml: Update Python build versions
a3b3c2432009ab52f14ec438ee38ac44f67fe5d7 Replace \x usage for Unicode character escaping with \u (#214)
628ea7a4365b1f73b45f8a35883cc6796526675f Merge pull request #213 from aio-libs/pyup-scheduled-update-2018-07-09
a86fc3304988d5e29b2b4787300bdebb9a520e23 Update pytest from 3.6.2 to 3.6.3
1111b43bfe96365565bc2ac868561235da7a6dfa Update cython from 0.28.3 to 0.28.4
5c2f9e3f7a9ca61deb7481810058af6aee91cbe6 Merge pull request #212 from aio-libs/pyup-scheduled-update-2018-07-02
86a683bf8d80ac03da6269def1d91657a6b03b2c Update pytest from 3.6.1 to 3.6.2
60ab0ee6fa982f4ebded79652c2f4ab9dafa48e2 Update CHANGES
0255fd459b3120be659b76660fb094c3c24931f4 Query sequence int support (#208)
2d516ee8243be24004182f4489830e54562b8bca Update CHANGES
2679eda546f7a2b3544de605783d807dd587110a Query annotation bug fix (#207)
This list of changes was auto generated.</details>
Nothing published for this version
Nothing published for this version
Fix annotations for query parameter
Fix annotations for query parameter (#207)
An incoming query sequence can have int variables (the same as for Mapping type) (#208)
Add URL.explicit_port property (#218)
Give a friendlier error when port can't be converted to int (#168)
bool(URL()) now returns False (#272)
Drop Python 3.4 trove classifier
Changes ------------ * Fix annotations for build
build (#199)Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Fix annotations for cached_property
cached_property (#195)Accept str subclasses in URL constructor
str subclasses in URL constructor (#190)Changes ------------- * Fix Linux build
Pin minimal required Python to 3.5.3
The release officially supports python type hint annotations.
The release officially supports python type hint annotations.
Forbid inheritance, replace __init__ with __new__ (#171)
Support PEP-561 (provide type hinting marker) (#182)
Fixes a performance regression on URL.build call for relative URLs
Fixes a performance regression on URL.build call for relative URLs (#170)
Make pure Python quoter consistent with Cython version
Use fast path if quoted string does not need requoting
Use fast path if quoted string does not need requoting (#154)
Speed up quoting/unquoting by _Quoter and _Unquoter classes (#155)
Drop yarl.quote and yarl.unquote public functions (#155)
Add custom string writer, reuse static buffer if available (#157) Code is 50-80 times faster than Pure Python version (was 4-5 times faster)
Don't recode IP zone (#144)
Support encoded=True in yarl.URL.build() (#158)
Fix updating query with multiple keys (#160)
Fallback to IDNA 2003 if domain name is not IDNA 2008 compatible
Use IDNA 2008 for domain name processing
Fix raising TypeError by url.query_string() after url.with_query({}) (empty mapping) #141
TypeError by url.query_string() after
url.with_query({}) (empty mapping) #141Changes ------------- * Add raw_path_qs attribute
raw_path_qs attribute (#137)Restore strict parameter as no-op in quote / unquote
Restore strict parameter as no-op in quote / unquote
No new functionality but fix backward incompatibility with aiohttp 2.2:
No new functionality but fix backward incompatibility with aiohttp 2.2:
strict parameter as no-op for sake of compatibility with
aiohttp 2.2Fix "ValueError: Unallowed PCT %" when there's a "%" in the url
Drop strict mode (#123)
Fix "ValueError: Unallowed PCT %" when there's a "%" in the url (#124)
Support relative urls like '?key=value'
Document encoded parameter (#102)
Support relative urls like '?key=value' (#100)
Unsafe encoding for QS fixed. Encode ; char in value param (#104)
Process passwords without user names (#95)
Document encoded parameter (#102)
Support relative URLs like '?key=value' (#100)
Unsafe encoding for QS fixed. Encode ; character in value parameter (#104)
Process passwords without user names (#95)
Properly support paths without leading slash in URL.with_path()
Properly support paths without leading slash in URL.with_path() (#90)
Enable type annotation checks
Nothing published for this version
Clear query and fragment parts in .with_path() #85
Normalize path #86
Clear query and fragment parts in .with_path() #85
Prevent double URL args unquoting #83
Changes --------- * Unexpected hash behaviour #75
Unexpected compare behaviour #73
Unexpected compare behaviour #73
Do not quote or unquote + if not a query string. #74
Unexpected compare behavior (#73)
Do not quote or unquote + if not a query string. (#74)
Added URL.build class method #58
Added URL.build class method #58
Added path_qs attribute #42
## CHANGES - Do not quote ":" in path
Load from pickle without _cache #56
Revert backward incompatible change (BaseURL)
Fix BaseURL rich comparison support
* Use BaseURL
Use BaseURL
* Added BaseURL
Added BaseURL
## CHANGES - Remove debug print
## CHANGES - Do not lose tail chars #45
Allow to quote % in non strict mode #21
URL.update_path() methodURL.update_query() method #47Fix broken aiohttp: revert back quote / unquote.
Fix broken aiohttp: revert back quote / unquote.
Support more verbose error messages in .with_query() #24
.with_query() #24@ and : in path #32yarl.quote and yarl.unquote, these functions are
part of private APIAccept not only str but all classes inherited from str also
Accept not only str but all classes inherited from str also (#25)
The library now accepts int as value for kwargs/mapping in .with_query()
The library now accepts int as value for kwargs/mapping in .with_query()
Also the release fixes a subtle bug with comparison urls with query part but empty path part.
Explicitly use UTF8 encoding in setup.py #20
Don't use class:typing.NamedTuple fields but indexes on URL construction
Don't use typing.NamedTuple fields but indexes on URL construction
* Inline _encode class method
Inline _encode class method
Make URL construction faster by removing extra classmethod calls
Make URL construction faster by removing extra classmethod calls
Add Cython optimization for quoting/unquoting
Add Cython optimization for quoting/unquoting
Provide binary wheels
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →