slugany¶
Multi-language slugify with zero dependencies. A simple, MIT-licensed alternative
to python-slugify without GPL dependencies.
Installation¶
Requires Python 3.11 or later. No runtime dependencies.
Quickstart¶
from slugany import slugify
slugify("¡Hola Mundo!") # "hola-mundo"
slugify("Café résumé naïve") # "cafe-resume-naive"
slugify("Ñandú coração") # "nandu-coracao"
slugify("Über Straße", lang="de") # "ueber-strasse"
Features¶
- Zero deps — no GPL, no text-unidecode, no UnicodeData beyond the stdlib
- Multi-language — built-in tables for Spanish, Portuguese, German, French, and Italian
- Confusable deconfusion — Cyrillic and Greek homoglyphs mapped to Latin via
deconfuse() - Emoji modes —
strip,text, orkeep - Smart punctuation — normalizes curly quotes, em-dashes, NBSP, zero-width characters, bullets
- Case styles — kebab, snake, camel, pascal, dot, train, filename
- CSS-safe output — valid CSS identifiers even when the slug starts with a digit
- CLI included —
slugany "text"from the terminal with auto-stdin - Slugifier — reusable, preconfigured slugifier callable
- lru_cache — results cached automatically (maxsize=512)
- Idempotent —
slugify(slugify(x)) == slugify(x)guaranteed - Fully typed — type hints on every public API,
py.typedmarker included - ~550 lines core — auditable, no bloat