furl
URL manipulation made simple.
What it is and what it does
furl is a lightweight Python library that wraps URL parsing and manipulation into an intuitive object model. Instead of juggling urllib's functions, you work with a furl object whose attributes (scheme, host, path, args, fragment) map directly to URL components. Path segments and query arguments are stored decoded internally, so you manipulate them as plain strings; encoding happens automatically when you serialize back to a URL string. The library handles Unicode, percent-encoding, and fragment paths with their own query strings.
It's designed for the common case: you have a URL, you want to add or remove query parameters, change the path, or inspect components—and you want to do it without wrestling with string parsing. furl supports Python 3 and PyPy3, has no external C dependencies, and carries no known security vulnerabilities.
Use it for:
- Building or modifying URLs programmatically in web scrapers or API clients without manual string concatenation.
- Adding, removing, or updating query parameters on an existing URL while preserving other components.
- Parsing URLs to extract and inspect individual components (host, path segments, query args, fragment).
- Handling URL encoding and Unicode automatically when constructing URLs with non-ASCII characters or special characters.
- Working with URL fragments that have their own path and query structure, common in single-page applications.
Worth the install?
AI-flagged interpretation of the facts on this page — verify before relying
furl parses and manipulates URLs by providing a simple object-oriented interface to URL components like scheme, host, path, query arguments, and fragments.
Yes. furl is production-stable, actively maintained, has minimal dependencies, carries no known vulnerabilities, and solves a genuine friction point in URL manipulation. Use it when you need to programmatically build or modify URLs more often than you'd use raw urllib—it will save you string-handling boilerplate and reduce bugs from manual encoding.
Install
furl on PyPI
pip
pip install furluv
uv add furlpoetry
poetry add furlInstalling furl
Before you install
Low install friction with only two runtime dependencies (six and orderedmultidict). Actively maintained with recent releases; last commit in February 2026 and latest release in March 2025. Repository shows 2811 stars and is not archived.
License in practice
Released under the Unlicense, placing it in the public domain with permissive treatment. You can use, modify, and distribute furl with minimal legal restrictions.
Quickstart
from furl import furl
f = furl('http://www.google.com/?one=1&two=2')
f /= 'path'
del f.args['one']
f.args['three'] = '3'
print(f.url) # 'http://www.google.com/path?two=2&three=3'
Verify before relying
- Whether the package is actively seeking a lead contributor/maintainer (mentioned in description but unclear if this affects stability)
- Current test coverage and test suite maturity beyond 'well tested' claim
Package facts
| License | Unlicense (permissive) |
| Python support | not specified |
| Install friction | low — pure-Python wheel |
| Runtime dependencies | 2 — six, orderedmultidict |
| Maintenance | actively maintained — 523 days since the last release |
| Last repo commit | |
| First released | |
| Downloads | 6,009,882/month — #1,985 on PyPI (30-day window, as of 2026-08-14) |
| Known vulnerabilities | none known (OSV.dev, checked 2026-08-14) |
Evidence: furl-2.1.4-py2.py3-none-any.whl
Tags
More Libraries packages
urllib3 is an HTTP client library that provides…
permissive · top 100 on PyPI
requestsRequests is a Python HTTP library that…
permissive · top 100 on PyPI
pluggyPluggy provides a plugin system that lets you…
permissive · top 100 on PyPI
python-dateutilProvides parsing, arithmetic, and recurrence…
permissive · top 100 on PyPI
sixSix provides utility functions to write Python…
permissive · top 100 on PyPI
pytestpytest is a testing framework that lets you…
permissive · top 100 on PyPI
query-stringParses URL query strings and fragments into…
permissive · top 15,000 on PyPI
urlpathURLPath extends pathlib.PurePath to treat URLs…
permissive · top 15,000 on PyPI
yarlyarl provides an immutable URL class for…
permissive · top 100 on PyPI
pyfaup-rsParses URLs into components (scheme, host,…
copyleft · top 15,000 on PyPI
urlpyurlpy parses, normalizes, and compares URLs…
permissive · top 15,000 on PyPI
url-normalizeStandardizes URLs to a canonical form by…
permissive · top 1,000 on PyPI
purlProvides an immutable, chainable URL class for…
permissive · top 15,000 on PyPI
pyuriPyURI parses, constructs, and manipulates URIs…
permissive · top 15,000 on PyPI
packageurl-pythonParses and builds Package URLs (purls) —…
permissive · top 1,000 on PyPI
giturlparseParses and rewrites Git repository URLs from…
permissive · top 1,000 on PyPI