ULID Generator
Lexicographically sortable ULIDs, generated when the page opens.
Runs entirely in your browser
Loading the tool…
ULIDs, generated when the page opened. Twenty-six characters rather than a UUID's thirty-six, with a 48-bit millisecond timestamp first and 80 random bits after, so they sort by creation time as plain text.
The character set is what distinguishes it. ULIDs use Crockford's base32, which leaves out I, L, O and U: the first three because they are misread as one and zero, and U to avoid accidental words. Decoding is case-insensitive, so an id read aloud or typed in by hand survives the trip. It is also URL-safe with no dashes, which is why they turn up in paths where a UUID would be ugly.
Against UUID v7, which now does the same job: v7 is a standard with database types and library support built around it, while ULID is a convention that got there first and is shorter and friendlier to read. If your database has a native UUID type, v7 is usually the easier answer. If the id is going in a URL or on a screen, ULID reads better.
Like v7, a ULID reveals its creation time, so it is the wrong choice for anything that has to be opaque. v4 is that one.
How to use it
- Read the ids above, generated when the page opened.
- Press Generate for a fresh set, or change the count first.
- Press Copy to take them, with braces or quotes if you need them.
Questions
What is the difference between a ULID and a UUID?
A ULID is 26 characters of Crockford base32 with a millisecond timestamp at the front; a UUID is 36 characters of hex with dashes. ULIDs sort by time and read more easily. UUID v7 now offers the same time ordering inside the standard format, which is often the more practical choice if your database has a UUID type.
Why does the alphabet skip some letters?
Crockford's base32 leaves out I, L, O and U. The first three are the ones people confuse with 1 and 0 when reading an id off a screen or repeating it over the phone, and U is dropped so that random ids do not spell anything unfortunate. Decoding also accepts either case.
Are ULIDs safe to put in a URL?
They are URL-safe as characters, with no dashes and nothing needing encoding. Whether they are appropriate is a different question: a ULID carries its creation time, so it should not be the secret part of a link that is meant to be unguessable.
Are these generated on my machine?
Yes, in this tab, from the browser's cryptographic random source. Nothing is requested from a server and nothing is recorded, so no ids you generate here exist anywhere but on your screen. The page works with the network off.
Could two people get the same id?
Not in any practical sense for the random kinds. The space is large enough that collisions are a theoretical concern rather than an operational one, and no coordination between generators is needed, which is the entire reason these formats exist.
The other formats
The same generator on a different kind of identifier, and what separates them.
Your data stays on your device
Everything above runs inside your browser as WebAssembly compiled from Rust. Nothing you type is uploaded, logged or stored on a server. You can load this page once, go offline, and it still works.
This page makes no requests at all, to anywhere. That is not a promise in the copy: it is a Content-Security-Policy header your browser enforces, and connect-src on it is none. Open the network tab and watch nothing happen.