Back to Developer
ULID generator — lexicographically sortable IDs in bulk

ULID generator — lexicographically sortable IDs in bulk

Generate ULIDs (Universally Unique Lexicographically Sortable Identifiers) in batches of 1–1000. A ULID combines a 48-bit millisecond timestamp with 80 bits of randomness encoded as 26 characters of Crockford Base32, so unlike UUID v4 they sort naturally by creation time — ideal for log entries, event IDs, and database primary keys. Includes a monotonic option to avoid collisions inside the same millisecond, optional prefix (e.g. user_), newline / comma separators, and one-click download. Backed by crypto.getRandomValues, nothing — including timestamps — ever leaves your browser.

developergenerate

How to use

Choose the count, optionally configure a prefix (e.g. `user_`), separator, and the Monotonic option, then press Generate to list the ULIDs. Copy individual entries, or use Copy all / Download to grab the whole batch. Because ULIDs sort lexicographically by creation time, they make great log entries, event IDs, and database primary keys.

FAQ

How is ULID different from UUID v4?
The first 48 bits of a ULID encode a millisecond timestamp, so lexicographic sorting yields chronological order. UUID v4 is fully random and offers no ordering, which fragments database B-tree indexes. RFC 9562 UUID v7 is also time-based, but ULIDs are 26 characters (a bit shorter than UUID) and hyphen-free, making them friendlier for URLs and CLIs.
What does the Monotonic option do?
When you generate several ULIDs in the same millisecond, monotonic OFF generates independent random parts, so ordering may break. Monotonic ON increments the previous random part by 1 to guarantee ordering. You can fit up to 2^80 IDs per millisecond; if the counter overflows it bumps the timestamp by 1 ms and resets.
Does adding a prefix violate the ULID spec?
Modern systems often add domain prefixes like Stripe (`pi_...`), Slack (`U...`), or AWS (`i-...`). Just remember that sorting compares the whole string including the prefix, so mixing IDs from different domains breaks ordering across domains.
Why are ULIDs 26 characters?
The spec encodes 128 bits using Crockford Base32 (0-9 and A-Z minus I/L/O/U — 32 characters). 128 / 5 = 25.6 → 26 chars. Crockford Base32 omits visually ambiguous characters, making ULIDs easier to read and write by hand.
Are lowercase ULIDs valid?
The spec canon is uppercase, but most implementations compare case-insensitively, so lowercase works in practice. This tool defaults to uppercase (spec-compliant); switch to lowercase only if your downstream system requires it.
Is my data sent to a server?
No. It only uses crypto.getRandomValues and Date.now(), and everything stays in your browser. Generated timestamps are never transmitted.

Related tools