UL

ULID Generator

Generate sortable ULIDs for logs, event streams, and distributed systems

ID Generation
🔒 100% client-side — your data never leaves this page
Maintained by Evan•Updated: September 30, 2026
Options
Settings

Choose count and casing first, then generate ULIDs immediately; sortability and timestamp insights are available in Advanced mode.

ULID Result
Generated ULIDs will appear here
🔒 Processed locally in your browser
Page reading mode

The full guide also includes pitfalls, worked examples, snippets, FAQs, and related tools for checking results or troubleshooting.

About this tool

Generate 1–50 ULIDs per batch from a 48-bit Unix millisecond timestamp and 80 random bits supplied by browser crypto. The supported timestamp range is 0–281474976710655 ms. Changing casing reformats existing results. Lexical order follows the encoded timestamp, but same-millisecond order and clock rollback are not made monotonic. Collisions are possible; this is not a uniqueness service or credential generator. Settings are stored locally, while generated IDs are not persisted by this tool.

Production Snippets

Example

text

00000000000000000000000000 → Unix ms 0
7ZZZZZZZZZZZZZZZZZZZZZZZZZ → maximum ULID

Scenario Recipes

01

Inspect a batch without assuming monotonic order

Goal: Prepare IDs for a log fixture and inspect their encoded time.

  1. Generate five ULIDs.
  2. Open Advanced to inspect the first timestamp, unique-value count and lexical-order indicator.
  3. Change casing and confirm the underlying IDs stay the same.

Result: A timestamp prefix helps grouping; it does not certify creation order or uniqueness.

Failure Clinic (Common Pitfalls)

Clock order is not event order

Cause: Same-millisecond randomness and clock rollback can change lexical ordering.

Fix: Use application ordering metadata or a suitable coordinated generator when strict order is required.

Frequently Asked Questions

What does a generated ULID contain?

A 48-bit Unix millisecond timestamp plus 80 random bits, encoded as 26 Crockford Base32 characters. The maximum value starts with 7; larger timestamps are rejected.

What batch sizes are supported?

An integer count from 1 to 50. Fractions, empty or out-of-range input are rejected rather than rounded.

Are the IDs strictly increasing and globally unique?

No. Randomness determines order within one millisecond, and clock rollback can move later-generated IDs backwards. Collisions are improbable with suitable usage but are not impossible.

Does changing casing generate new IDs?

No. Uppercase and lowercase represent the same ULIDs; the casing option reformats the current result list.

What happens if browser crypto fails?

Generation stops, old output is cleared, and an error is shown. There is no fallback to Math.random.

Are the results uploaded or saved?

Generation runs locally. Count and casing settings are saved in this browser; generated IDs are not persisted by the tool. Clear removes saved settings.

Keep browsing