ULID
Hacker ApprovedIdentifier format in Developer tools
Free spec for sortable IDs with a short string form that helps indexing and diagnostics. Critics say its monotonic mode can collide across threads.
Free spec for sortable IDs with a short string form that helps indexing and diagnostics. Critics say its monotonic mode can collide across threads.
24 people gave an opinion
- recommend it
- 17
- criticize it
- 7
- approval share
- 71%
Recommended in 5 of 13 months
- November 2025: not recommended
- December 2025: recommended
- January 2026: not recommended
- February 2026: not recommended
- March 2026: recommended
- April 2026: not recommended
- May 2026: recommended
- June 2026: recommended
- July 2026: not recommended
- August 2026: not recommended
- September 2026: not recommended
- October 2026: recommended
- November 2026: not recommended (month in progress)
Why it carries the badge
- 17 people recommend itNeeds 10 or more, met.
- 2.4 recommenders for every criticNeeds 2 to 1 or better, met.
- Recommended in 5 of 13 monthsNeeds 4 or more, met.
The same three rules apply to every product, and the badge can’t be bought. How the badge works
What people say about it
The reasons people give, with the number of comments that give each one. Open a reason to read what they said.
Why people recommend it
Each mark is one comment
Short, easy-to-select string form
“These IDs are very important for diagnostics, and making them easily selectable is a good goal in my book.”
Comment from 10 Dec 2025 in “ULID: Universally Unique Lexicographically Sortable Identifier” “I can easily select them as one word, instead of various implementations of browsers, terminals, DB guis”
Comment from 9 Dec 2025 in “ULID: Universally Unique Lexicographically Sortable Identifier” “really neatly solves the problem of text representation for UUID v7”
Comment from 14 Dec 2025 in “Ask HN: What Are You Working On? (December 2025)” - Comment from 24 Oct 2026 in “UUIDv7: Timestamps aren’t time-ordered and other oddities”
Time-sortable, reduces index fragmentation
“If you are looking for a monotonously increasing, sortable ID, you might then want to consider ULID”
Comment from 24 Oct 2026 in “UUIDv7: Timestamps aren’t time-ordered and other oddities” “ULIDs solve database index fragmentation caused when using UUIDv4”
Comment from 10 Dec 2025 in “ULID: Universally Unique Lexicographically Sortable Identifier” Low collision risk versus UUIDv7
“id's created within the same millisecond would be differentiated by the 80 bits of randomness (more than UUID v7)”
Comment from 9 Dec 2025 in “ULID: Universally Unique Lexicographically Sortable Identifier” “It's very near impossibly for there to be a conflict since the timestamp resolves at the microsecond level”
Comment from 10 Dec 2025 in “ULID: Universally Unique Lexicographically Sortable Identifier” “the extra random bits (over UUID7) reduce conflict possibilities by orders of magnitude”
Comment from 10 Dec 2025 in “ULID: Universally Unique Lexicographically Sortable Identifier” Used in production for years
“I've been using ULIDs in prod for many years now, and I love them.”
Comment from 15 Dec 2025 in “Avoid UUID Version 4 Primary Keys in Postgres” “This is why ULID exists and why I use them in my ext_id columns.”
Comment from 15 Dec 2025 in “Avoid UUID Version 4 Primary Keys in Postgres”
What people warn about
Each mark is one comment
Monotonic mode collides across threads
“It's easy to shoot yourself in the foot by blindly trusting ULID will always generate a unique ID across threads without blocking your thread.”
Comment from 10 Dec 2025 in “ULID: Universally Unique Lexicographically Sortable Identifier” “it has a sequential ID generation mode in its spec which is prone to conflicts on multi-threads, processes or hosts”
Comment from 9 Dec 2025 in “ULID: Universally Unique Lexicographically Sortable Identifier” “it must lock the sequence as it still uses a single random value”
Comment from 9 Dec 2025 in “ULID: Universally Unique Lexicographically Sortable Identifier” Randomness source left unspecified
“I love the aesthetics. The cryptographic strength tradeoffs (against UUIDv7) seem rough for a lot of applications, though.”
Comment from 9 Dec 2025 in “ULID: Universally Unique Lexicographically Sortable Identifier” “the ULID spec suggests you use a CSPRNG, but doesn't mandate that or provide specific advice on appropriate algorithms”
Comment from 10 Dec 2025 in “ULID: Universally Unique Lexicographically Sortable Identifier” Backdated records break ID guarantees
“one day records had to be backdated, meaning that either the IDs for those records had to be counterfeited”
Comment from 15 Dec 2025 in “Avoid UUID Version 4 Primary Keys in Postgres” “I only ever been an issue for me when I've chosen ULID as an ID for an event log”
Comment from 12 Dec 2025 in “ULID: Universally Unique Lexicographically Sortable Identifier” Easy to misuse as invariant
“It tempts you to treat it like an invariant when it isn't.”
Comment from 9 Dec 2025 in “ULID: Universally Unique Lexicographically Sortable Identifier” “It's quite easy to shoot themsleves in the foot”
Comment from 10 Dec 2025 in “ULID: Universally Unique Lexicographically Sortable Identifier”
What people said
31 of the 35 comments that mention it, newest first. Each links to the original comment.
“I also like ULID's shorter representation.”
“If you are looking for a monotonously increasing, sortable ID, you might then want to consider ULID”
“the time of creation is not secret then use ulids”
“I've been using ULIDs in prod for many years now, and I love them.”
“one day records had to be backdated, meaning that either the IDs for those records had to be counterfeited”
“This is why ULID exists and why I use them in my ext_id columns.”
“really neatly solves the problem of text representation for UUID v7”
“I only ever been an issue for me when I've chosen ULID as an ID for an event log”
“too random to be easily compared or recognized by eye”
“just implementation quirk for this particular library, the idea is sound”
“this doesn’t work well in S3 due to the timestamp being to the left of the randomness”
“It's very near impossibly for there to be a conflict since the timestamp resolves at the microsecond level”
“UUIDv7 has fewer quirks than ULID, no question about it.”
“These IDs are very important for diagnostics, and making them easily selectable is a good goal in my book.”
“I would also be happier if it was removed from the spec or at least marked with all the appropriate warning signs”
“It's quite easy to shoot themsleves in the foot”
“the ULID spec suggests you use a CSPRNG, but doesn't mandate that or provide specific advice on appropriate algorithms”
“the extra random bits (over UUID7) reduce conflict possibilities by orders of magnitude”
“there's zero reason to choose this weird scheme vs something that's just the full birthday bound”
“It's easy to shoot yourself in the foot by blindly trusting ULID will always generate a unique ID across threads without blocking your thread.”
“if you care about 0 collisions versus 1+ collisions, pick the monotonic version.”
“ULIDs solve database index fragmentation caused when using UUIDv4”
“This kind of collision you're concerned about is not an issue at all”
“now ULID only has one thing going on - smaller string representation”
“It tempts you to treat it like an invariant when it isn't.”
“it must lock the sequence as it still uses a single random value”
“id's created within the same millisecond would be differentiated by the 80 bits of randomness (more than UUID v7)”
“it has a sequential ID generation mode in its spec which is prone to conflicts on multi-threads, processes or hosts”
“I can easily select them as one word, instead of various implementations of browsers, terminals, DB guis”
“Whereas a format that is too clever is way more complicated to work with.”
“I love the aesthetics. The cryptographic strength tradeoffs (against UUIDv7) seem rough for a lot of applications, though.”
Counts come from 1,795,640 Hacker News comments, November 2025 to November 2026. How we count. Report a mistake.