ULID Generator and Decoder
Generate time-sortable ULIDs in bulk and decode any ULID back to its exact timestamp. Everything runs locally in your browser.
Press Generate to create your ULIDs.
The timestamp hidden inside the ULID will appear here.
01ARZ3NDEKTSV4RRFFQ69G5FAV
- First 10 characters: 48-bit Unix timestamp in milliseconds, Crockford base32 encoded. This is what makes ULIDs sortable by creation time.
- Last 16 characters: 80 bits of randomness, also Crockford base32. The letters I, L, O and U are never used, so there is no confusion between 1 and I or 0 and O.
- Total 26 characters, 128 bits, URL-safe, and case-insensitive.
Frequently Asked Questions (FAQ)
What is a ULID and how is it different from a UUID?
A ULID is a 26-character identifier encoded in Crockford base32. Unlike a random UUID, a ULID starts with a 48-bit millisecond timestamp, so IDs generated later sort after earlier ones as plain text. It carries the same 128 bits of uniqueness as a UUID but is shorter, URL-safe, case-insensitive and sortable without parsing.
How do I read the timestamp out of a ULID?
The first 10 characters of a ULID encode the Unix timestamp in milliseconds as a base32 number. Paste any ULID into the decoder on this page and it shows the exact UTC time, your local time and how long ago it was created. The remaining 16 characters are randomness and carry no time information.
What does the monotonic option do when generating ULIDs?
When several ULIDs are created within the same millisecond, the monotonic option increments the random part by one instead of drawing fresh randomness. This guarantees that every ID in the batch keeps strict time order, which matters for databases and logs that rely on ULID sort order.
Are the generated ULIDs random enough for database keys?
Yes. The random part uses your browser built-in cryptographic random generator, giving 80 bits of randomness per ID, which is the amount the ULID specification calls for. Collisions are practically impossible, and the tool never reuses or predicts values.
Is anything I generate or decode sent to a server?
No. Generation and decoding run entirely in your browser with JavaScript. Nothing you type or generate is uploaded, stored or sent anywhere.