Owned by Diggory Hardy, rust-random. · Lib.rs

90 releases

Uses new Rust 2024

0.10.2 Jul 2, 2026
0.10.0 Feb 8, 2026
0.10.0-rc.5 Nov 8, 2025
0.9.5 Jul 11, 2026
0.3.4 Mar 31, 2015

#2 in Algorithms

144,328,219 downloads per month
Used in 94,875 crates (31,867 directly)

MIT/Apache

360KB
6K SLoC

Test Status Crate Book API

Rand is a set of crates supporting (pseudo-)random generators:

With broad support for random value generation and random processes:

All with:

  • Portably reproducible output
  • # [ no_std ] compatibility (partial)
  • Many performance optimisations thanks to contributions from the wide user-base

Rand is not:

  • Small (LoC). Most low-level crates are small, but the higher-level rand and rand_distr each contain a lot of functionality.
  • Simple (implementation). We have a strong focus on correctness, speed and flexibility, but not simplicity. If you prefer a small-and-simple library, there are alternatives including fastrand and oorandom.
  • Primarily a cryptographic library. rand does provide some generators which aim to support unpredictable value generation under certain constraints; see SECURITY.md for details. Users are expected to determine for themselves whether rand 's functionality meets their own security requirements.

Documentation:

Versions

Rand is mature (suitable for general usage, with infrequent breaking releases which minimise breakage) but not yet at 1.0. Current MAJOR . MINOR versions are:

  • Version 0.10 was released in February 2026.

See the CHANGELOG or Upgrade Guide for more details.

Crate Features

Rand is built with these features enabled by default:

  • std enables functionality dependent on the std lib
  • alloc (implied by std ) enables functionality requiring an allocator; a significant portion of sequence and distribution functionality requires this
  • sys_rng enables rand :: rngs :: SysRng (uses the getrandom crate)
  • std_rng enables rand :: rngs :: StdRng (uses the chacha20 crate)
  • thread_rng (implies std , std_rng , sys_rng ) enables rand :: rngs :: ThreadRng and rand :: rng ( )

Optionally, the following dependencies can be enabled:

  • chacha enables rand :: rngs :: { ChaCha8Rng , ChaCha12Rng , ChaCha20Rng } (uses the chacha20 crate)

Additionally, these features configure Rand:

  • simd_support (experimental) enables sampling of SIMD values (uniformly random SIMD integers and floats). Since std :: simd is not yet stable this feature requires nightly Rust and may cause build failures.

  • unbiased use unbiased sampling for algorithms supporting this option: Uniform distribution.

    (By default, bias affecting no more than one in 2^48 samples is accepted.)

    Note: enabling this option is expected to affect reproducibility of results.

Portability

Reproducibility

Achieving reproducible results requires not only deterministic algorithms with fixed inputs but also a commitment to stability of algorithms and some platform-specific considerations. A subset of rand does aim to support reproducibility; read more about this in the book: Portability.

WebAssembly support

The WASI and Emscripten targets are directly supported. The wasm32-unknown-unknown target is not automatically supported. To enable support for this target, refer to the getrandom documentation for WebAssembly. Alternatively, the sys_rng feature may be disabled.

License

Rand is distributed under the terms of both the MIT license and the Apache License (Version 2.0).

See LICENSE-APACHE and LICENSE-MIT, and COPYRIGHT for details.

Dependencies

~37–330KB

Other features

Read the original on lib.rs ↗