Generators

ULID Generator

Generate ULIDs — universally unique, lexicographically sortable identifiers. Each ULID encodes a millisecond-precision timestamp plus 80 bits of randomness.

Click Generate to create a ULID
Timestamp (10 chars)
Random (16 chars)
Date/Time (UTC)
Decode ULID

How to use this tool

  1. Open the page — a fresh ULID is generated automatically and shown in the Generated ULID output, along with its Timestamp (10 chars), Random (16 chars), and Date/Time (UTC).
  2. Click Generate to create a new ULID; the timestamp component, random component, and UTC date update instantly.
  3. Click Copy to put the current ULID on your clipboard.
  4. Click Generate Batch (5) to create five ULIDs at once — each row shows its UTC timestamp and its own Copy button.
  5. To inspect one, paste a 26-character ULID into the Paste a ULID to decode field; its Timestamp (ms), Date/Time (UTC), Local Time, and Relative age appear below.

Why this tool is helpful

Sortable IDs for databases

ULIDs sort lexicographically in time order, so they work as ordered primary keys without a separate created_at column for sorting.

Distributed generation

Generate unique IDs across many servers or clients with no central coordinator — 80 bits of randomness keeps collisions astronomically unlikely.

Decode timestamps when debugging

Paste any ULID to read its embedded millisecond timestamp in UTC and local time, so you can tell exactly when an ID was created.

Human-safe encoding

Crockford base32 drops the ambiguous letters I, L, O, and U and is case-insensitive, so IDs are easy to read aloud or transcribe.

Compact and URL-friendly

At just 26 characters with no special symbols, ULIDs fit cleanly in URLs, logs, and filenames without escaping.

Stay private

Everything runs in your browser. IDs are generated locally and nothing is uploaded or sent to a server.

FAQ

What exactly is a ULID?

A ULID is a 128-bit, 26-character identifier made of a 48-bit millisecond timestamp (first 10 characters) plus 80 bits of randomness (last 16 characters), encoded in Crockford base32.

Why is it "lexicographically sortable"?

The timestamp is written first and encoded most-significant-digit-first, so sorting ULIDs as plain strings sorts them by creation time — no date parsing needed.

How is a ULID different from a UUID?

A UUID v4 is 128 bits of pure randomness with no time ordering and 36 characters. A ULID embeds a timestamp, sorts by time, and is more compact at 26 characters.

What is Crockford base32?

It's a 32-character alphabet (0–9, A–Z) that omits I, L, O, and U to avoid confusion. It's case-insensitive, so uppercase and lowercase ULIDs are equivalent.

Can two ULIDs collide?

In theory, yes, but 80 bits of randomness make a collision practically impossible. Within the same millisecond, ordering depends on that random component.

Why do I get an "Invalid ULID" error when decoding?

A valid ULID is exactly 26 Crockford base32 characters. The error appears if the length is wrong or it contains characters outside the alphabet.

Does any of my data leave my browser?

Never. ULIDs are generated locally with crypto.getRandomValues, and decoding runs entirely in JavaScript. Nothing is sent to or stored on a server.