Skip to main content

ULID Generator — Sortable Unique IDs + Timestamp Decoder

Sortable, URL-safe unique IDs — batch generate, monotonic mode, decode the timestamp back out — 100% in your browser

  • Runs locally
  • Category Developer & DevOps
  • Best for Formatting, validating, shrinking, or inspecting code-adjacent text.
A ULID is 26 Crockford Base32 characters: the first 10 are a millisecond timestamp, the last 16 are randomness. Sort the strings and you sort by time.
How many
Monotonic
Lowercase

Strictly ascending, even within the same millisecond.

Generated ULIDs
Click Generate to mint ULIDs.
Decode a ULID

The decoded timestamp shows up here.

What this tool does

Generate ULIDs in the browser: 26-character, lexicographically sortable, URL-safe unique identifiers that beat random UUIDv4 when you want a primary key you can also sort by time. A ULID packs a 48-bit millisecond timestamp into its first 10 Crockford Base32 characters and 80 bits of randomness into the last 16, so a plain string sort of your IDs is also a sort by creation time — no separate created_at column required. Generate 1 to 100 at once, flip on monotonic mode for strictly ascending order even when many IDs land in the same millisecond, lowercase them, copy one or copy all. The built-in decoder takes any ULID and reads the timestamp back out as milliseconds plus a human-readable UTC and local time, and it validates the Crockford alphabet (no I, L, O, U) so a mistyped ID is caught immediately. Randomness comes from crypto.getRandomValues; nothing is uploaded.

Tool details

Input
Text + Numbers
The page exposes text boxes, numeric controls, file pickers, or structured inputs depending on the tool.
Output
Live result + Copy + Download
The result area focuses on usable output, with copy, download, or preview actions when supported.
Privacy
Browser-side processing
The main tool logic does not call an external API, so inputs normally stay in the current tab.
Save / share
Shareable URL state
Key settings are encoded in the URL so another person can reopen the same setup.
Performance budget
Initial JS <= 9 KB
No WASM budget is declared, keeping the tool quick to open on mobile.
Best fit
Developer & DevOps · Developer
Category and role tags drive related tools, internal links, and quick fit checks.

How to use

  1. 1. Input

    Paste or drop your content into the tool panel.

  2. 2. Process

    Click the button. All processing is local in your browser.

  3. 3. Copy / Download

    Copy the result or download to disk in one click.

How ULID Generator fits into your work

Use it in the small gaps between coding, reviewing, debugging, and shipping.

Developer jobs

  • Formatting, validating, shrinking, or inspecting code-adjacent text.
  • Preparing snippets for documentation, tickets, commits, or handoff.
  • Checking a small payload quickly without switching tools.

Developer checks

  • Run irreversible transforms like minify or obfuscate on a copy.
  • Keep secrets out of pasted snippets unless the tool explicitly stays local.
  • Use your normal tests or linter before shipping transformed code.

Good next steps

These links move the current task into a more complete workflow.

  1. 1 JWT Decoder Decode JWT header / payload / signature — verify structure, check exp, copy claims — browser-only Open
  2. 2 File Hash Calculator Compute SHA-1, SHA-256, SHA-384, or SHA-512 hashes for uploaded files entirely in the browser. Open
  3. 3 UUID Generator Generate v4 random, v7 time-ordered, NIL, and Short UUIDs instantly — entirely in your browser. Open

Real-world use cases

  • Pick a primary key that sorts by insertion time

    You are choosing IDs for a new Postgres table and want the latest rows without an extra ORDER BY created_at. Switch from UUIDv4 to ULID: a B-tree index on the ID column stays roughly time-ordered, so inserts append near the right edge instead of scattering, and "give me the 50 newest" is just ORDER BY id DESC LIMIT 50. Generate a few here to eyeball the format before you commit to the column type.

  • Build an append-only event log or outbox

    An outbox table or event stream needs a key that is unique AND keeps events in the order they happened. Turn on monotonic mode and every ULID is strictly greater than the last, even at thousands of inserts per second within one millisecond. A consumer reads ORDER BY id and replays events in exactly the order the producer wrote them.

  • Decode a ULID from a log line to find when it happened

    A support ticket quotes a record ID like 01HN8X... and you need to know when it was created without querying the database. Paste it into the decoder and read the exact millisecond plus the UTC time. No schema access, no created_at lookup — the timestamp is baked into the ID itself.

  • Seed test fixtures with realistic, ordered IDs

    Writing integration tests that assert ordering? Generate a batch of monotonic ULIDs, drop them into your fixtures, and your assertions on "newest first" hold deterministically. Copy all and paste straight into a seed file or a JSON fixture.

Common pitfalls

  • Treating a ULID's randomness as a security token. The 80 random bits make collisions virtually impossible, but the timestamp half is fully readable. A ULID is an identifier, not a secret — never use one as a session token, password-reset code, or anything that must be unguessable in full.

  • Forgetting to enable monotonic mode for high-rate inserts. If you mint many IDs in the same millisecond without it, their order is random and your "sort by ID" ordering silently breaks for bursts. Turn monotonic on whenever insertion order must equal ID order.

  • Hand-typing or regex-validating ULIDs with the wrong alphabet. Crockford Base32 excludes I, L, O and U, so a validator that allows the full A–Z will accept malformed IDs. Decode or validate against the exact 32-character set, which is what this tool does.

Privacy

Every ULID is built in your browser tab. The 80 random bits come from crypto.getRandomValues — the same cryptographic source the platform uses for keys — never Math.random, and they never leave the page. The decoder runs entirely client-side too, so a ULID you paste to inspect its timestamp is not logged or transmitted. Only your settings (count and the monotonic / lowercase toggles) ride in the shareable URL; the generated IDs themselves are re-randomized on every click and stay local.

FAQ

Tool combos

Folks in your role tend to reach for these alongside this tool.

Made by Toolora · 100% client-side · Updated 2026-06-13