https://github.com/scru128/rust
SCRU128 Rust Implementation
https://github.com/scru128/rust
guid identifier ksuid ulid uuid
Last synced: 3 months ago
JSON representation
SCRU128 Rust Implementation
- Host: GitHub
- URL: https://github.com/scru128/rust
- Owner: scru128
- License: apache-2.0
- Created: 2021-09-29T11:29:01.000Z (almost 5 years ago)
- Default Branch: main
- Last Pushed: 2026-03-29T13:35:22.000Z (3 months ago)
- Last Synced: 2026-03-29T16:39:46.446Z (3 months ago)
- Topics: guid, identifier, ksuid, ulid, uuid
- Language: Rust
- Homepage:
- Size: 314 KB
- Stars: 13
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# SCRU128: Sortable, Clock and Random number-based Unique identifier
[](https://crates.io/crates/scru128)
[](https://github.com/scru128/rust/blob/main/LICENSE)
SCRU128 ID is yet another attempt to supersede [UUID] for the users who need
decentralized, globally unique time-ordered identifiers. SCRU128 is inspired by
[ULID] and [KSUID] and has the following features:
- 128-bit unsigned integer type
- Sortable by generation time (as integer and as text)
- 25-digit case-insensitive textual representation (Base36)
- 48-bit millisecond Unix timestamp that ensures useful life until year 10889
- Up to 281 trillion time-ordered but unpredictable unique IDs per millisecond
- 80-bit three-layer randomness for global uniqueness
```rust
// generate a new identifier object
let x = scru128::new();
println!("{}", x); // e.g., "036z951mhjikzik2gsl81gr7l"
println!("{}", x.to_u128()); // as a 128-bit unsigned integer
// generate a textual representation directly
println!("{}", scru128::new_string()); // e.g., "036z951mhzx67t63mq9xe6q0j"
```
See [SCRU128 Specification] for details.
[UUID]: https://en.wikipedia.org/wiki/Universally_unique_identifier
[ULID]: https://github.com/ulid/spec
[KSUID]: https://github.com/segmentio/ksuid
[SCRU128 Specification]: https://github.com/scru128/spec
## Crate features
Default features:
- `std` enables, among others, the default timestamp source for `Generator`
using `std::time`. Without `std`, users must provide their own time source
implementing the `TimeSource` trait.
- `global_gen` (implies `std`) provides the process-wide default SCRU128
generator and enables the `new()` and `new_string()` functions.
Optional features:
- `serde` enables serialization/deserialization of `Id` via serde.
- `rand010` enables an adapter for `rand::Rng` to use `rand` (v0.10) and any
other conforming random number generators with `Generator`.
## License
Licensed under the Apache License, Version 2.0.
## See also
- [docs.rs/scru128](https://docs.rs/scru128)