Listed packages may not comply with spec
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
- modify the spec (e.g. clarifying whether sections are optional), and/or
- clarify which listed implementations are fully compliant
E.g. a column in the README table describing whether a package implements monotonicity per spec would be useful to potential users
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