Release history and notes ************************* Sequence based identifiers are used for versioning (schema follows below): major.minor[.revision] * It's always safe to upgrade within the same minor version (for example, from 0.3 to 0.3.4). * Minor version changes might be backwards incompatible. Read the release notes carefully before upgrading (for example, when upgrading from 0.3.4 to 0.4). * All backwards incompatible changes are mentioned in this document. 0.13.2 ====== 2026-03-06 * Widen protol ranges and improve protocol matching in general. * Clean up. * Minor documentation fixes. * Tested against Python 3.14 and 3.15. 0.13.1 ====== 2025-05-20 * Tested against Python 3.13. * Tested against Python 3.12. * Add documentation tests. * Updated bundled tld names. * Updated some tests to reflect changes in tld names. * Fixes in docs. * Merge *pytest*, *mypy* and *coverage* configs into *pyproject.toml*. * Drop Python 3.7 and 3.8 support. Minimum required version now is Python 3.9. 0.13 ==== 2023-02-28 * Drop Python 2.7, 3.5 and 3.6 support. Minimum required version now is Python 3.7. 0.12.7 ====== 2023-02-01 * Make sure to fail silently on bad URL patterns. * Tested against Python 3.11. * Tested against Python 3.10. * Updated bundled tld names. 0.12.6 ====== 2021-06-05 * Move "Registry" class from "tld.registry" to "tld.base". * Reformat code using "black". * Log information on updated resources of the "update_tld_names". 0.12.5 ====== 2021-01-11 Note: Release dedicated to defenders of Armenia and Artsakh (Nagorno Karabakh) and all the victims of Turkish and Azerbaijani aggression. * Fixed lower-cased *parsed_url* attributes (*SplitResult*) when getting tld as object (*as_object=True*). 0.12.4 ====== 2021-01-02 * Tested against Python 3.9. 0.12.3 ====== 2020-11-26 * Separate parsers for (a) public and private and (b) public only domains. This fixes a bug. If you want an old behaviour: The following code would raise exception in past. from tld import get_tld get_tld( 'http://silly.cc.ua', search_private=False ) Now it would return *ua*. get_tld( 'http://silly.cc.ua', search_private=False ) If you want old behavior, do as follows: from tld.utils import MozillaTLDSourceParser get_tld( 'http://silly.cc.ua', search_private=False, parser_class=MozillaTLDSourceParser ) Same goes for "get_fld", "process_url", "parse_tld" and "is_tld" functions. 0.12.2 ====== 2020-05-20 * Add mozilla license to dist. * Fix MyPy issues. 0.12.1 ====== 2020-04-25 Note: In commemoration of Armenian Genocide. * Correctly handling domain names ending with dot(s). 0.12 ==== 2020-04-19 * Use Public Suffix list instead of deprecated Mozilla's MXR. 0.11.11 ======= 2020-03-10 * Minor speed-ups, reduce memory usage. 0.11.10 ======= 2020-02-05 * Python 2.7 and 3.5 fixes. 0.11.9 ====== 2019-12-16 * Adding test TLDs list to the package. 0.11.8 ====== 2019-12-13 * Minor fixes in setup.py. 0.11.7 ====== 2019-12-13 Note: There have been no code changes since 0.11.2. The only change is that support for Python 2.7 and 3.5 has been added. * Added support for Python 2.7. 0.11.6 ====== 2019-12-12 * Targeted releases for all supported Python versions. 0.11.5 ====== 2019-12-12 * Targeted releases for all supported Python versions. 0.11.4 ====== 2019-12-12 * Changed order of the releases (Python 3.6 and up come first, then Python 3.5). * Make all distributions except Python 3.5 universal. 0.11.3 ====== 2019-12-12 * Added missing resources to the Python 3.5 release. 0.11.2 ====== 2019-12-12 * Bring back Python 3.5 support. 0.11.1 ====== 2019-12-11 * Minor speed ups. * More on adding typing. 0.11 ==== 2019-12-09 Note: Since introduction of parser classes, usage of "NAMES_SOURCE_URL" and "NAMES_LOCAL_PATH" of the "tld.conf" module is deprecated. Also, "tld_names_local_path" and "tld_names_source_url" arguments are deprecated as well. If you want to customise things, implement your own parser (inherit from "BaseTLDSourceParser"). * Drop support for Python versions prior to 3.6. * Clean-up dependencies. * Introduce parsers. * Drop "tld_names_source_url" and "tld_names_local_path" introduced in the previous release. * Minor speed-ups (including tests). 0.10 ==== 2019-11-27 Note: This is the last release to support Python 2. * Make it possible to provide a custom path to the TLD names file. * Make it possible to free up some resources occupied due to loading custom tld names by calling the "reset_tld_names" function with "tld_names_local_path" parameter. 0.9.8 ===== 2019-11-15 * Fix for occasional issue when some domains are not correctly recognised. 0.9.7 ===== 2019-10-30 Note: This release is dedicated to my newborn daughter. Happy birthday, my dear Ani. * Handling urls that are only a TLD. * Accepts already splitted URLs. * Tested against Python 3.8. 0.9.6 ===== 2019-09-12 * Fix for update-tld-names returns a non-zero exit code on success (introduced with optimisations in 0.9.4). * Minor tests improvements. 0.9.5 ===== 2019-09-11 * Tests improvements. 0.9.4 ===== 2019-09-11 * Optimisations in setup.py, tests and console scripts. * Skip testing the update-tld-names functionality if no internet is available. 0.9.3 ===== 2019-04-05 * Added *is_tld* function. * Docs updated. * Upgrade test suite. 0.9.2 ===== 2019-01-10 * Fix an issue causing certain punycode TLDs to be deemed invalid. * Tested against Python 3.7. * Added tests for commands. * Dropped Python 2.6 support. * TLD source updated to the latest version. 0.9.1 ===== 2018-07-09 * Correctly handling nested TLDs. 0.9 === 2018-06-14 Note: This release contains backward incompatible changes. You should update your code.The "active_only" option has been removed from "get_tld", "get_fld" and "parse_url" functions. Update your code accordingly. * Removed "active_only" option from "get_tld", "get_fld" and "parse_url" functions. * Correctly handling exceptions (!) in the original TLD list. * Fixes in documentation. * Added "parse_tld" function. * Fixes the "python setup.py test" command. 0.8 === 2018-06-13 Note: This release contains backward incompatible changes. You should update your code.Old "get_tld" functionality is moved to "get_fld" (first-level domain definition). The "as_object" argument (False by default) has been deprecated for "get_fld". res = get_tld("http://www.google.co.uk", as_object=True) **Old behaviour** In: res.domain Out: 'google' In: res.extension Out: 'co.uk' In: res.subdomain Out: 'www' In: res.suffix Out: 'co.uk' In: res.tld Out: 'google.co.uk' **New behaviour** In: res.fld Out: 'google.co.uk' In: res.tld Out: 'co.uk' In: res.domain Out: 'google' In: res.subdomain Out: 'www' When used without "as_object" it returns "co.uk".**Recap**If you have been happily using old version of "get_tld" function without "as_object" argument set to "True", you might want to replace "get_tld" import with "get_fld" import: # Old from tld import get_tld get_tld('http://google.co.uk') # New from tld import get_fld get_fld('http://google.co.uk') * Move to a Trie to match TLDs. This brings a speed up of 15-20%. * It's now possible to search in public, private or all suffixes (old behaviour). Use "search_public" and "search_private" arguments accordingly. By default (to support old behavior), both are set to "True". * Correct TLD definitions. * Domains like ******.xn--fiqs8s* are now recognized as well. * Due to usage of "urlsplit" instead of "urlparse", the initial list of TLDs is assembled quicker (a speed-up of 15-20%). * Docs/ directory is included in source distribution tarball. * More tests. 0.7.10 ====== 2018-04-07 * The "fix_protocol" argument respects protocol relative URLs. * Change year in the license. * Improved docstrings. * TLD source updated to the latest version. 0.7.9 ===== 2017-05-02 * Added base path override for local .dat file. * *python setup.py test* can used to execute the tests 0.7.8 ===== 2017-02-19 * Fix relative import in non-package for update-tls-names script. #15 * "get_tld" got a new argument "fix_protocol", which fixes the missing protocol, having prepended "https" if missing or incorrect. 0.7.7 ===== 2017-02-09 * Tested against Python 3.5, 3.6 and PyPy. * pep8 fixes. * removed deprecated *tld.update* module. Use "update-tld-names" command instead. 0.7.6 ===== 2016-01-23 * Minor fixes. 0.7.5 ===== 2015-11-22 * Minor fixes. * Updated tld names file to the latest version. 0.7.4 ===== 2015-09-24 * Exposed TLD initialization as "get_tld_names". 0.7.3 ===== 2015-07-18 * Support for wheel packages. * Fixed failure on some unicode domains. * TLD source updated to the latest version. * Documentation updated. 0.7.2 ===== 2014-09-28 * Minor fixes. 0.7.1 ===== 2014-09-23 * Force lower case of the URL for correct search. 0.7 === 2014-08-14 * Making it possible to obtain object instead of just extracting the TLD by setting the "as_object" argument of "get_tld" function to True. 0.6.4 ===== 2014-05-21 * Softened dependencies and lowered the "six" package version requirement to 1.4.0. * Documentation improvements. 0.6.3 ===== 2013-12-05 * Speed up search 0.6.2 ===== 2013-12-03 * Fix for URLs with a port not handled correctly. * Adding licenses. 0.6.1 ===== 2013-09-15 * Minor fixes. * Credits added. 0.6 === 2013-09-12 * Fixes for Python 3 (Windows encoding). 0.5 === 2013-09-13 * Python 3 support added. 0.4 === 2013-08-03 * Tiny code improvements. * Tests added.