Advertisement

Free Online ULID Generator

Generate sortable ULIDs individually or in bulk.

Ready
One identifier per line, in generation order
Timestamp 0000000000 48-bit milliseconds, Crockford base32
Randomness 0000000000000000 80 bits from the browser crypto generator

ULIDs are 26 characters long and sort lexicographically by creation time. Generation happens locally in your browser; no identifier is sent anywhere.

Advertisement

About the ULID Generator

A ULID, short for Universally Unique Lexicographically Sortable Identifier, is a 128-bit label written as 26 characters. Its first 48 bits record a millisecond timestamp, and the remaining 80 bits are random. Because the timestamp comes first and the alphabet is ordered, sorting ULIDs as plain strings also sorts them by the moment they were created. That property makes them pleasant primary keys in databases that benefit from sequential inserts, and it avoids the index fragmentation that fully random identifiers can cause.

This generator implements the format directly in the browser. It reads the current time, encodes the millisecond count with Crockford's base32 alphabet, then fills the random portion with bytes from crypto.getRandomValues. Every identifier is 26 characters, uppercase by default to match the reference specification, and can be lowercased for teams that prefer that style. A batch can contain from one to one hundred values, which is handy for seeding test fixtures or filling a spreadsheet column.

Why choose ULIDs over UUIDs?

  • Sortable: newer identifiers appear later in string order, so pagination and time-range queries work without a separate created-at column.
  • Compact: 26 characters fit neatly in URLs, logs, and filenames, and they avoid hyphens that can complicate copy and paste.
  • Distributed: the random tail means two machines can create identifiers at the same instant without coordination or a central sequence.
  • Readable: the alphabet excludes easily confused letters, reducing transcription mistakes in support tickets.

The trade-off is that a ULID leaks an approximate creation time. If an identifier is exposed publicly, anyone can decode the first ten characters and learn when the record was made. That is usually harmless, but it is worth considering for security-sensitive resources where timing itself reveals information. The random part is not a secret either; a ULID is an identifier, not an authorization token. Never use one in place of a cryptographically strong session key or password reset value.

Crockford base32 uses digits and uppercase letters while omitting I, L, O, and U. Decoders usually map those excluded letters to their numeric lookalikes, which is why a human can read a ULID aloud without ambiguity. This page does not implement the optional monotonic counter from the specification, so two identifiers created in the same millisecond are ordered by their random tails rather than by generation order. For most applications that is perfectly acceptable; if strict ordering inside a single millisecond matters, use the monotonic variant supported by your language library.

How to use this tool

  1. Enter how many identifiers you need, between one and one hundred.
  2. Choose uppercase for the canonical form or lowercase for a house style.
  3. Click Generate ULIDs. The timestamp and random segments shown below update with the first result.
  4. Copy the whole list or download it as a text file for import into a script or spreadsheet.

Frequently asked questions

Can two generated ULIDs collide?

A collision requires both the same millisecond and the same 80 random bits. With a proper cryptographic random source the probability is negligible. The generator also checks the current batch and retries duplicates, though that check is not a substitute for a unique database constraint.

Are the identifiers safe to use as database keys?

Yes. Store them as fixed-length text or as a native 128-bit type if your database offers one. Their ordering makes them friendly to B-tree indexes, and their fixed width keeps storage predictable.

Does this tool send anything to a server?

No. Timestamp reading, random byte generation, and base32 encoding all happen in your browser. The page does not contact an API, so generated identifiers never appear in a network log.

Sponsored
Find a bug? Report now