Free Online ULID Generator & ULID ↔ UUID Converter

Generate and decode Universally Unique Lexicographically Sortable Identifiers (ULIDs) online - each result instantly reveals its decoded timestamp so you can inspect creation time at a glance. Convert any ULID to UUID and back, or batch-generate up to 20 at once. No sign-up, no tracking, 100% free - processed entirely in your browser.

Related Developer Tools

Last updated: May 26 2026

Built and reviewed by the QuickTooly engineering team

ULID Generator Guide

What Is a ULID?

A ULID (Universally Unique Lexicographically Sortable Identifier) is a 128-bit identifier encoded as a 26-character string using Crockford's Base32 alphabet - for example 01ARZ3NDEKTSV4RRFFQ69G5FAV. Like UUIDs, ULIDs are globally unique without a central authority. Unlike UUID v4, ULIDs are lexicographically sortable by default, because the first 10 characters encode a millisecond-precision Unix timestamp.

ULIDs were designed to address the main shortcoming of UUID v4 for database use: random UUIDs cause index fragmentation. A ULID's time-ordered prefix keeps database B-tree indexes tightly clustered, reducing page splits and improving INSERT performance at scale - similar to UUID v7, but in a more URL-friendly, human-readable encoding.

ULID Format Breakdown

A ULID is always 26 uppercase characters split into two logical parts:

  • Characters 1–10 (timestamp): Encodes the Unix time in milliseconds. The maximum representable time is ZZZZZZZZZZ = year 10889. Monotonically increases as time passes, ensuring newer ULIDs always sort after older ones.
  • Characters 11–26 (randomness): 80 bits of cryptographically random data, providing collision resistance even when multiple ULIDs are generated within the same millisecond.

The Crockford Base32 alphabet (0123456789ABCDEFGHJKMNPQRSTVWXYZ) deliberately excludes the letters I, L, O, and U to avoid visual ambiguity and profanity. It is case-insensitive and URL-safe. For the complete standard, see the official ULID specification.

Decoding a ULID Timestamp

Because the first 10 characters of every ULID encode a millisecond-precision Unix timestamp, you can decode any ULID back to its exact creation time. In JavaScript, the ulid library exposes this as decodeTime(id), which returns milliseconds since the Unix epoch - pass it to new Date(ms).toISOString() to get a human-readable result. This ULID decoder runs automatically above: every generated ULID shows its decoded timestamp directly beneath it.

ULID vs UUID - Which Should You Use?

Both formats represent 128-bit unique identifiers, but differ in encoding and use case:

ULIDUUID v4UUID v7
Length26 chars36 chars36 chars
EncodingCrockford Base32Hex + hyphensHex + hyphens
SortableYesNoYes
TimestampYes (ms)NoYes (ms)
URL-safeYesNoNo
StandardULID specRFC 4122RFC 9562
Best forCompact sortable IDsSecrets, tokensUUID-column DBs

Rule of thumb: Use ULID when you want a compact sortable ID without UUID format constraints. Use UUID v7 when your stack already expects the standard UUID format. Use UUID v4 for secrets and tokens where ordering should not be guessable.

How ULID ↔ UUID Conversion Works

A ULID and a UUID both represent the same 128-bit value - they are just two different encodings. Converting between them is a pure re-encoding operation with no data loss:

  • ULID → UUID: Decode the 26-character Crockford Base32 string to a 128-bit integer, then format it as a standard 8-4-4-4-12 hex UUID.
  • UUID → ULID: Strip hyphens from the UUID, interpret the 32 hex characters as a 128-bit integer, then re-encode as 26 Crockford Base32 characters.

This means you can store a ULID-generated ID in a UUID database column and retrieve it as a ULID at any time. The round-trip is lossless and deterministic.

Common ULID Use Cases

ULIDs are popular as database primary keys in distributed systems (PostgreSQL, MySQL, MongoDB, DynamoDB), file and object names in cloud storage, log correlation IDs where chronological ordering is useful for debugging, event sourcing aggregate IDs, and any REST API resource identifier where you want the ID itself to convey creation order without a separate timestamp column.

Why Use This Online ULID Generator?

  • Timestamp visible at a glance: Each generated ULID shows its decoded creation time directly below it.
  • Batch generation: Generate up to 20 ULIDs at once and copy individually or all together.
  • Built-in ULID ↔ UUID converter: Paste a ULID to get a UUID, or paste a UUID to get its ULID equivalent - live, no button required.
  • Private & secure: Everything runs in your browser - no server, no logs.
  • 100% free: No account, no watermark, no limits.

How to Generate a ULID Online

  1. Set the Count field to any number from 1 to 20.
  2. Click Generate ULID - each result displays the ULID string and its decoded timestamp.
  3. Click Copy next to any individual ULID, or use Copy All to grab the entire list at once.

Frequently Asked Questions

What does ULID stand for?

ULID stands for Universally Unique Lexicographically Sortable Identifier. It was designed to combine the global uniqueness of UUIDs with the sort-friendly, time-ordered properties needed for efficient database indexing.

Are ULIDs compatible with UUID database columns?

Yes. A ULID is a 128-bit value just like a UUID. You can convert a ULID to its UUID representation and store it in any uuid or CHAR(36) database column. The converter tab above does this for you instantly.

Can two ULIDs generated at the same millisecond collide?

Extremely unlikely. The 80 random bits in the randomness component give 280 (~1.2 × 1024) possible values per millisecond. The ULID spec also defines a monotonic mode where the random component increments by one for each ULID generated within the same millisecond, guaranteeing sort order even in high-throughput scenarios.

Is a ULID URL-safe?

Yes. The Crockford Base32 alphabet uses only alphanumeric characters and contains no special characters, making ULIDs safe to use in URLs, file names, and query parameters without any encoding. They are also case-insensitive, so 01arZ3ndeKTSv4RRffQ69G5fAV is the same ULID as 01ARZ3NDEKTSV4RRFFQ69G5FAV.

What is the difference between ULID and UUID v7?

Both embed a millisecond timestamp for lexicographic sorting. The key differences: ULID uses Crockford Base32 (26 chars, no hyphens), while UUID v7 uses standard hex with hyphens (36 chars). UUID v7 is defined in RFC 9562 and is natively supported in PostgreSQL 17+ UUID columns, making it the better choice when strict UUID format compliance is required. ULID is preferable when you want a compact, human-readable, URL-safe identifier.

Is my data safe when I generate ULIDs?

Completely. This tool processes everything locally in your browser using the open-source ulid library. No data is sent to any server, stored, or logged.

How do I generate a ULID in JavaScript or Node.js?

Install the open-source ulid package and call ulid() to generate a ULID string. Use decodeTime(id) to extract the embedded millisecond timestamp. This tool uses that same library client-side - no server required.

JavaScript / Node.js

// npm install ulid
import { ulid, decodeTime } from 'ulid'

const id  = ulid()                      // '01ARZ3NDEKTSV4RRFFQ69G5FAV'
const ms  = decodeTime(id)              // milliseconds since Unix epoch
const iso = new Date(ms).toISOString()  // '2016-07-31T00:15:00.000Z'

Python

# pip install python-ulid
from ulid import ULID

uid = ULID()
print(str(uid))      # '01ARZ3NDEKTSV4RRFFQ69G5FAV'
print(uid.datetime)  # datetime with UTC timezone

Go

// go get github.com/oklog/ulid/v2
import "github.com/oklog/ulid/v2"

id := ulid.Make()
fmt.Println(id.String())                   // "01ARZ3NDEKTSV4RRFFQ69G5FAV"
fmt.Println(ulid.Time(id.Time()).String()) // RFC3339 creation time

How do I decode a ULID timestamp?

Every ULID encodes its creation time in its first 10 characters as a 48-bit millisecond-precision Unix timestamp. To decode it, convert those characters from Crockford Base32 to an integer - that integer is milliseconds since the Unix epoch. In JavaScript, call decodeTime(id) from the ulid library, then pass the result to new Date(ms).toISOString() for a human-readable timestamp. This ULID decoder runs automatically above - every generated ULID shows its decoded timestamp directly beneath it.

What is ULID monotonic mode?

Standard ULID generation uses fresh random bits for the 80-bit randomness component on every call. If two ULIDs are generated within the same millisecond they share an identical timestamp prefix, so their relative sort order is determined by random chance. Monotonic mode addresses this: each ULID generated within the same millisecond increments the previous random component by exactly 1, guaranteeing sort order even at very high throughput. The ulid library provides monotonicFactory() for this use case. This tool uses standard (non-monotonic) generation, which is sufficient for most applications.