A ULID is a 128-bit identifier: a 48-bit Unix-millisecond timestamp followed by 80 bits of randomness, rendered as 26 characters of Crockford's Base32. Because the timestamp is the high-order portion and Base32 preserves order, ULIDs sort lexicographically by creation time. It is UUID-compatible in size (128 bits) but more compact and case-insensitive in text.
Unix timestamp in milliseconds; encodes as the first 10 Base32 characters.
randomness
80
Cryptographically random; encodes as the last 16 Base32 characters.
26-char string = 10 chars timestamp + 16 chars randomness. Crockford Base32 excludes I, L, O, U to avoid ambiguity; canonical form is uppercase but decoding is case-insensitive.
Lexicographically sortable: the millisecond timestamp is the most-significant field, so string sort == time sort. Monotonic mode increments the random component within the same millisecond to preserve ordering.
128 bits total, so a ULID can be stored in a UUID column; conceptually parallel to UUIDv7 (same 48-bit ms time + randomness split) but with a different text encoding.
Example 01ARZ3NDEKTSV4RRFFQ69G5FAV is the canonical example from the ULID spec.