Open ChrisKeefe opened 1 year 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
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
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