ULID Generator & Decoder

Bulk-generate sortable ULIDs and decode their timestamps.

Runs locally in your browser Report an issue
ULIDs No signup · local processing

Click Generate to create ULIDs

Choose how many you need, then click Generate. Each ULID is built from the current time plus your browser's secure randomness, strictly sortable within the batch — copy one or copy them all. Paste a ULID on the left to decode its time.

Runs entirely in your browser

Generate and decode ULIDs locally

A ULID is a 128-bit identifier written as 26 Crockford base32 characters: the first 10 encode a 48-bit millisecond timestamp and the remaining 16 encode 80 bits of randomness. Because the timestamp leads, ULIDs sort in creation order as plain text — handy for database keys and logs — while staying collision-resistant like a UUID. This tool generates one or up to a hundred at a time, strictly monotonic within each batch (so even IDs created in the same millisecond keep increasing), using your browser's cryptographic random generator. It also decodes any ULID you paste back to its timestamp, shown in milliseconds and ISO 8601. Everything runs in your browser; nothing is uploaded.

Common questions

What is a ULID and why use it over a UUID?

A ULID packs a millisecond timestamp into the front of a 128-bit value, so the identifiers sort chronologically as plain strings while keeping UUID-like uniqueness. That makes them pleasant as primary keys, log IDs, and anything you want naturally time-ordered.

What does monotonic within a batch mean?

When several ULIDs are generated in the same millisecond, the random part is incremented by one each time instead of being redrawn, so every ULID in a batch is strictly greater than the one before it and the whole list stays correctly sortable.

How random are the generated ULIDs?

The 80-bit random portion comes from crypto.getRandomValues, the browser's cryptographically secure random source — not Math.random. The 48-bit prefix is the current time in milliseconds.

What can the decoder tell me?

Paste a 26-character ULID and it extracts the embedded 48-bit timestamp, showing it both as milliseconds since the Unix epoch and as an ISO 8601 date. It cannot recover the random part's meaning — ULIDs carry no other data.

Are the ULIDs or decoded values uploaded?

No. Generation and decoding run entirely in your browser tab with local JavaScript and the Web Crypto API. Nothing is sent to a server.