A Rust library for random number generation.
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Balazs Horvath 8fbdb18ea7 chore: route dependencies to git.sly.so and drop stale rand_chacha
Rebase the fork onto upstream master 9e7d328f (rand 0.10.3). Upstream
removed rand_chacha in 8ee82f46; the fork had re-added it as a workspace
member, and that stale 0.10.0 source no longer compiles against current
rand_core (CryptoGenerator removed, TryRngCore methods dropped).

rand_pcg is not vendored on the den, so it still resolves rand_core from
crates.io and split this repo's own graph against itself, producing a
single rand_core::Rng mismatch. A [patch.crates-io] block pins rand_core
and serde to the den so the graph stays unified.

No version pins: every dependency points at git.sly.so.
2026-10-03 00:44:32 +02:00
benches Optimize WeightedIndex weight lookup and iteration (#1838) 2026-09-17 08:24:26 +01:00
examples Use Xoshiro256PlusPlus in examples/rayon-monte-carlo.rs 2026-07-06 09:05:43 +00:00
src Optimize WeightedIndex weight lookup and iteration (#1838) 2026-09-17 08:24:26 +01:00
tests Rename Rng => RngExt; bump rand_core to v0.10.0-rc-6 2026-01-25 11:18:34 -07:00
utils Move rand distr (#1577) 2025-02-06 12:21:21 +00:00
.gitignore Stop pinning dependencies 2026-07-29 11:22:37 +00:00
Cargo.toml chore: route dependencies to git.sly.so and drop stale rand_chacha 2026-10-03 00:44:32 +02:00
clippy.toml Fix clippy::doc_markdown warnings. (#1474) 2024-07-20 09:56:27 +01:00
COPYRIGHT Fix COPYRIGHT file and copy to sub-projects 2018-08-24 09:22:35 +01:00
LICENSE-APACHE Remove notice by Apache License Authors 2021-07-26 09:17:42 +00:00
LICENSE-MIT Follow up on #591: update authors and add new copyright where missed 2018-09-17 10:06:28 +01:00
README.md Prepare v0.10.1: deprecate feature log (#1763) 2026-04-11 11:34:43 +01:00

Rand

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:

  • StandardUniform random value sampling, Uniform-ranged value sampling and more
  • Samplers for a large number of non-uniform random number distributions via our own rand_distr and via the statrs
  • Random processes (mostly choose and shuffle) via rand::seq traits

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.