ULID Generator

A ULID (Universally Unique Lexicographically Sortable Identifier) is a 128-bit identifier rendered as 26 characters of Crockford Base32 — something like 01J8XQ3K9F7B2N4P6R8T0V1W3Y. The first 48 bits encode a Unix millisecond timestamp, the remaining 80 bits are randomness. Because the timestamp comes first, ULIDs sort lexicographically in creation order: plain string comparison gives you chronological order, which makes them k-sortable and friendly to database indexes that fragment under random UUID v4 inserts.

Compared to a UUID, a ULID is shorter (26 characters instead of 36), contains no hyphens, is URL-safe without encoding, and is case-insensitive by design — the Crockford alphabet excludes easily confused letters like I, L, O and U. You keep UUID-level uniqueness while gaining time-ordering and readability.

This page boots the generator straight into ULID mode. IDs generated within the same millisecond are monotonic — the random tail increments — so ordering is preserved even under bursts. Pick a quantity, hit generate, and copy individual IDs or the whole batch. Everything runs locally in your browser with cryptographically secure randomness; nothing is sent to a server.

FAQ

What does a ULID look like?

A 26-character string like 01J8XQ3K9F7B2N4P6R8T0V1W3Y. The first 10 characters encode the creation timestamp, the last 16 are the random component.

How is a ULID different from a UUID?

Both are 128-bit identifiers, but a ULID embeds a millisecond timestamp up front, making it lexicographically sortable by creation time. It's also more compact (26 vs 36 characters), has no hyphens, and avoids ambiguous characters. A random UUID v4 carries no time information and inserts scatter across database indexes.

Are ULIDs generated here unique and ordered?

Yes. Each ID uses cryptographically secure randomness, and within the same millisecond the random portion increments monotonically, so a burst of ULIDs stays strictly ordered and collision-free.

Can I use ULIDs as database primary keys?

That's one of their main use cases. Time-ordered keys append to the end of B-tree indexes instead of scattering inserts randomly, which keeps index locality and write performance healthy at scale.

Read the full UUID / ULID Generator guide and the UUID / ULID Generator API reference.