ulid / spec

The canonical spec for ulid
GNU General Public License v3.0
9.78k stars 173 forks source link

Listed packages may not comply with spec #80

Open ChrisKeefe opened 1 year ago

ChrisKeefe commented 1 year ago

The specification README lists many packages that are not compliant with stated specifications.

Regardless of your feelings on monotonicity (#11, #40, etc), the current spec claims ULIDs provide it, and that they throw an error on overflow. Many listed packages do not implement monotonicity, do not throw, or implement it incorrectly (e.g. by incrementing the timestamp).

Recommended resolutions

E.g. a column in the README table describing whether a package implements monotonicity per spec would be useful to potential users

joonatanu-softwerk commented 4 months ago

Listed C# library does not comply with the spec and it is their consciously made decision to violate the spec: https://github.com/Cysharp/Ulid/issues/61 Therefore it is not a good example of spec implementation.

I suggest to refer to this library instead: https://github.com/ultimicro/netulid

Seramis commented 3 months ago

Here's another ULID implementation in C#: https://github.com/ByteAether/Ulid This implementation avoids throwing exception when generating ULID. This topic is discussed here: https://github.com/ulid/spec/issues/39