NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #357 most downloaded on PyPI
A Python slugify application that also handles Unicode
Last release 7 days ago
27 Sep 2026
Ships unpredictably
gaps range from 8 days to 2.6 years
Nearly every release is documented
notes for 51 of 51 stable releases
Nothing withdrawn
no release was ever pulled
14 years old
51 releases · first in 2012
Performance improvement with unchanged output under both algorithms. Legacy output is unchanged and remains the permanent default.
Performance improvement with unchanged output under both algorithms. Legacy output is unchanged and remains the permanent default.
Full Changelog: v9.1.1...v9.1.2
🚀 Generated with Dojo ⛩️
Bug fix in the modern algorithm. Legacy output is unchanged and remains the permanent default.
Bug fix in the modern algorithm. Legacy output is unchanged and remains the permanent default.
smart_truncate are unchanged (曾楚笑, #200).Full Changelog: v9.1.0...v9.1.1
🚀 Generated with Dojo ⛩️
One column per quarter.
Modern-algorithm improvements and fixes. Legacy output is unchanged and remains the permanent default.
Modern-algorithm improvements and fixes. Legacy output is unchanged and remains the permanent default.
&#X..; hexadecimal references as HTML allows, in addition to lowercase &#x..; (Rupayon Haldar, #195).max_length, so intentional repeated/trailing delimiters are not collapsed at the length limit. Public smart_truncate is unchanged (emme1t, #193).add_uppercase_char to apply insertions atomically, leaving the input list unchanged if iteration fails. Built-in transliteration tables are unaffected (Cristian Ramirez, #194).TypeError for a bool/non-int max_length or a non-str separator. Legacy behavior is unchanged (Jon Bailey, #196).Internal: the legacy pipeline is now frozen in slugify/_legacy.py with the public slugify() dispatching by algorithm; tests reorganized under tests/.
Full Changelog: v9.0.0...v9.1.0
🚀 Generated with Dojo ⛩️
&#X..; hexadecimal references as HTML allows, in addition to lowercase &#x..;. Legacy output is unchanged (Rupayon Haldar, #195).max_length, so intentional repeated/trailing delimiters are not collapsed at the length limit. Public smart_truncate is unchanged (emme1t, #193).add_uppercase_char to apply insertions atomically, leaving the input list unchanged if iteration fails. Built-in transliteration tables are unaffected (Cristian Ramirez, #194).TypeError for a bool/non-int max_length (bool is an int subclass) or a non-str separator. Legacy behavior is unchanged and still treats max_length=True as its historical single-character truncation (Jon Bailey, #196).Preserve legacy slug output by default while adding explicit algorithm="modern" opt-in behavior.
algorithm="modern" opt-in behavior.See the changelog and migration guide for details.
PyPI: https://pypi.org/project/python-slugify/9.0.0/
🚀 Created with Dojo ⛩️
Add keyword-only algorithm='legacy' (permanent default) and explicit algorithm='modern' opt-in, plus CLI --algorithm. Preserve historical default entity ordering, numeric handling, iterator consumption, separator truncation, and public smart_truncate behavior.
Preserve legacy auto backend selection and two-pass replacement defaults; add explicit backend and replacement_stage keyword-only options and matching CLI flags.
Add opt-in AnyASCII extra without removing or changing the base text-unidecode dependency.
Forward CLI --regex-pattern (Jacobo de Vera, #176; report by @peter-bloomfield, #175).
Modern mode only: decode entities before transliteration; handle invalid numeric references per match, including surrogate references (#178, #181, #187).
Modern mode only: materialize replacement rules and stopword iterables consistently; preserve bytes/bytearray UTF-8 input with clear rejection of unsupported types (#183, #190).
Modern mode only: budget internal tokens using emitted separator widths, support empty separators, and preserve literal word characters that match delimiters. Public smart_truncate remains unchanged (#47, #185, #186).
Add regression coverage for whitespace, ordinals, backend-specific output, replacement stages, CLI execution, and installed artifacts.
Move package metadata to pyproject.toml, retain the typed marker and source tests, and remove the unsafe publish/upload/tag shortcut.
Document output changes, backend license distinctions, compatibility limits, and migration precautions in docs/release-9/migration.md.
Support Python 3.14.
Drop support for Python 3.9 and lower.
Use tox for local test runs and in CI.
Test the project against both unidecode and text_unidecode.
Fix type annotation issues identified by mypy.
Run CI against pull requests.
Fix package build warnings.
Merge branch 'master' into ci
Merge branch 'master' into ci
Drop compatibility for unsupported Python Version (8.0.3)
Co-authored-by: Viicos 65306057+Viicos@users.noreply.github.com
pre normalize, upversion node support in ci/cd, more test
Added license notice to readme (@C-nit - thx)
By default, prefer unidecode if installed
By default, prefer unidecode if installed
drop py 3.6, add py 3.11, upversion
drop py 3.6, add py 3.11, upversion
- Reintroduce the cli options
remove type hinting
remove type hinting (#113)
initial commit to allow unicode
initial commit to allow unicode
update version and changelog
add the flag to the CLI
update README.md
allow_unicode flag to allow unicode characters in the slugregex: allow=>disallow
regex: allow=>disallow
Remove tox, as we run the test on github action, the end users can refer to those test
- Enable twine publish
Drop support for python 2.7, 3.5 & tox, clean up
Add support for Py 3.9 - added tox (@jon-betts - Thx)
Last version with official python 2.7 and <= 3.5 support
official python 2.7 and <= 3.5 supportDrop support from 2.6, & < 3.4.5
- Fixed encoding in special.py
Add test for pre-translation (e.g German Umlaut)
Now supporting text-unidecode>=1.3
- Remove unicode chars from file
- Add official support of Py 3.7
- Add test.py to manifest
Promote text-unidecode as the primary decoding package
Add replacements option e.g. [['|', 'or'], ['%', 'percent'], ['-', '_']] (@andriyor)
Fix alternative dependency installation
Add support for case sensitive slugs (@s-m-e)
Add support for using text-unidecode (@bolkedebruin)
Remove build artifacts during packaging
Republish - possible corrupt 1.2.2 build
Add regex_pattern option. (@vrbaskiz)
regex_pattern option. (@vrbaskiz)Including certain files (e.g. license.md) in sdists via MANIFEST.in (@proinsias)
Backward incompatible change: (@fabiocaccamo)
Backward incompatible change: (@fabiocaccamo)
= 1.2.0 -- ('C'est déjà l'été.' -> "c-est-deja-l-ete")
Add more test cases, dropped official support for python 3.2
Bugfix:
official support for python 3.2Bugfix: - Handle unichar in python 3.x
Bugfix:
Ability to remove stopwords from string
Enhancement:
stopwords from stringEnhancement: - A new PyPI release
Enhancement:
Added option to save word order
Enhancement:
Enhancement: - Added more test - Added test for python 3.4
Enhancement:
Enhancement: - Enable console_scripts
Enhancement:
Added console_scripts (@ekamil)
Enhancement:
Update ReadME, ChangeLog, License files
Enhancement:
Enhancement: - Update for smart_truncate
Enhancement:
Added Python 3.2 and 3.3 support (work by: arthurdarcet@github)
Features:
Added option to choose non-dash separators (request by: danilodimoia@github)
Features:
Added the ability to truncate slugs (request by: juanriaza@github)
Features:
Enhancement: - Incremental update
Enhancement:
- Initial version
Your coding agent can read these notes before it upgrades. Set up the MCP server →