Sortable, URL-safe unique IDs — batch generate, monotonic mode, decode the timestamp back out — 100% in your browser
- Runs locally
- Category Developer & DevOps
- Best for Formatting, validating, shrinking, or inspecting code-adjacent text.
Strictly ascending, even within the same millisecond.
The decoded timestamp shows up here.
What this tool does
Generate ULIDs in the browser: 26-character, lexicographically sortable, URL-safe unique identifiers that beat random UUIDv4 when you want a primary key you can also sort by time. A ULID packs a 48-bit millisecond timestamp into its first 10 Crockford Base32 characters and 80 bits of randomness into the last 16, so a plain string sort of your IDs is also a sort by creation time — no separate created_at column required. Generate 1 to 100 at once, flip on monotonic mode for strictly ascending order even when many IDs land in the same millisecond, lowercase them, copy one or copy all. The built-in decoder takes any ULID and reads the timestamp back out as milliseconds plus a human-readable UTC and local time, and it validates the Crockford alphabet (no I, L, O, U) so a mistyped ID is caught immediately. Randomness comes from crypto.getRandomValues; nothing is uploaded.
Tool details
- Input
- Text + Numbers
- The page exposes text boxes, numeric controls, file pickers, or structured inputs depending on the tool.
- Output
- Live result + Copy + Download
- The result area focuses on usable output, with copy, download, or preview actions when supported.
- Privacy
- Browser-side processing
- The main tool logic does not call an external API, so inputs normally stay in the current tab.
- Save / share
- Shareable URL state
- Key settings are encoded in the URL so another person can reopen the same setup.
- Performance budget
- Initial JS <= 9 KB
- No WASM budget is declared, keeping the tool quick to open on mobile.
- Best fit
- Developer & DevOps · Developer
- Category and role tags drive related tools, internal links, and quick fit checks.
How to use
-
1. Input
Paste or drop your content into the tool panel.
-
2. Process
Click the button. All processing is local in your browser.
-
3. Copy / Download
Copy the result or download to disk in one click.
How ULID Generator fits into your work
Use it in the small gaps between coding, reviewing, debugging, and shipping.
Developer jobs
- Formatting, validating, shrinking, or inspecting code-adjacent text.
- Preparing snippets for documentation, tickets, commits, or handoff.
- Checking a small payload quickly without switching tools.
Developer checks
- Run irreversible transforms like minify or obfuscate on a copy.
- Keep secrets out of pasted snippets unless the tool explicitly stays local.
- Use your normal tests or linter before shipping transformed code.
Good next steps
These links move the current task into a more complete workflow.
- 1 JWT Decoder Decode JWT header / payload / signature — verify structure, check exp, copy claims — browser-only Open
- 2 File Hash Calculator Compute SHA-1, SHA-256, SHA-384, or SHA-512 hashes for uploaded files entirely in the browser. Open
- 3 UUID Generator Generate v4 random, v7 time-ordered, NIL, and Short UUIDs instantly — entirely in your browser. Open
Real-world use cases
Pick a primary key that sorts by insertion time
You are choosing IDs for a new Postgres table and want the latest rows without an extra ORDER BY created_at. Switch from UUIDv4 to ULID: a B-tree index on the ID column stays roughly time-ordered, so inserts append near the right edge instead of scattering, and "give me the 50 newest" is just ORDER BY id DESC LIMIT 50. Generate a few here to eyeball the format before you commit to the column type.
Build an append-only event log or outbox
An outbox table or event stream needs a key that is unique AND keeps events in the order they happened. Turn on monotonic mode and every ULID is strictly greater than the last, even at thousands of inserts per second within one millisecond. A consumer reads ORDER BY id and replays events in exactly the order the producer wrote them.
Decode a ULID from a log line to find when it happened
A support ticket quotes a record ID like 01HN8X... and you need to know when it was created without querying the database. Paste it into the decoder and read the exact millisecond plus the UTC time. No schema access, no created_at lookup — the timestamp is baked into the ID itself.
Seed test fixtures with realistic, ordered IDs
Writing integration tests that assert ordering? Generate a batch of monotonic ULIDs, drop them into your fixtures, and your assertions on "newest first" hold deterministically. Copy all and paste straight into a seed file or a JSON fixture.
Common pitfalls
Treating a ULID's randomness as a security token. The 80 random bits make collisions virtually impossible, but the timestamp half is fully readable. A ULID is an identifier, not a secret — never use one as a session token, password-reset code, or anything that must be unguessable in full.
Forgetting to enable monotonic mode for high-rate inserts. If you mint many IDs in the same millisecond without it, their order is random and your "sort by ID" ordering silently breaks for bursts. Turn monotonic on whenever insertion order must equal ID order.
Hand-typing or regex-validating ULIDs with the wrong alphabet. Crockford Base32 excludes I, L, O and U, so a validator that allows the full A–Z will accept malformed IDs. Decode or validate against the exact 32-character set, which is what this tool does.
Privacy
Every ULID is built in your browser tab. The 80 random bits come from crypto.getRandomValues — the same cryptographic source the platform uses for keys — never Math.random, and they never leave the page. The decoder runs entirely client-side too, so a ULID you paste to inspect its timestamp is not logged or transmitted. Only your settings (count and the monotonic / lowercase toggles) ride in the shareable URL; the generated IDs themselves are re-randomized on every click and stay local.
FAQ
Tool combos
Folks in your role tend to reach for these alongside this tool.
- 555 Timer Calculator Astable f = 1.44/((R1+2R2)C) + monostable t = 1.1RC — pick R1, R2, C in Ω/kΩ and µF/nF, read frequency, duty cycle and pulse width — browser-only
- Add Line Numbers Number every line of pasted text — set start, step and separator, zero-pad to align, skip blanks, or strip numbers back off — browser-only
- AES Text Encryptor Encrypt & decrypt text with a password — AES-256-GCM + PBKDF2 via WebCrypto — 100% in your browser, nothing uploaded
- Affine Cipher Encoder & Decoder Encrypt and decrypt the ax+b affine cipher with live modular-inverse check, browser-only