slugify · url-safe · diacritic strip · live

Convert text to URL slugs

Strip diacritics, lowercase, replace whitespace with a separator, and remove punctuation — the canonical recipe for clean URL paths. All processing runs locally.

Slugify
Input
30 B
1 lines
Output
26 B
1 lines
Status
ready
live
Ratio
0.87×
out/in
input · text
output · slug
hallo-world-cafa-ma14nchen
Quick Start

How to generate a slug

The input is NFKD-normalised to expose accents, diacritics are stripped, non-word characters are dropped, whitespace becomes the chosen separator, and runs of the separator collapse to one.

  1. 01

    Type or paste text

    Article titles, product names, anything that needs a URL-safe form.

    Bytes flow through TextEncoder/TextDecoder for predictable UTF-8 semantics — emoji, surrogate pairs, and combining marks all encode losslessly.

    inputUTF-8TextEncoderlosslesslive
    input · raw bytestext · UTF-8
    Héllo World! Café
    loaded · UTF-8MIME · ready
  2. 02

    Choose separator

    Dash (default), underscore, or dot. Whitespace runs collapse to a single separator.

    Hash and signature operations call crypto.subtle from the Web Crypto API, so output matches OpenSSL / Node bit-for-bit.

    sepWeb Cryptosubtledeterministiclive
    sep · options- · live
    hello-world-cafe
    options applied · livelive
  3. 03

    Toggle lowercase

    Lowercase is the safest default. Disable it for case-sensitive backends.

    Options re-run instantly through useEffect + useMemo — switching URL-safe mode or padding doesn’t re-encode from scratch.

    casememoisedoptionsinstantreactive
    case · encodedlower · ready
    abc-def-ghi
    encoded · livelossless
  4. 04

    Copy or download

    One click to clipboard. Download as .txt.

    Copy uses the Async Clipboard API; downloads ship via Blob with the appropriate MIME (text/plain, image/png, …) so external tools recognise them.

    exportclipboardblobMIME-correctclient-side
    ok · copiedready · done
    Copied
    shipped · ready to shipsuccess
Pro tips

Encoding without surprises

Always UTF-8 first

Use TextEncoder / TextDecoder for bytes ↔ string conversion. btoa alone breaks on non-ASCII.

URL-safe vs standard Base64

Standard uses +, /, =; URL-safe swaps to -, _, no padding. Don’t mix them.

Hashes aren’t passwords

SHA-256 is fast; that’s good for fingerprints, bad for passwords. Use bcrypt / argon2 for credentials.

Watch padding rules

Some decoders are strict about = padding, others auto-pad. If round-trips fail at exactly 1 or 2 bytes, check padding.

Use Web Crypto for keys

Generate cryptographic keys via crypto.subtle, never Math.random. The latter is predictable.

JWT decode ≠ verify

Decoding a JWT just splits and base64-decodes. Verification needs the issuer’s public key / shared secret.

Use Cases

When to slugify

Blog posts, product URLs, IDs, filenames.

Blog posts

Generate the URL path from a post title. Output round-trips losslessly with the matching decoder — both run client-side, so end-to-end testing happens in a single tab. Encoding flows through TextEncoder for predictable UTF-8 semantics.

RFC-compliant

Product URLs

Clean, human-readable e-commerce links. Web Crypto's subtle.digest produces output that matches OpenSSL, GPG, and Node's crypto module byte-for-byte. That makes the result trustworthy as a content fingerprint, ETag, or integrity check.

OpenSSL-matched

Filenames

Sanitise user-uploaded file names for storage. Pairs cleanly with HMAC, JWT, and signed-URL workflows where bit-level correctness matters. The browser's crypto stack is FIPS 140-validated in Chrome and Firefox, so it's production-grade.

lossless

Anchor IDs

Auto-generate stable HTML element IDs from headings. Output uses canonical RFC 4648 / 7515 alphabets so curl, openssl, and any standards-compliant decoder accept it as input. URL-safe variants drop padding for tokens that travel in query strings.

byte-identical

Migrations

Re-slug legacy paths in bulk after a CMS port. Heavy hashing runs through useMemo so large inputs don't block typing. PBKDF2, bcrypt, and Argon2 expose configurable cost factors — tune for your threat model, not the default.

spec-grade

I18n inputs

Strip diacritics from foreign-language titles for portable URLs. Same input plus same options always yields identical bytes. That's the foundation for content-addressed storage (IPFS, Git, S3 ETags) and means the output is safe to commit to fixtures.

i18n
FAQ

Frequently asked questions

The string is normalised with NFKD which splits accents into combining marks, then those marks are stripped. Café becomes Cafe.
Characters that have no Latin counterpart in NFKD are dropped. For Greek, Cyrillic, or CJK you usually want a transliteration step before slugifying.
Internally the separator is regex-escaped so symbols like . do not act as wildcards when collapsing runs.
Yes — only word characters and the chosen separator survive, which is always safe in a URL path segment.
No. Slugifying runs locally in your browser.
Suggest a tool

Something missing?

Tell us what you need. We ship the top requests every two weeks.

Sent straight to the maintainers · no account needed
47 in queue·8 shipped this month
Request queued. Thanks!