ULID Decoder (Timestamp & Randomness)
Developer
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.
Related tools
Base64 to Hex Converter (and back)
Convert a Base64 string to hexadecimal bytes and hex back to Base64, with URL-safe support, in your browser.
Quoted-Printable Encoder & Decoder
Encode text to MIME Quoted-Printable (RFC 2045) or decode it back — handling =XX escapes, soft line breaks, and UTF-8 — entirely in your browser, with 76-character line wrapping on encode.
Hash Generator (SHA)
Generate SHA-1, SHA-256, SHA-384, and SHA-512 hashes from text.
URL Encoder / Decoder
Percent-encode text for URLs, or decode encoded URLs back to text.
Base64 Encoder / Decoder
Encode text to Base64 or decode Base64 back to text, instantly.
JSON Formatter & Validator
Format, beautify, minify, and validate JSON right in your browser.