Skip to content

UUID / ULID Generator: Generate UUIDs and ULIDs, then inspect them.

Runs in your browser — nothing you paste leaves this page. How we prove that

UUID and ULID generator playground

Examples
Options
fig. 26 — uuid-ulid-generator · utilities
Generated
100000000-0000-0000-0000-000000000000

UUID v4 and ULID values are minted in your browser from a secure random source — press Generate for a fresh batch.

Paste any UUID or ULID to decode its version, variant and embedded timestamp.

Results update as you type — press Enter to run now.

UUIDf47ac10b-58cc-4372-a567-0e02b2c3d479
FormatUUID (8-4-4-4-12 hex)
Version4
VariantRFC 4122

Batch out cryptographically random v4 UUIDs, the nil UUID or sortable ULIDs, copy any row, then decode a value’s version, variant and embedded timestamp — all client-side in your browser. Free, no signup, and nothing ever leaves your device.

The Gap

The wrong random source, a duplicate key.

Generating an identifier looks like a one-liner until the details bite. Reach for Math.random() and you get values that look like UUIDs but lack real entropy; hand-roll a ULID and it is easy to botch the Crockford alphabet or overflow the 48-bit timestamp so it no longer sorts.

This generator uses the browser’s cryptographic random source for v4 UUIDs and encodes ULIDs exactly to spec, so every value is well-formed and unique. Need to check what someone handed you? Paste it into Inspect and read back its version, variant and — for a ULID — the timestamp baked into its first 48 bits.

And don’t ask an AI to “generate a random UUID”: a language model predicts plausible-looking text, not cryptographically random bits, so its output can repeat and is never safe as a unique key. This tool draws real entropy from your browser, in your tab, with nothing uploaded.

Working with a signed token instead? The JWT Decoder splits and decodes a JWT for you.

The Pipeline

How it works.

Four deterministic steps — all inside your browser tab, drawing real entropy from the platform crypto source.

  1. Pick a type.

    Choose v4 UUID for a random key, ULID for a time-sortable one, or the nil UUID placeholder — the segment sets the format.

  2. Draw the bits.

    v4 pulls 122 random bits from the browser’s crypto source; a ULID stamps a 48-bit millisecond time then appends 80 random bits.

  3. Encode and format.

    Bytes are laid out as 8-4-4-4-12 hex for UUIDs or 26 Crockford base32 characters for ULIDs, honouring the uppercase toggle.

  4. Generate or inspect.

    Emit a batch and copy any row — or paste an identifier into Inspect to decode its version, variant and embedded timestamp.

Format Reference

UUID versions & ULID structure.

A UUID encodes its version and variant in fixed positions; a ULID splits its 128 bits into a sortable timestamp and randomness. Here is where each piece lives.

UUID version & variant

The version lives in nibble 13 and the variant in the top bits of nibble 17.

fig. 26.1 — uuid-layout
f47ac10b-58cc-4372-a567-0e02b2c3d479
                  ^         ^
                  |         └─ variant (top bits of nibble 17)
                  └─────────── version (nibble 13)

version  meaning
1        time + node (MAC)
3        name-based, MD5
4        random               ← generated here
5        name-based, SHA-1
7        time-ordered (Unix ms)

variant bits   name
10x            RFC 4122 (standard)
110x           Microsoft (reserved)
0xx            NCS (legacy)

ULID structure

Ten Crockford base32 chars of timestamp, then sixteen of randomness — sortable as plain text.

fig. 26.2 — ulid-structure
01ARYZ6S41 TSV4RRFFQ69G5FAV        (26 chars)
└───┬────┘ └──────┬────────┘
 48-bit ms      80-bit
 timestamp     randomness

· Crockford base32: 0-9 A-Z minus I L O U
· first 10 chars decode to a Unix ms time
· sorts chronologically as plain text
· 1 char of the time field carries only 3 bits,
  so a valid ULID's first char is <= '7'

Next Step

Need a fingerprint, not an ID? Hash it.

A UUID is a unique label; a hash is a deterministic digest of some content. The Hash Generator computes SHA-256 and friends in your browser, or, if you are holding a token instead of an ID, the JWT Decoder reads its claims.

identifiers.txt
v4 UUID  f47ac10b-58cc-4372-a567-0e02b2c3d479
ULID     01ARYZ6S41TSV4RRFFQ69G5FAV
nil      00000000-0000-0000-0000-000000000000

FAQ

Questions, answered.

Tap a question to expand the answer.

A UUID (Universally Unique Identifier) is a 128-bit value written as 32 hexadecimal digits in the 8-4-4-4-12 grouping, e.g. f47ac10b-58cc-4372-a567-0e02b2c3d479. Its size makes accidental collisions astronomically unlikely, so systems can mint identifiers independently — with no central coordinator — and still be confident they are unique. This tool generates version 4 (random) UUIDs, the standard choice when you just need a unique key.

A v4 UUID has 122 random bits (six bits are fixed to encode the version and variant). It is generated here with the browser’s cryptographic random source — crypto.randomUUID() when available, otherwise crypto.getRandomValues() — not Math.random(). With 122 bits of entropy you would need to generate billions of UUIDs before the chance of a single collision became meaningful.

A ULID (Universally Unique Lexicographically Sortable Identifier) is a 128-bit value encoded as 26 Crockford base32 characters. Its first 48 bits are a millisecond timestamp and the remaining 80 bits are random, so ULIDs sort chronologically as plain strings and stay unique. UUIDs are the interoperable standard; ULIDs trade a little standardisation for sortability and a shorter, URL-friendly encoding.

The nil UUID is the special all-zero value 00000000-0000-0000-0000-000000000000. It is defined by the spec as a placeholder — a UUID that is explicitly “none” — often used to represent an absent or not-yet-assigned identifier. Select “Nil UUID” to emit it.

For practical purposes, yes. Version 4 UUIDs draw on a cryptographic random source, and the probability of a collision is negligible for any realistic volume. They are not secret, though: a UUID is an identifier, not a token or a password. Never rely on one being unguessable for security.

Yes. Set the count (1–1000) and press Generate to produce a batch, then use “Copy all” to copy every value on its own line. Bulk generation is handy for seeding a database, building test fixtures or pre-allocating keys.

Paste any UUID or ULID into the Inspect field and it decodes what the value encodes: for a UUID, its version (the 13th nibble) and variant (RFC 4122, Microsoft or NCS); for a ULID, the embedded millisecond timestamp shown as an ISO-8601 date plus the Unix time and the random component. It is a quick way to confirm which flavour of identifier you were handed.

No. Every value is generated and every identifier is decoded entirely client-side in your tab — there is no server, no account and no logging. You can safely generate keys for private systems; nothing is uploaded.

A v4 UUID is random: 122 bits from a cryptographic random source, so every call produces a new identifier. A v5 UUID is name-based: it is derived from the SHA-1 hash of a namespace UUID plus a name, so the same namespace and name always yield the same UUID, which suits stable IDs for things such as URLs. This tool generates v4 UUIDs (plus the nil UUID and ULIDs), not v5; for v5 use a library such as Python's uuid.uuid5(). The inspector still reads a pasted v5 UUID and reports its version.

More free, private DevOps tools.

The UUID / ULID Generator is one tool in OpsCanopy — a growing canopy of browser-based validators, converters and generators that never touch a server.

42 free tools, every one offline-capable — opscanopy.com works with no signup and nothing uploaded.

Related tools: the JWT Decoder and the Hash Generator, or browse the full tools directory.

Provided as-is for convenience; a UUID or ULID is an identifier, not a secret — never rely on one being unguessable for security. OpsCanopy is free and open.