Skip to content
uencoder
TASK

Generate ULIDs for time-sortable identifiers

ULID (Universally Unique Lexicographically Sortable Identifier) combines a timestamp with random data, producing IDs that sort by creation time.

  1. 1

    ULID is a 26-character string: 10 chars for timestamp (milliseconds, 48 bits) + 16 chars for randomness (80 bits). ULIDs are lexicographically sortable — sorting ULIDs as strings sorts them by creation time. This is valuable for database indexes (time-ordered), log entries, and event sourcing. ULIDs are URL-safe (Crockford Base32 alphabet: 0-9A-Z, excluding I, L, O, U).

  2. 2
    UUID / ULID Generator →

    Generate a UUID for comparison. UUID v4 is random — sorting UUIDs gives no meaningful order. ULID sorts by time — useful for database primary keys where time-ordered records improve cache locality and range query performance. Use UUID for pure uniqueness; use ULID when time-ordering matters.

  3. 3
    Timestamp Converter →

    Get the current timestamp to understand the ULID time component. The first 10 characters of a ULID encode the millisecond timestamp. This makes ULIDs decodable — you can extract the creation time without a database lookup. Use this for debugging and log analysis.

  4. 4
    Base62 Encode →

    For alternative sortable IDs, encode a timestamp + random number in Base62. This is similar to ULID but uses a larger alphabet (62 chars vs 32), producing shorter IDs. However, ULID's Crockford Base32 is more robust (no ambiguous characters) and standardized.

Frequently asked questions

ULID vs UUID for database keys?
Use ULID when you need time-ordered records (better index locality, range queries, chronological sorting). Use UUID v4 when you need pure randomness (no timing information leaked). Use UUID v7 (time-ordered, RFC 9562) as a standardized alternative to ULID. ULID is 26 chars; UUID is 36 (with hyphens) or 32 (without).
Does ULID leak timing information?
Yes — the first 10 characters encode the millisecond timestamp. This reveals when the ID was created. For most applications, this is fine (creation time is not secret). For privacy-sensitive applications (anonymous posts, medical records), use a random ID (UUID v4, NanoID) instead. You can also use ULID with a random start time (offset) to obscure the actual time.

Workflows that solve this

Learn more

Want to understand why?

Related tools