A text to slug alternative that runs entirely in your browser can turn a page title into a lowercase URL-safe identifier of 1 to 200 Unicode code points using only NFKD normalization and explicit character rules, then let you download the result as a UTF-8 text file — without uploading the title anywhere. The defining trait of a true alternative is transparency: every character kept, dropped, or replaced follows a rule you can see in advance rather than a hidden transliteration dictionary you have to take on faith. Text To Slug is built around that idea. It performs Unicode NFKD normalization on the input, removes combining marks, lowercases letters, then filters the result down to either ASCII a through z and digits or all Unicode letters and numbers depending on the mode you select. Spaces, punctuation, symbols, and any disallowed character runs collapse to a single hyphen or underscore. Leading and trailing separators are trimmed away. The maximum length is counted in Unicode code points after conversion and never splits a UTF-16 surrogate pair. If nothing remains, the tool returns an explicit error instead of an empty slug. All of this happens locally in the browser — no upload, no account, no network call.

What "Alternative" Means in the Slug Tool World
Most public slug generators rely on server-side libraries like Python's python-slugify, PHP's Str::slug, or the JavaScript slugify packages published to npm. Those libraries bundle transliteration dictionaries that map non-Latin scripts to approximate Latin spellings: German ß to ss, Chinese characters to Pinyin, Cyrillic to Latin look-alikes. For some sites that is helpful. For others it is a problem — a slug that says something different from the title because of a transliteration rule the team never reviewed. Text To Slug flips that contract by making no language decisions at all. In ASCII mode, accented Latin letters decompose through NFKD into their ASCII base plus a combining mark; the combining mark is then stripped, so "Crème brûlée" becomes "creme brulee" through pure Unicode normalization rather than a French-specific dictionary entry. A letter that does not decompose to an ASCII base is removed along with its surrounding separator run. Unicode mode preserves characters the browser classifies as Unicode letters or numbers, so Chinese, Arabic, Cyrillic, Greek, and other scripts can remain in the slug unchanged.
ASCII Mode vs Unicode Mode: How to Decide
Two settings drive almost every difference in the output: the separator choice and the character retention mode. A useful way to compare them is to feed the same input through both modes and watch what stays. The browser's NFKD data — defined in the Unicode Standard Annex #15 and exposed in JavaScript through MDN's String normalize reference — drives the decomposition in both modes. No transliteration table is consulted.
| Input | ASCII mode output | Unicode mode output |
|---|---|---|
| Hello World! | hello-world | hello-world |
| Crème brûlée | creme-brulee | creme-brulee |
| 北京 2024 | 2024 | 北京-2024 |
| Café — Łódź | cafe-lodz | cafe-lodz |
| A & B | a-b | a-b |
The contrast shows up sharply for scripts without an ASCII decomposition path. In ASCII mode, "北京 2024" loses the Chinese characters entirely; only the digits survive, joined by a hyphen. In Unicode mode the same input keeps both scripts side by side. That difference matters for two practical situations. Multilingual blogs whose CMS, router, and analytics all support Unicode URLs benefit from Unicode mode because the slug preserves language identity. Legacy systems, plain-ASCII filenames, or older routers benefit from ASCII mode because the slug is guaranteed to contain only lowercase a through z and digits. Anyone already working with characters at the Unicode level can see the same code-point lens applied to raw glyphs in our code-point view for special characters.
How to Convert a Title to a Slug
- Open Text To Slug and paste the title or phrase into the input field. Up to 100,000 UTF-16 code units of input are accepted, which covers typical blog post titles and product names with room to spare.
- Choose the separator — hyphen for standard URL paths or underscore for code-like identifiers, anchor names, or note keys.
- Set the maximum length anywhere from 1 to 200 Unicode code points. The ceiling is enforced after conversion so the preview matches the downloaded file byte for byte.
- Choose ASCII mode if your destination system expects only lowercase a through z and digits, or Unicode mode if it supports characters outside the Latin script.
- Click Create, then read the exact preview to confirm the character count, separator style, and script retention before downloading.
- Download the UTF-8 plain text file or copy the preview into your CMS slug field.
A worked example walks through the full pipeline. The input is "Crème brûlée recipes — 10 easy ideas!" with hyphen separators, a 120-character maximum, and ASCII mode. Step 1 — NFKD decomposition splits "Crème" into C, r, e, a combining grave mark, m, and e, and splits "brûlée" into b, r, u, l, e, e plus a combining circumflex and a combining acute mark. Step 2 — combining marks are removed, yielding "Creme brulee recipes — 10 easy ideas!". Step 3 — lowercase normalization produces the same lowercase form. Step 4 — ASCII mode keeps a through z and the digits 0 through 9, so the em dash, exclamation mark, and surrounding spaces are marked for removal. Step 5 — every run of disallowed characters collapses to a single hyphen, and leading or trailing hyphens are trimmed. Step 6 — the converted string is 34 code points, well under the 120 ceiling, so no truncation occurs. Final slug: creme-brulee-recipes-10-easy-ideas (34 code points). The arithmetic is direct: 5 letters in creme, plus 1 separator, plus 6 letters in brulee, plus 1 separator, plus 7 letters in recipes, plus 1 separator, plus 2 digits, plus 1 separator, plus 4 letters in easy, plus 1 separator, plus 5 letters in ideas equals 34 code points.
Slug Collisions and the Boundaries Text To Slug Does Not Cross
A slug does not reserve a URL or guarantee uniqueness. Two different titles can normalize to the same value, and truncation increases the collision risk because it slices the converted value at the chosen maximum and trims a trailing separator at the cut without trying to preserve the last complete word. That last choice is deliberate: preserving the last word could push the value past the stated ceiling or drop it far below. The contract stays honest at the cost of a slightly awkward boundary in rare cases. Beyond uniqueness, Text To Slug does not check reserved routes, filesystem names, database constraints, case-insensitive collisions, or any existing URL inventory. It does not add a domain, a leading slash, a file extension, or percent encoding. The result is only the slug segment shown in the preview. The download creates a temporary UTF-8 Blob URL at click time and revokes it once the browser starts the transfer. Editing any input field clears the previous result so the next click of Create produces the new value from scratch. Uniqueness enforcement, percent encoding, and URL prefixing all belong to the destination layer rather than the slug step.
When This Alternative Fits and When to Use Something Else
Text To Slug fits when the work is editorial: drafting slugs for blog posts, product pages, anchors, CSS-like identifiers, note keys, or filenames where the rules need to be visible. It also fits teams that handle multilingual content and want to choose per-article whether to transliterate or preserve scripts. It is less suitable when the destination system already enforces a slug pattern — for example, a CMS that mandates UUID-based identifiers — or when the workflow genuinely needs transliteration, such as automatically rendering Cyrillic titles as Latin approximations for SEO. For transliteration-heavy workflows, a library that ships a curated dictionary, or a custom rule set, is the more honest tool, because Text To Slug deliberately ships no transliteration dictionary and treats each script through Unicode properties alone. The privacy story is also straightforward: normalization, filtering, previewing, and download creation all run locally. The title pasted into the field is never transmitted to a network service, and accepted input always produces a deterministic value under the browser's Unicode implementation.