#uuid #guid #ulid #ksuid

no-std scru128

SCRU128: Sortable, Clock and Random number-based Unique identifier

38 releases (24 stable)

Uses new Rust 2024

4.0.0-beta.1 Oct 4, 2025
3.2.3 Nov 8, 2025
3.2.2 Oct 4, 2025
3.1.0 Sep 7, 2024
0.2.1 Nov 21, 2021

#112 in Algorithms

Download history 348/week @ 2025-09-25 408/week @ 2025-10-02 299/week @ 2025-10-09 184/week @ 2025-10-16 98/week @ 2025-10-23 90/week @ 2025-10-30 183/week @ 2025-11-06 195/week @ 2025-11-13 124/week @ 2025-11-20 132/week @ 2025-11-27 292/week @ 2025-12-04 301/week @ 2025-12-11 166/week @ 2025-12-18 257/week @ 2025-12-25 413/week @ 2026-01-01 139/week @ 2026-01-08

1,021 downloads per month
Used in 7 crates

Apache-2.0

58KB
986 lines

SCRU128: Sortable, Clock and Random number-based Unique identifier

Crates.io 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
// 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.

Crate features

Default features:

  • std configures Scru128Generator with the system clock. Without std, this crate provides basic SCRU128 primitives available under no_std environments.
  • default_rng (implies std) provides the default random number generator for Scru128Generator and enables the Scru128Generator::new() constructor.
  • global_gen (implies default_rng) provides the process-wide default SCRU128 generator and enables the new() and new_string() functions.

Optional features:

  • serde enables serialization/deserialization of Scru128Id via serde.
  • rand09 enables Scru128Generator::with_rand09() that integrates rand crate (v0.9).
  • rand08 enables Scru128Generator::with_rand08() that integrates rand crate (v0.8).

License

Licensed under the Apache License, Version 2.0.

See also

Dependencies

~43–340KB