What this UUID Generator creates
UuidGenerator.jsx builds one or more identifier strings in the browser and shows them in Generated UUIDs. Supported modes are v4 (button label “v4 Random”, default useState) and v7 (button label “v7 Time-ordered”). Quantity defaults to DEFAULT_QUANTITY 5. There is no file picker and no input for an existing UUID.
A generated string is the output of generateUuidV4 or generateUuidV7 plus optional formatUuid wrapping. It does not reserve a database key, prove an identity, authenticate a user, prevent collisions in every system, or replace server-side validation. The amber sidebar states that UUIDs are identifiers, not secrets, and not to use them as passwords or access tokens.
UUID versions and output formats available in this tool
- v4 Random
- generateUuidV4. Used when version !== "v7". Default on load and after Clear / Load example.
- v7 Time-ordered
- generateUuidV7 when version === "v7". Label only; see ordering section.
- Display transforms
- formatUuid: toLowerCase, then optional toUpperCase, replace(/-/g, ""), wrap { }, wrap " ".
- Layout
- lines (join \n, per-row Copy), comma (join ", "), json (JSON.stringify(array, null, 2)).
No other version buttons exist (no v1, v3, v5, or nil). formatUuidBytes always emits lowercase hex groups 8-4-4-4-12 with hyphens before formatUuid runs. Character length in the sidebar is formattedUuids[0]?.length only — the first displayed string, not a sum of the batch.
How each available version is generated here
generateUuidV4: if crypto.randomUUID is a function, the return value of crypto.randomUUID() is used as-is. Else, if crypto.getRandomValues exists, the helper fills Uint8Array(16), sets bytes[6] = (bytes[6] & 0x0f) | 0x40 and bytes[8] = (bytes[8] & 0x3f) | 0x80, then formatUuidBytes. If getRandomValues is also missing, it throws CRYPTO_UNAVAILABLE (“Secure UUID generation is unavailable in this browser.”). There is no Math.random path.
generateUuidV7 always requires getRandomValues (it does not call randomUUID). It fills 16 bytes, reads const timestamp = BigInt(Date.now()), writes that value as six big-endian bytes into bytes[0]–bytes[5] (shifts 40n…0n and 0xffn), then sets bytes[6] = (bytes[6] & 0x0f) | 0x70 and bytes[8] = (bytes[8] & 0x3f) | 0x80, then formatUuidBytes. Remaining bytes stay whatever getRandomValues wrote, aside from those masked nibble/variant bits.
Batch generation, copying, and downloading, if implemented
handleGenerate builds Array.from({ length: quantity }, () => generateUuid(version)) after clampQuantity (parseInt, NaN → DEFAULT_QUANTITY 5, then min/max 1…MAX_QUANTITY 1000). If quantityInvalid, it sets “Enter a quantity between 1 and 1000.” and returns without generating. Generate is also disabled while quantityInvalid. Load example ignores the current version toggle and always creates DEFAULT_QUANTITY v4 values.
Copy uses navigator.clipboard.writeText on one formatted line or on displayOutput. Failure sets “Copy failed. Please copy manually.” handleDownload writes displayOutput to a Blob text/plain;charset=utf-8 named uuids.txt. Changing format options remaps rawUuids in useMemo; it does not call generateUuid again.
UUIDs versus passwords, hashes, and database validation
This page does not implement generatePassword, hashing, or a uniqueness query. Hash Generator digests text or a file to hex; this list is not a digest of anything you typed. Password Generator builds passwords, passphrases, or PINs; the sidebar here says not to use these strings as passwords or access tokens. There is no database connection, no INSERT, and no check that a value is unused.
How to use the real controls
- Idle: v4 Random pressed, Quantity 5, Generated UUIDs placeholder “Generated UUIDs will appear here.”, Lines pressed. Copy all, Download .txt, and Clear are disabled. There is no file picker.
- Click v4 Random or v7 Time-ordered (aria-label UUID version). Switching does not generate. Set Quantity (min 1, max 1000). Invalid input shows “Enter a quantity between 1 and 1000.” and disables Generate UUIDs.
- Click Generate UUIDs to fill the list, or Load example for five v4 values with default formats. UUID summary lists Version, Quantity, Format, Generated at, and Character length.
- Under Format options, click Uppercase, Remove hyphens, Add braces {}, or Add quotes "". Under Output format, click Lines, Comma-separated, or JSON array. These remap rawUuids; they do not call generateUuid.
- In Lines, each row has Copy (Copied for 1.5 seconds). Click Copy all or Download .txt (filename uuids.txt). Both stay disabled while displayOutput is empty. Copy failure is “Copy failed. Please copy manually.”
- Click Clear to drop the list and restore v4, Quantity 5, and default formats. Clear stays disabled when the list is empty and Quantity is still 5. There is no history or localStorage.
Ordering, timestamps, and uniqueness boundaries
A v7 batch is the order of the Array.from callback. generateUuidV7 does not keep a last-timestamp, does not increment a counter when Date.now() repeats, and does not sort rawUuids. Two calls in the same millisecond write the same six timestamp bytes; the rest of each 16-byte buffer is a new getRandomValues fill (then version/variant masks). The UI word “Time-ordered” is not a monotonic guarantee in this file.
The page never compares strings inside the batch and never talks to a registry. Duplicate strings in one run are not detected. Uniqueness, if required, has to be enforced by the system that stores the identifier — this component does not do that.
What this tool does not verify or guarantee
- That a value is unused in your database or globally unique.
- That v7 values are sorted, monotonic, or safe as a clustered primary-key sequence.
- That crypto.randomUUID()’s browser output matches a specific RFC text — this file only calls that function or applies the 0x40/0x80 (v4) or 0x70/0x80 (v7) masks shown above.
- Identity, authentication, session tokens, or password storage.
- Parsing or validating a UUID you paste in.
- History, persistence, or recovery after Clear or refresh.
Privacy and browser-processing boundaries
generateUuidV4 / generateUuidV7 run in the page. UuidGenerator.jsx does not import trackToolEvent and does not POST the list to a UUID API. Copy uses the clipboard when the browser allows it. Download creates an object URL in the tab. Site assets, ads, extensions, and shared screens remain outside this file. React state is the only store; there is no localStorage key in this component.
A short identifier-review checklist
- Confirm v4 vs v7 before Generate UUIDs; switching the toggle does not rewrite an existing list.
- If you need a new batch after changing version or quantity, click Generate UUIDs again.
- Treat “v7 Time-ordered” as a label: same-millisecond rows share Date.now() bytes and are not sequenced here.
- Read format options as display-only (hyphens/braces/quotes/case/layout), not new random bytes.
- Do not treat Copy/Download as a reservation in a database.
- Use Password Generator if you need a password, passphrase, or PIN — not this list.
When another DevToolKit tool is more appropriate
- Password Generator — when you need a password, passphrase, or PIN. This page emits v4/v7 identifier strings in the formats above, not those credential formats.
- Hash Generator — when you need a lowercase hex digest of text or a file. This page does not hash the identifiers it creates.
- Timestamp Converter — when you need Unix seconds or milliseconds as a date. v7 here writes Date.now() into six bytes; this page does not convert that field to a readable datetime.