Unidecode
ASCII transliterations of Unicode text
Install
unidecode on PyPI
pip
pip install unidecodeuv
uv add unidecodepoetry
poetry add unidecodePackage facts
| License | GPL (copyleft) |
| Python support | supports the current Python release (>=3.7) |
| Install friction | low — pure-Python wheel |
| Runtime dependencies | none |
| Maintenance | aging — 476 days since the last release |
| First released | |
| Popularity | one of the top 1,000 most-downloaded packages on PyPI (30-day window, as of 2026-08-13) |
| Known vulnerabilities | none known (OSV.dev, checked 2026-08-13) |
Evidence: Unidecode-1.4.0-py3-none-any.whl
About Unidecode
from the package's own PyPI description — quoted content, verbatim
Unidecode, lossy ASCII transliterations of Unicode text
It often happens that you have text data in Unicode, but you need to represent it in ASCII. For example when integrating with legacy code that doesn't support Unicode, or for ease of entry of non-Roman names on a US keyboard, or when constructing ASCII machine identifiers from human-readable Unicode strings that should still be somewhat intelligible. A popular example of this is when making an URL slug from an article title.
Unidecode is not a replacement for fully supporting Unicode for strings in your program. There are a number of caveats that come with its use, especially when its output is directly visible to users. Please read the rest of this README before using Unidecode in your project.
In most of examples listed above you could represent Unicode characters as
??? or \\15BA\\15A0\\1610, to mention two extreme cases. But that's
nearly useless to someone who actually wants to read what the text says.
What Unidecode provides is a middle road: the function unidecode() takes
Unicode data and tries to represent it in ASCII characters (i.e.,...
AI interpretation — verify before relying
AI-generated interpretation of the package facts above; every digit, version, license, or vulnerability id it cites is grounded in the facts already shown on this page
Unidecode converts Unicode text to ASCII by transliterating non-Latin characters into their closest ASCII equivalents, useful for creating URL slugs, legacy system integration, and keyboard-friendly identifiers.
Installation is straightforward with no runtime dependencies and a pure-Python wheel distribution. The package is aging (476 days since last release) but remains actively maintained and widely used in the top 1000 PyPI packages.
Unidecode is licensed under GPL (copyleft), which requires that any derivative work or software linking it must also be released under a compatible open-source license. This may restrict use in proprietary applications.
Usage
pip install unidecode
from unidecode import unidecode
result = unidecode('kožušček')
print(result) # Output: 'kozuscek'
Requires Python 3.7 or later with a "wide" Unicode build (UCS-4); narrow builds do not support characters outside the Basic Multilingual Plane.
Verdict: Unidecode is a mature, dependency-free library well-suited for ASCII transliteration tasks, but its GPL copyleft license limits use in proprietary software. The aging maintenance status and lack of language-specific transliteration should be weighed against its proven stability and broad adoption.
Needs verification
- Whether the 476-day gap since last release reflects deliberate stability or reduced active development
- Specific performance characteristics for large-scale text processing
- Accuracy expectations for non-Latin scripts beyond the documented caveats
Similar packages
permissive · top 1,000 on PyPI
json-repairpermissive · top 1,000 on PyPI
text-unidecodecopyleft · top 1,000 on PyPI
python-slugifypermissive · top 1,000 on PyPI
cron-descriptorpermissive · top 1,000 on PyPI
pycountrycopyleft · top 1,000 on PyPI
MarkupSafepermissive · top 100 on PyPI
idpermissive · top 1,000 on PyPI
pdfplumberpermissive · top 1,000 on PyPI
strictyamlpermissive · top 1,000 on PyPI