How to Generate UUIDs in Your Browser: A Step-by-Step Guide
Reviewed by the FreeOnline.fyi team · Updated 2026-09-11
When you're wiring up a new database table or passing payloads between microserv
When you're wiring up a new database table or passing payloads between microservices, you almost always need an identifier that won't collide. Universally Unique Identifiers — UUIDs — solve that problem with 128 bits of entropy and no central coordinator. If you've ever written `id UUID PRIMARY KEY DEFAULT gen_random_uuid()` in Postgres or seen a Stripe webhook return `evt_1Nxxx`, you've been working with them. The UUID Generator on FreeOnline.fyi is a quick way to produce RFC 4122 compliant values right in your browser, without installing a CLI, pulling a Node module, or signing up for anything.
The interface is split into two halves: controls on the left, results on the right. We kept that layout because developers iterate — pick a version, eyeball the format, copy, repeat — and they need the options to stay visible the whole time. Nothing is hidden behind a modal, and nothing requires a network round-trip after the page loads.
**Choosing the right version.** The version dropdown is the first decision and a
**Choosing the right version.** The version dropdown is the first decision and arguably the most important. v4 is the default for a reason: it pulls 122 bits from a cryptographically strong random source and is what most modern systems recommend. v1 mixes a timestamp with the generating machine's MAC address, which can be useful when you want sortable IDs but also leaks hardware information — most public-facing APIs have moved away from it. v5 is deterministic: feed it the same namespace and name and you always get the same UUID, which is perfect for content-addressable identifiers like a stable ID for `example.com/about`. Underneath all of this sits RFC 4122, the IETF document that defines the format, and the Wikipedia entry on Universally unique identifiers is a good companion if you want a more visual overview.
**Format toggles and the live preview.** Below the version selector you'll find three small switches: uppercase, hyphens, and braces. Hyphens are on by default because that's the canonical 8-4-4-4-12 form most code expects. Toggle them off and you get a 32-character hex blob, which some databases prefer for compact storage. The braces switch wraps the result in `{...}` or, with hyphens enabled, formats it as a URN like `urn:uuid:...`. The nice touch is the live format preview: as you flip toggles, a single example above the result list updates instantly, so you see exactly what your output will look like before generating a single real value. That detail saved us more than a few re-runs when we were testing edge cases.
**Bulk generation.** Quantity accepts anything from 1 to 500.
**Bulk generation.** Quantity accepts anything from 1 to 500. For a single UUID you click Generate and use the per-row copy icon. For more — seeding a test database, populating a CSV with fake IDs, generating fixture files — the bulk textarea underneath collects every result with newline separators and adds two useful affordances: Copy all and Download .txt. We use it ourselves to seed hundreds of rows in a Postgres dev database; paste the contents into a SQL `INSERT` and you're done in seconds. If you also work with image assets, the Image Compressor to target size tool pairs naturally for prepping fixtures that include media, and you can browse the rest of the FreeOnline.fyi free online tools catalog when you need something adjacent.
**v5 specifically: namespaces and names.** When you switch to v5, two new fields appear: a namespace selector (DNS, URL, OID, X500, or a custom UUID you paste in) and a name field. The combination is hashed with SHA-1 under the hood, which means the same namespace + name always produces the same UUID. We use this regularly to mint stable IDs for blog post slugs, Git branch names, and configuration keys — anywhere you want "this string → this ID" to be reproducible across environments. The result list even shows the resolved namespace UUID next to the output so you can verify you hashed against the right input.
**Honest limitations and a few habits worth keeping.** The tool runs entirely in
**Honest limitations and a few habits worth keeping.** The tool runs entirely in your browser, so the randomness comes from `crypto.getRandomValues` — fine for production-like values in modern engines, but worth confirming if you're targeting legacy environments. v1 output exposes the host's MAC-derived node identifier, so don't paste those into client-side code that ships to users; stick to v4 for public-facing IDs. And as with any generated identifier, double-check a sample against your downstream parser before committing to a format — particularly the URN variant, which some older libraries don't strip automatically. When in doubt, generate a handful, drop them into your test suite, and confirm they round-trip cleanly.