UUID and ULID Generator
A UUID generator that runs in your browser: up to 100 UUID v4 values from crypto.randomUUID, or time-sortable ULIDs, ready to paste into code, fixtures or database seeds.
Generated with crypto.randomUUID() - cryptographically random, 122 bits of entropy.
About UUID and ULID Generator
Choose UUID v4 or ULID, say how many you want up to 100, and the list appears immediately with a copy button on each row and one for the whole block. It is the small task that interrupts real work: seeding a table, writing a test fixture, filling in a correlation id by hand, naming a tenant. Generating the values locally means nobody else ever sees them, which matters once they become primary keys or appear as tokens in a URL.
RFC 9562, which replaced RFC 4122, defines the UUID formats. Version 4 fills the identifier with random data except for the six bits that pin the version and variant, leaving 122 bits of entropy, which is ample: collisions are not a practical concern. The real failure mode is elsewhere. Because consecutive v4 values are unrelated, using them as a clustered primary key scatters inserts across a B-tree index, causing page splits, poor cache locality and index bloat on write-heavy tables. A ULID puts a 48-bit millisecond timestamp first, so identifiers created in sequence sort next to each other.
UUIDs come from crypto.randomUUID, the browser's own implementation backed by a cryptographically secure generator, not a shim seeded from Math.random. ULIDs are assembled here from Date.now for the 48-bit time component and crypto.getRandomValues for the 80 random bits, encoded in Crockford base32, which omits I, L, O and U so a value read aloud or typed off a screenshot is harder to garble. Both run entirely in the page: no request is made, nothing is logged, and the identifiers exist only in your browser until you copy them.
How to use it
- 1Pick UUID v4 (random, RFC 9562) or ULID (sortable by time) from the identifier type dropdown.
- 2Set how many you need, from 1 to 100.
- 3Select Generate; the batch appears at once, with a note under the controls describing what the chosen format guarantees.
- 4Copy a single value with the button on its row, or the whole batch with the button in the panel header.
- 5Press Generate again for an entirely fresh set - nothing is retained between clicks.
Common use cases
- -Seeding a development database with a batch of primary keys that cannot collide with production data.
- -Writing test fixtures that need syntactically valid, stable UUIDs rather than hand-typed placeholders.
- -Choosing ULIDs for a high-insert table so new rows land together in the index instead of scattering across it.
- -Generating a correlation or request id by hand while reproducing a trace across several services.
- -Creating an unguessable path segment or invitation token where 122 bits of entropy is the property you rely on.
Frequently asked questions
- What is the difference between a UUID and a ULID?
- A UUID v4 is 128 bits of mostly random data written as 36 hexadecimal characters with dashes, defined by RFC 9562. A ULID is 26 Crockford base32 characters: a 48-bit millisecond timestamp followed by 80 random bits. Both are effectively collision-free, but ULIDs sort lexicographically by creation time, so they double as a rough ordering and behave better as database keys.
- Are UUID v4 values safe to use as security tokens?
- A v4 UUID from a cryptographically secure generator carries 122 bits of entropy, well beyond brute force, so it is acceptable as an unguessable identifier. Two caveats: it must come from a CSPRNG such as crypto.randomUUID rather than Math.random, and a UUID is an identifier, not a credential. It has no expiry, no scope and no signature, so anything needing those wants a real token.
- Why are random UUIDs bad primary keys?
- Because they carry no order. Each insert lands at a random point in a B-tree index, which causes page splits, spreads the working set across memory and inflates the index compared with a monotonically increasing key. On a write-heavy table the effect is measurable. Time-prefixed identifiers such as ULIDs, or UUID version 7 from RFC 9562, keep inserts clustered while staying globally unique.
- How many UUIDs can I generate before a collision?
- In practical terms, more than you will ever create. With 122 random bits, the chance of a duplicate among 103 trillion version 4 UUIDs is roughly one in a billion. What actually causes duplicates in the field is a weak random source - a generator seeded from the clock, or from Math.random - which is why this tool uses crypto.randomUUID.