# SCRU64: Sortable, Clock-based, Realm-specifically Unique identifier [![Crates.io](https://img.shields.io/crates/v/scru64)](https://crates.io/crates/scru64) [![License](https://img.shields.io/crates/l/scru64)](https://github.com/scru64/rust/blob/main/LICENSE) SCRU64 ID offers compact, time-ordered unique identifiers generated by distributed nodes. SCRU64 has the following features: - 63-bit non-negative integer storable as signed/unsigned 64-bit integer - Sortable by generation time (as integer and as text) - 12-digit case-insensitive textual representation (Base36) - ~38-bit Unix epoch-based timestamp that ensures useful life until year 4261 - Variable-length node/machine ID and counter fields that share 24 bits ```rust // pass node ID through environment variable // (e.g., SCRU64_NODE_SPEC=42/8 command ...) // generate a new identifier object let x = scru64::new_sync(); println!("{}", x); // e.g., "0u2r85hm2pt3" println!("{}", x.to_u64()); // as a 64-bit unsigned integer // generate a textual representation directly println!("{}", scru64::new_string_sync()); // e.g., "0u2r85hm2pt4" ``` See [SCRU64 Specification] for details. SCRU64's uniqueness is realm-specific, i.e., dependent on the centralized assignment of node ID to each generator. If you need decentralized, globally unique time-ordered identifiers, consider [SCRU128]. [SCRU64 Specification]: https://github.com/scru64/spec [SCRU128]: https://github.com/scru128/spec ## Crate features Default features: - `std` integrates the library with, among others, the system clock to draw current timestamps. Without `std`, this crate provides limited functionality available under `no_std` environments. - `global_gen` (implies `std`) enables the `new()`, `new_string()`, `new_sync()`, and `new_string_sync()` primary entry point functions as well as the process-wide global generator under the hood. Optional features: - `serde` enables serialization/deserialization via serde. ## License Licensed under the Apache License, Version 2.0. ## See also - [docs.rs/scru64](https://docs.rs/scru64)