Furl is a small Python 3 (and PyPy3) library for parsing and modifying URLs. It provides an object-based way to access and change URL components like the path, query parameters, and fragments, while handling encoding for you.
Project status
- Maintenance status: The repo shows an upstream push on 2026-02-22, suggesting ongoing development, but the latest documented published updates in the provided history are v2.1.4 on 2025-03-09, so maintenance looks active but with infrequent published update tags.
- Apparent cadence: Based on the provided update history, versioned updates are spaced far apart (notably 2021 to 2025, then no newer tagged updates shown), while upstream commits continue into 2026, indicating a slow release cadence.
AI summary generated
Recent updates
v2.1.4
furl v2.1.4 primarily updates the project to drop support for Python versions earlier than 3.8 (including Python 2). The diff also includes CI/test infrastructure updates and a notable behavioral change around how query strings handle ';' as a delimiter.
BreakingFeaturesv2.1.2
Furl v2.1.2 primarily updates behavior around Python URL joining semantics and adjusts query delimiter handling. It also updates the project CI and test environment coverage by dropping EOL Python 3.4 and 3.5 and adding newer Python versions.
Breakingv2.1.1
Furl v2.1.1 updates URL manipulation APIs, primarily around removing and setting URL components, and it fixes how metadata variables are exported. It adds new parameters to furl.remove, normalizes argument ordering across furl.add, furl.set, and furl.remove, and allows assigning furl.origin = None.
BreakingFeaturesv2.1.0
Furl v2.1.0 introduces new control over query percent-encoding via `dont_quote` on `Query.encode()` and `query_dont_quote` on `furl.tostr()`. It also moves package metadata into a dedicated `furl/__version__.py`, updates `orderedmultidict` to address a deprecation warning, and fixes URL encoding consistency for `/` across `quote_plus` modes.
BreakingFeaturesv2.0.0
Furl v2.0.0 introduces support for constructing and modifying URLs using keyword arguments for nearly all URL components. It also updates slash-operator behavior so that `/` returns a new instance rather than mutating the original, aligning with pathlib semantics. Python 2.6 support was removed.
BreakingFeatures1.2.1
Furl v1.2.1 is a small maintenance release focused on fixing how URL joining behaves when the joined reference lacks an authority or netloc, aiming for consistency with urllib.parse.urljoin(). The diff also adds CI/test coverage for Python 3.7 and includes minor README/changelog updates.
v1.2
Furl v1.2 introduces a division operator (/) to append path segments, and it tightens query encoding by percent-encoding more characters in query key=value pairs. It also bumps the orderedmultidict dependency to v1.0 and switches style checks from pycodestyle to flake8.
BreakingFeaturesv1.1
Furl v1.1 updates how query strings are parsed and re-encoded to better preserve the original, including unusual cases like empty parameters and equal signs. In particular, it changes query value encoding rules depending on whether the query key is empty, and it preserves missing key/value separators in a way that affects how values are represented.
v1.0.2
Release v1.0.2 of furl focuses on URL scheme handling improvements. It adds a new public strip_scheme() helper, makes get_scheme() and set_scheme() public, and improves support for schemes that do not use an authority/netloc (such as mailto). It also restores the furl.url setter and drops Python 3.3 support.
BreakingFeaturesv1.0.1
Release v1.0.1 adds dictionary serialization support for furl components. Specifically, it introduces an asdict() method on Path, Query, Fragment, and the top-level furl object, and updates docs and tests accordingly.
Features