Hacker ApprovedDepartments

ULID

Hacker Approved

Identifier 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%
Each figure is one person. RecommendsCriticizes

Recommended in 5 of 13 months

  1. November 2025: not recommended
  2. December 2025: recommended
  3. January 2026: not recommended
  4. February 2026: not recommended
  5. March 2026: recommended
  6. April 2026: not recommended
  7. May 2026: recommended
  8. June 2026: recommended
  9. July 2026: not recommended
  10. August 2026: not recommended
  11. September 2026: not recommended
  12. October 2026: recommended
  13. 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)”
  • 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.”

RecommendsComment from 24 Oct 2026 in “UUIDv7: Timestamps aren’t time-ordered and other oddities”

“If you are looking for a monotonously increasing, sortable ID, you might then want to consider ULID”

RecommendsComment from 24 Oct 2026 in “UUIDv7: Timestamps aren’t time-ordered and other oddities”

“the time of creation is not secret then use ulids”

RecommendsComment from 6 Jun 2026 in “The perils of UUID primary keys in SQLite”

“I've been using ULIDs in prod for many years now, and I love them.”

RecommendsComment from 15 Dec 2025 in “Avoid UUID Version 4 Primary Keys in Postgres”

“one day records had to be backdated, meaning that either the IDs for those records had to be counterfeited”

CriticizesComment 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.”

RecommendsComment from 15 Dec 2025 in “Avoid UUID Version 4 Primary Keys in Postgres”

“really neatly solves the problem of text representation for UUID v7”

RecommendsComment from 14 Dec 2025 in “Ask HN: What Are You Working On? (December 2025)”

“I only ever been an issue for me when I've chosen ULID as an ID for an event log”

CriticizesComment from 12 Dec 2025 in “ULID: Universally Unique Lexicographically Sortable Identifier”

“too random to be easily compared or recognized by eye”

MixedComment from 10 Dec 2025 in “Distributed ID formats are architectural commitments, not just data types”

“just implementation quirk for this particular library, the idea is sound”

MixedComment from 10 Dec 2025 in “ULID: Universally Unique Lexicographically Sortable Identifier”

“this doesn’t work well in S3 due to the timestamp being to the left of the randomness”

CriticizesComment from 10 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”

RecommendsComment from 10 Dec 2025 in “ULID: Universally Unique Lexicographically Sortable Identifier”

“UUIDv7 has fewer quirks than ULID, no question about it.”

CriticizesComment from 10 Dec 2025 in “ULID: Universally Unique Lexicographically Sortable Identifier”

“These IDs are very important for diagnostics, and making them easily selectable is a good goal in my book.”

RecommendsComment from 10 Dec 2025 in “ULID: Universally Unique Lexicographically Sortable Identifier”

“I would also be happier if it was removed from the spec or at least marked with all the appropriate warning signs”

CriticizesComment from 10 Dec 2025 in “ULID: Universally Unique Lexicographically Sortable Identifier”

“It's quite easy to shoot themsleves in the foot”

CriticizesComment from 10 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”

CriticizesComment from 10 Dec 2025 in “ULID: Universally Unique Lexicographically Sortable Identifier”

“the extra random bits (over UUID7) reduce conflict possibilities by orders of magnitude”

RecommendsComment from 10 Dec 2025 in “ULID: Universally Unique Lexicographically Sortable Identifier”

“there's zero reason to choose this weird scheme vs something that's just the full birthday bound”

CriticizesComment from 10 Dec 2025 in “ULID: Universally Unique Lexicographically Sortable Identifier”

“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.”

CriticizesComment from 10 Dec 2025 in “ULID: Universally Unique Lexicographically Sortable Identifier”

“if you care about 0 collisions versus 1+ collisions, pick the monotonic version.”

RecommendsComment from 10 Dec 2025 in “ULID: Universally Unique Lexicographically Sortable Identifier”

“ULIDs solve database index fragmentation caused when using UUIDv4”

MixedComment from 10 Dec 2025 in “ULID: Universally Unique Lexicographically Sortable Identifier”

“This kind of collision you're concerned about is not an issue at all”

RecommendsComment from 10 Dec 2025 in “ULID: Universally Unique Lexicographically Sortable Identifier”

“now ULID only has one thing going on - smaller string representation”

CriticizesComment from 10 Dec 2025 in “ULID: Universally Unique Lexicographically Sortable Identifier”

“It tempts you to treat it like an invariant when it isn't.”

CriticizesComment from 9 Dec 2025 in “ULID: Universally Unique Lexicographically Sortable Identifier”

“it must lock the sequence as it still uses a single random value”

CriticizesComment from 9 Dec 2025 in “ULID: Universally Unique Lexicographically Sortable Identifier”

“id's created within the same millisecond would be differentiated by the 80 bits of randomness (more than UUID v7)”

RecommendsComment from 9 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”

CriticizesComment from 9 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”

RecommendsComment from 9 Dec 2025 in “ULID: Universally Unique Lexicographically Sortable Identifier”

“Whereas a format that is too clever is way more complicated to work with.”

CriticizesComment from 9 Dec 2025 in “ULID: Universally Unique Lexicographically Sortable Identifier”

“I love the aesthetics. The cryptographic strength tradeoffs (against UUIDv7) seem rough for a lot of applications, though.”

MixedComment from 9 Dec 2025 in “ULID: Universally Unique Lexicographically Sortable Identifier”

Counts come from 1,795,640 Hacker News comments, November 2025 to November 2026. How we count. Report a mistake.