Generators
Generate ULIDs — universally unique, lexicographically sortable identifiers. Each ULID encodes a millisecond-precision timestamp plus 80 bits of randomness.
Generated ULID output, along with its Timestamp (10 chars), Random (16 chars), and Date/Time (UTC).Generate to create a new ULID; the timestamp component, random component, and UTC date update instantly.Copy to put the current ULID on your clipboard.Generate Batch (5) to create five ULIDs at once — each row shows its UTC timestamp and its own Copy button.Paste a ULID to decode field; its Timestamp (ms), Date/Time (UTC), Local Time, and Relative age appear below.ULIDs sort lexicographically in time order, so they work as ordered primary keys without a separate created_at column for sorting.
Generate unique IDs across many servers or clients with no central coordinator — 80 bits of randomness keeps collisions astronomically unlikely.
Paste any ULID to read its embedded millisecond timestamp in UTC and local time, so you can tell exactly when an ID was created.
Crockford base32 drops the ambiguous letters I, L, O, and U and is case-insensitive, so IDs are easy to read aloud or transcribe.
At just 26 characters with no special symbols, ULIDs fit cleanly in URLs, logs, and filenames without escaping.
Everything runs in your browser. IDs are generated locally and nothing is uploaded or sent to a server.
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.
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.
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.
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.
In theory, yes, but 80 bits of randomness make a collision practically impossible. Within the same millisecond, ordering depends on that random component.
A valid ULID is exactly 26 Crockford base32 characters. The error appears if the length is wrong or it contains characters outside the alphabet.
Never. ULIDs are generated locally with crypto.getRandomValues, and decoding runs entirely in JavaScript. Nothing is sent to or stored on a server.