What ULID Generator does
A ULID is a 128-bit identifier written as 26 characters: 10 that encode a millisecond timestamp and 16 that encode 80 random bits. This page builds them for the time in the Timestamp field, which starts at the current time and accepts Unix seconds, milliseconds or an ISO date, so you can produce IDs that look as if they were created last year or next month. It makes up to 100 at once, with optional monotonic ordering. Paste any ULID into the decode field and you get its creation time in UTC, Unix seconds and milliseconds, and the same 128 bits written as a UUID string. One caveat up front: the random part here is pseudo-random, so use these for fixtures and documentation, not as live IDs.
ULID format: what each of the 26 characters holds
Layout of 01ARZ3NDEKTSV4RRFFQ69G5FAV, the example used in the ULID specification.
| Part | Characters | Bits | Example | Meaning |
|---|---|---|---|---|
| Timestamp | 1 to 10 | 48 | 01ARZ3NDEK | Unix time in milliseconds: 1469922850259 |
| Randomness | 11 to 26 | 80 | TSV4RRFFQ69G5FAV | Random bits, new for each ID |
| Whole ULID | 26 | 128 | 01ARZ3NDEKTSV4RRFFQ69G5FAV | Sorts by time as plain text |
80 random bits give 2 to the power 80, about 1.21 x 10^24, possible values within a single millisecond.
ULID timestamp prefixes for common dates
The first 10 characters produced by this tool for each time (UTC). Any ULID created at that millisecond starts with this prefix, which makes these handy as range bounds in a query.
| Date and time (UTC) | Unix milliseconds | Timestamp part |
|---|---|---|
| 1970-01-01 00:00:00 | 0 | 0000000000 |
| 2000-01-01 00:00:00 | 946684800000 | 00VHNCZB00 |
| 2020-01-01 00:00:00 | 1577836800000 | 01DXF6DT00 |
| 2023-11-14 22:13:20 | 1700000000000 | 01HF7YAT00 |
| 2025-01-01 00:00:00 | 1735689600000 | 01JGFJJZ00 |
| 2026-01-01 00:00:00 | 1767225600000 | 01KDVDNA00 |
| 2026-10-13 09:30:00 | 1791883800000 | 01M4T9HVE0 |
| 2030-01-01 00:00:00 | 1893456000000 | 01Q3DCBD00 |
| 2100-01-01 00:00:00 | 4102444800000 | 03QCPC7P00 |
| Largest possible (year 10889) | 281474976710655 | 7ZZZZZZZZZ |
Example runs: generating and decoding
Real output from this tool. The generated values use its fixed starting seed, so your own batches will have different random parts.
One ULID for a Unix time in seconds
Timestamp: 1791883800, How many: 1
01M4T9HVE0Z9FTGB2RZTEYWZM7 (time 2026-10-13T09:30:00.000Z)
A value in seconds is multiplied by 1,000, so the millisecond digits are 000.
The same instant with milliseconds
Timestamp: 2026-10-13 09:30:00.123
Timestamp part 01M4T9HVHV (1791883800123 ms)
Only the last two characters of the timestamp part changed: nearby times share a long prefix.
A monotonic batch of three
Timestamp: 1791883800, How many: 3, Monotonic: on
01M4T9HVE0Z9FTGB2RZTEYWZM7, 01M4T9HVE0Z9FTGB2RZTEYWZM8, 01M4T9HVE0Z9FTGB2RZTEYWZM9
The last character steps through 7, 8, 9: each ID is the one before plus 1.
Decoding the specification's example
ULID to decode: 01ARZ3NDEKTSV4RRFFQ69G5FAV
2016-07-30T23:54:10.259Z, Unix milliseconds 1469922850259, UUID form 01563e3a-b5d3-d676-4c61-efb99302bd5b
Decoding a hand-typed ULID with look-alike letters
ULID to decode: o1arz3ndektsv4rrffq69g5fav
Read as 01ARZ3NDEKTSV4RRFFQ69G5FAV, same time as above, with a note that it was normalised
Crockford base32 treats O as 0 and I or L as 1, and ignores case.
ULID vs UUID v4 vs UUID v7
| Property | ULID | UUID v4 | UUID v7 |
|---|---|---|---|
| Size | 128 bits | 128 bits | 128 bits |
| Text length | 26 characters | 36 with hyphens | 36 with hyphens |
| Encoding | Crockford base32 | Hexadecimal | Hexadecimal |
| Timestamp | 48-bit Unix milliseconds | None | 48-bit Unix milliseconds |
| Random bits | 80 | 122 | 74 |
| Sorts by creation time | Yes | No | Yes |
| Defined by | The ulid/spec repository on GitHub | RFC 9562 (formerly RFC 4122) | RFC 9562 |
| Reveals when it was created | Yes | No | Yes |
UUID v7 gives the same time-ordered behaviour inside the standard UUID format, so it fits native UUID column types. ULID is shorter as text and has no hyphens, which suits URLs and file names.
What monotonic mode does and when it matters
Two ULIDs created in the same millisecond share their first 10 characters, so their order is decided by the random part and is arbitrary. The specification's answer is monotonic generation: when a new ID is requested within the same millisecond as the last one, take the previous random part and add 1 instead of drawing a fresh one. The IDs then sort in exactly the order they were issued.
Every ULID in a batch from this page has the same timestamp, so the Monotonic box decides how the batch looks. Off, each ID gets its own random part and the list is in no particular order. On, the first ID is random and the rest count up from it, which is what a library's monotonic factory would produce in a tight loop. The trade-off is predictability: once you have seen one monotonic ULID, the next one in that millisecond is easy to guess.
Limits of this tool
- The random part is pseudo-random and not suitable for anything that must be unguessable or globally unique. Collisions with other people's batches are possible in a way they are not with a secure generator.
- All ULIDs in one batch share one timestamp. The tool does not spread a batch over a time range.
- A timestamp entered in seconds has no millisecond detail. Enter milliseconds or an ISO date with a fraction if you need it.
- ISO dates without a time zone are read as UTC, and decoded times are shown in UTC only.
- Decoding goes from ULID to UUID form. It does not convert a UUID into a ULID, and it does not check whether a decoded time is plausible.
- Times before 1970 and after the year 10889 cannot be represented in 48 bits and are rejected.
Using ULID Generator
- 1
Leave Timestamp at the current time, or replace it with Unix seconds, Unix milliseconds or an ISO date such as 2026-10-13T09:30:00Z.
- 2
Set How many to any number from 1 to 100.
- 3
Tick Lowercase if your system stores them that way, and Monotonic if each ULID in the batch should be the previous one plus 1.
- 4
Press Generate, then copy the list or download it as ulids.txt. Each press gives a different random part.
- 5
To read an existing ID, paste it into ULID to decode and press Generate: the decoded time and UUID form appear under the batch.