short-id
A tiny Rust library for generating short, URL-safe, unique identifiers.
What is this?
Unlike full UUIDs (which are 36 characters and include hyphens), short-id gives you compact 14-character strings that are easy to copy, paste, and use in URLs.
This library has two main goals:
-
Make it very easy to generate short random IDs for things like request IDs, user-facing tokens, test data, and log correlation.
-
Provide an optional "ordered" variant where IDs include a timestamp prefix, so when you sort them as strings they roughly follow creation time.
It is intentionally minimal - no configuration, no custom alphabets, no complex API. You just call:
short_id()for a random URL-safe IDshort_id_ordered()for a URL-safe ID that is roughly time-ordered
This crate is for you if you want something simpler and shorter than UUIDs, and you don't need strict UUID semantics or reversibility.
Quick Start
use short_id;
// Generate a random ID
let id = short_id;
println!;
// Example output: "X7K9mP2nQwE-Tg"
Installation
Add this to your Cargo.toml:
[]
= "0.1"
Usage
Random IDs
Perfect for request IDs, session tokens, or any unique identifier:
use short_id;
let request_id = short_id;
let session_id = short_id;
let token = short_id;
// Each ID is 14 characters, URL-safe, and unique
assert_eq!;
Time-Ordered IDs
For IDs that roughly sort by creation time:
use short_id_ordered;
let id1 = short_id_ordered;
sleep;
let id2 = short_id_ordered;
// IDs sort chronologically
assert!;
This is useful for:
- Log entries that should sort by time
- Event IDs in chronological order
- Resource IDs where temporal order matters
API
short_id()
Generates a random 10-byte ID encoded with base64url (14 characters).
- Always exactly 14 characters
- URL-safe characters only:
A-Z,a-z,0-9,-,_ - Cryptographically secure random
- Works in both
stdandno_std(withalloc)
short_id_ordered()
Generates an ID with a timestamp prefix (4 bytes) plus random bytes (6 bytes), base64url-encoded to 14 characters.
- Includes Unix timestamp, so IDs roughly sort by creation time
- Still cryptographically unique due to random component
- Requires the
stdfeature (enabled by default)
no_std Support
This crate works in no_std environments with alloc:
[]
= { = "0.1", = false }
Note: In no_std mode, only short_id() is available. The short_id_ordered() function requires the std feature because it needs std::time::SystemTime.
License
MIT