Skip to content

Releases: un33k/python-slugify

9.1.2

Choose a tag to compare

@un33k un33k released this 27 Sep 15:56

Performance improvement with unchanged output under both algorithms. Legacy output is unchanged and remains the permanent default.

  • Skip the transliteration backend for ASCII-only input under both algorithms, avoiding the ~3 MB text-unidecode table import for the common ASCII case. Output is unchanged, including the frozen legacy differential (Rafael Borja, #201).

Full Changelog: v9.1.1...v9.1.2

πŸš€ Generated with Dojo ⛩️

9.1.1

Choose a tag to compare

@un33k un33k released this 22 Sep 15:54

Bug fix in the modern algorithm. Legacy output is unchanged and remains the permanent default.

  • Modern mode only: avoid emitting a trailing separator when a hard cut truncates through repeated post-replacement delimiters, keeping the delimiter run with the next word that fits. Legacy output and public smart_truncate are unchanged (ζ›Ύζ₯šη¬‘, #200).

Full Changelog: v9.1.0...v9.1.1

πŸš€ Generated with Dojo ⛩️

9.1.0

Choose a tag to compare

@un33k un33k released this 18 Sep 22:19

Modern-algorithm improvements and fixes. Legacy output is unchanged and remains the permanent default.

  • Modern mode only: decode uppercase &#X..; hexadecimal references as HTML allows, in addition to lowercase &#x..; (Rupayon Haldar, #195).
  • Modern mode only: preserve post-replacement output when the whole slug already fits max_length, so intentional repeated/trailing delimiters are not collapsed at the length limit. Public smart_truncate is unchanged (emme1t, #193).
  • Fix add_uppercase_char to apply insertions atomically, leaving the input list unchanged if iteration fails. Built-in transliteration tables are unaffected (Cristian Ramirez, #194).
  • Modern mode only: validate argument types up front, raising 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 ⛩️

9.0.0

Choose a tag to compare

@un33k un33k released this 09 Sep 15:12
f635127

Highlights

  • Preserve legacy slug output by default while adding explicit algorithm="modern" opt-in behavior.
  • Add explicit transliteration backend and replacement-stage controls, with matching CLI options.
  • Add opt-in AnyASCII support while preserving existing dependency and backend-selection behavior.
  • Fix CLI regex-pattern forwarding and modern-mode handling for entities, iterables, separators, and delimiters.
  • Add Python 3.14 support, packaging modernization, expanded compatibility checks, and migration guidance.

See the changelog and migration guide for details.

PyPI: https://pypi.org/project/python-slugify/9.0.0/

πŸš€ Created with Dojo ⛩️