ULID Decoder (Timestamp & Randomness)
A ULID is a 26-character, lexicographically sortable identifier: the first 10 characters are a 48-bit millisecond timestamp and the last 16 are 80 bits of randomness, all in Crockford's Base32. Because the time sits in the high bits, ULIDs sort in creation order — which is exactly why people use them instead of random UUIDs. This decoder splits a ULID back apart: it reads the timestamp and shows it as ISO UTC, a relative "x ago", and raw epoch milliseconds, and it shows the random part in both Crockford Base32 and hex. Decoding is case-insensitive and forgiving of the classic Crockford confusables — I and L are read as 1, O as 0 — and it validates the length, the alphabet, and that the timestamp doesn't overflow 48 bits (the first character must be 0–7). Everything runs locally; nothing is uploaded.
First 10 chars = 48-bit ms timestamp, last 16 = 80-bit randomness. Crockford Base32: I/L→1, O→0, case-insensitive.
How to use
- Paste a ULID (26 characters, e.g. 01ARZ3NDEKTSV4RRFFQ69G5FAV).
- Read the creation timestamp (UTC, relative, and epoch ms).
- Copy the timestamp or the randomness in Crockford or hex as needed.
Frequently asked questions
- How does a ULID encode time?
- The first 10 Crockford-Base32 characters hold a 48-bit count of milliseconds since the Unix epoch (1970-01-01). 48 bits covers dates up to the year 10889, so the first character can only be 0–7; anything higher would overflow and is rejected as invalid. The remaining 16 characters are 80 bits of randomness.
- Why is decoding case-insensitive?
- ULIDs use Crockford's Base32, which is designed to be human-friendly: it's case-insensitive and treats the visually ambiguous letters I and L as 1 and O as 0. This tool normalises those before decoding, so a ULID typed in lowercase or with an O instead of a zero still decodes correctly.
- How is a ULID different from a UUID?
- Both are 128-bit IDs, but a ULID is encoded as 26 sortable Base32 characters with the timestamp in the high bits, so a list of ULIDs is already in creation order. A random UUID (v4) carries no time and doesn't sort meaningfully; UUID v7 is the standards-body answer to the same need. Use the UUID inspector for those.
- Is the timestamp exact?
- Yes — the millisecond timestamp is stored directly in the ULID, so the creation time is exact to the millisecond, assuming the generator's clock was correct. The relative time is computed against your device's current clock.
Guides on this topic
Related tools
Unix Timestamp Converter
Convert Unix timestamps to dates and dates back to timestamps.
Date Format Converter
Type any date (ISO, RFC, Unix epoch, locale) and see it rendered in 14+ standard formats side by side.
Epoch Time Converter (Unix, FILETIME, Excel)
Convert a single moment in time between 11 historical epoch formats: Unix seconds and ms, NTP, Windows FILETIME, .NET DateTime Ticks, Mac HFS+, Apple Cocoa CFAbsoluteTime, Excel 1900 and 1904 serial, ISO 8601, and RFC 2822.
UUID Inspector (Version, Variant, Time)
Paste any UUID to see its version (1–8), variant, and — for time-based v1, v6, and v7 — the embedded creation timestamp, clock sequence, and node/MAC, all decoded in your browser.
ULID / NanoID / CUID2 Generator
Bulk-generate ULIDs, NanoIDs, and CUID2 — modern UUID alternatives that are shorter, sortable, or collision-resistant.
Snowflake ID Decoder (Discord, Twitter)
Decode a Discord, Twitter/X, or Instagram Snowflake ID into its creation timestamp, worker/process or datacenter, and sequence — with a custom-epoch mode — entirely in your browser.