Are you happy with your logging solution? Would you help us out by taking a 30-second survey? Click here


🌐 URL parsing and manipulation made easy.

Subscribe to updates I use furl

Statistics on furl

Number of watchers on Github 1235
Number of open issues 0
Average time to close an issue 21 days
Main language Python
Average time to merge a PR 4 days
Open pull requests 4+
Closed pull requests 20+
Last commit over 1 year ago
Repo Created almost 8 years ago
Repo Last Updated over 1 year ago
Size 644 KB
Organization / Authorgruns
Latest Releasev1.0.1
Page Updated
Do you use furl? Leave a review!
View furl activity
View on github
Fresh, new opensource launches 🚀🚀🚀
Trendy new open source projects in your inbox! View examples

Subscribe to our mailing list

Evaluating furl for your project? Score Explanation
Commits Score (?)
Issues & PR Score (?)


furl is a small Python library that makes parsing and manipulating URLs easy.

Python's standard urllib and urlparse modules provide a number of URL\ related functions, but using these functions to perform common URL\ operations proves tedious. Furl makes parsing and manipulating URLs\ easy.

Furl is well tested, Unlicensed in the public domain, and supports\ Python 2, Python 3, PyPy2, and PyPy3.

Code time: Query arguments are easy. Really easy.

>>> from furl import furl
>>> f = furl('')
>>> f.args['three'] = '3'
>>> del f.args['one']
>>> f.url

Or use furl's inline modification methods.

>>> furl('').add({'two':'2'}).url

>>> furl('').set({'three':'3'}).url

>>> furl('').remove(['one']).url

Encoding is handled for you. Unicode, too.

>>> f = furl('')
>>> f.path = 'some encoding here'
>>> f.args['and some encoding'] = 'here, too'
>>> f.url
>>> f.set(host=u'.', path=u'', query=u'=')
>>> f.url

Fragments also have a path and a query.

>>> f = furl('')
>>> f.fragment.path.segments = ['two', 'directories']
>>> f.fragment.args = {'one': 'argument'}
>>> f.url

Or get fancy.

>>> f = furl('')
>>> f.copy().remove(path=True).set(host='')
...  .join('/pumps.html').add(fragment_path='party').asdict()
{ 'url': '',
  'scheme': 'http',
  'username': None,
  'password': None,
  'host': '',
  'host_encoded': '',
  'port': 80,
  'netloc': '',
  'origin': '',
  'path': { 'encoded': '/pumps.html',
            'isabsolute': True,
            'isdir': False,
            'isfile': True,
            'segments': ['pumps.html']},
  'query': { 'encoded': '',
             'params': []},
  'fragment': { 'encoded': 'party',
                'path': { 'encoded': 'party',
                          'isabsolute': False,
                          'isdir': False,
                          'isfile': True,
                          'segments': ['party']},
                'query': { 'encoded': '',
                           'params': []},
                'separator': True}, }


See more furl magic and examples in furl's API document,


Installing furl with pip is easy.

$ pip install furl
furl open issues Ask a question     (View All Issues)
  • about 4 years Existing path encoding is modified
furl open pull requests (View All Pulls)
  • comparison_enchancements: Allow comparison of Path objects with other Path objects and strings. Also fixes a bug that would raise an error when comparing a furl instance with a string.
  • Syntax corrected
  • fix get scheme error
  • Test codestyle
furl questions on Stackoverflow (View All Questions)
  • Base URI while using Furl
  • Pay U IOS SDK 3.2 Seamless Integration - Mandatory Parameter FURL missing
  • Convert Dynamic URLs in fURL via .htaccess file
  • Python furl library - Is there a way to add a parameter to a url without url encoding it?
furl list of languages used
furl latest release notes
v1.0.1 Furl v1.0.1

Added: Add dictionary representations of Path, Query, Fragment, and furl objects via an asdict() method.

v1.0.0 Furl v1.0.0

Added: Test against Python 3.6. Changed: Bumped the version number to v1.0 to signify that furl is a mature and stable library. Furl has been marked Production/Stable in for a long time anyhow -- it's high time for the version number to catch up.

v0.5.7 Furl v0.5.7

Fixed: Only percent-decode percent-encoded path strings once, not twice.

Other projects in Python