pypi / yarl
yarl
What changed in yarl 1, from its official release notes, upgrade guides and advisories. Sources checked 2026-10-21.
7 breaking1 new APIs and options1 performance3 fixes and other
See which of these apply to your code, ranked, in your agent:
npx @unstale/cli inityarl 112 changes
Breaking changes 7
The pure Python quoter now rejects non-ASCII safe and protected characters when created, matching the C extension.
C and pure Python quoting implementations now reject percent signs in safe or protected when requoting, and spaces in safe or protected for query strings, keeping their behavior consistent.
The URL constructor and builder APIs now reject Unicode default-ignorable and format code points in hosts when IDNA normalization could change the host.
URL.build and URL.with_host now reject hosts that expand to /, ? or # under IDNA normalization.
When validate_host=True, IPv6 zone IDs now reject ASCII control characters and the empty string.
URL-building APIs now percent-encode a scheme-shaped leading colon in a relative path so its serialized form cannot be parsed as an absolute or executable-scheme URL.
Host validation now rejects Unicode percent characters that NFKC-normalize to a literal percent sign.
New APIs and options 1
Added a faster replacement for urllib.parse.parse_qsl with keep_blank_values=True that also accepts max_fields and encoding.
Performance 1
Improved C and pure Python unquoter performance, especially for long strings and strings with many percent-encoded characters.
Fixes and other changes 3
Fixed query parsing to stop returning empty fields and preserve invalid percent-encoded UTF-8; behavior again matches urllib.parse.parse_qsl. Related query methods also no longer double encode those escapes.
The Cython quoting backend now drops lone surrogates consistently with the pure-Python backend and preserves percent escapes when a surrogate falls within one.
IPv6 Zone ID URLs now expose the decoded % separator in host instead of %25.