NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #21 most downloaded on crates.io
ChaCha random number generator
Last release 8 months ago
02 Feb 2026
Release timing varies
gaps range from 4 weeks to 2.7 years
Most releases are documented
notes for 7 of 9 stable releases
Nothing withdrawn
no release was ever pulled
8 years old
16 releases · first in 2018
The dependency on rand_chacha has been replaced with a dependency on chacha20 . This changes the implementation behind StdRng , but the output remains
rand_chacha has been replaced with a dependency on chacha20. This changes the implementation behind StdRng, but the output remains the same. There may be some API breakage when using the ChaCha-types directly as these are now the ones in chacha20 instead of rand_chacha (#1642).IndexedRandom::choose_multiple -> sample, choose_multiple_array -> sample_array, choose_multiple_weighted -> sample_weighted, struct SliceChooseIter -> IndexedSamples and fns IteratorRandom::choose_multiple -> sample, choose_multiple_fill -> sample_fill (#1632)Fill be implemented for element types, not sliceable types (#1652)OsError::raw_os_error on UEFI targets by returning Option<usize> (#1665)TryRngCore::read_adapter(..) -> RngReadAdapter with simpler struct RngReader (#1669)SeedableRng::from_os_rng, try_from_os_rng (#1674)Clone support for StdRng, ReseedingRng (#1677)postcard instead of bincode to test the serde feature (#1693)IteratorRandom::sample when amount is much larger than iterator size (#1695)os_rng -> sys_rng, OsRng -> SysRng, OsError -> SysError (#1697)Rng -> RngExt as upstream rand_core has renamed RngCore -> Rng (#1717)IndexedRandom::choose_iter, choose_weighted_iter (#1632)Xoshiro128PlusPlus, Xoshiro256PlusPlus prngs (#1649)ChaCha8Rng, ChaCha12Rng, ChaCha20Rng behind chacha feature (#1659)rand::make_rng() -> R where R: SeedableRng (#1734)ReseedingRng (#1722)small_rng (#1732)Full Changelog: 0.9.2...0.10.0
One column per quarter.
rand_chacha has been replaced with a dependency on chacha20. This changes the implementation behind StdRng, but the output remains the same. There may be some API breakage when using the ChaCha-types directly as these are now the ones in chacha20 instead of rand_chacha (#1642).IndexedRandom::choose_multiple -> sample, choose_multiple_array -> sample_array, choose_multiple_weighted -> sample_weighted, struct SliceChooseIter -> IndexedSamples and fns IteratorRandom::choose_multiple -> sample, choose_multiple_fill -> sample_fill (#1632)Fill be implemented for element types, not sliceable types (#1652)OsError::raw_os_error on UEFI targets by returning Option<usize> (#1665)TryRngCore::read_adapter(..) -> RngReadAdapter with simpler struct RngReader (#1669)SeedableRng::from_os_rng, try_from_os_rng (#1674)Clone support for StdRng, ReseedingRng (#1677)postcard instead of bincode to test the serde feature (#1693)IteratorRandom::sample when amount is much larger than iterator size (#1695)os_rng -> sys_rng, OsRng -> SysRng, OsError -> SysError (#1697)Rng -> RngExt as upstream rand_core has renamed RngCore -> Rng (#1717)IndexedRandom::choose_iter, choose_weighted_iter (#1632)Xoshiro128PlusPlus, Xoshiro256PlusPlus prngs (#1649)ChaCha8Rng, ChaCha12Rng, ChaCha20Rng behind chacha feature (#1659)rand::make_rng() -> R where R: SeedableRng (#1734)Nothing published for this version
Nothing published for this version
Policy: "rand is not a crypto library" ([#1514])
ReseedingRng and ThreadRng. Instead, it is recommended to call ThreadRng::reseed on fork. (#1379)zerocopy to replace some unsafe code (#1349, #1393, #1446, #1502)--ignore-rust-versionrand_core v0.9.0 (#1558)std feature without getrandom or rand_chacha (#1354)small_rng by default (#1455)rand_chacha; use std_rng instead. (#1473)serde1 to serde (#1477)getrandom to os_rng (#1537)thread_rng (#1547)RngCore::read_adapter implementing std::io::Read (#1267)CryptoBlockRng: BlockRngCore; make trait CryptoRng: RngCore (#1273)TryRngCore, TryCryptoRng (#1424, #1499)fn SeedableRng::from_rng -> try_from_rng and add infallible variant fn from_rng (#1424)fn SeedableRng::from_entropy -> from_os_rng and add fallible variant fn try_from_os_rng (#1424)Clone and AsRef to associated type SeedableRng::Seed (#1491)rand::thread_rng() to rand::rng() and remove from the prelude (#1506)rand::random() from the prelude (#1506)random_iter, random_range, random_bool, random_ratio, fill (#1488)Rng::gen_iter as random_iter (#1305, #1500)Rng::gen to random to avoid conflict with the new gen keyword in Rust 2024 (#1438)Rng::gen_range to random_range, gen_bool to random_bool, gen_ratio to random_ratio (#1505)#[track_caller] (#1442, #1447)<SmallRng as SeedableRng>::Seed size to 256 bits (#1455)rng) of ReseedingRng::new (#1533)SliceRandom into IndexedRandom, IndexedMutRandom, SliceRandom (#1382)IndexedRandom::choose_multiple_array, index::sample_array (#1453, #1469)rand::distributions to rand::distr (#1470)Standard to StandardUniform (#1526)distr::Slice -> distr::slice::Choose, distr::EmptySlice -> distr::slice::Empty (#1548)distr::DistString -> distr::SampleString (#1548)distr::DistIter -> distr::Iter, distr::DistMap -> distr::Map (#1548)Sized bound on Distribution<T> for &D (#1278)Distribution<Option<T>> for StandardUniform (#1526)StandardUniform support all NonZero* types (#1332){Uniform, UniformSampler}::{new, new_inclusive} return a Result (instead of potentially panicking) (#1229)Uniform implements TryFrom instead of From for ranges (#1229)UniformUsize (#1487)isize and usize values with StandardUniform, Uniform (except via UniformUsize) and Fill and usage as a WeightedAliasIndex weight (#1487)DistString for distributions Slice<char> and Uniform<char> (#1315)Slice::num_choices (#1402)p() for distribution Bernoulli to access probability (#1481)pub module rand::distr::weighted, moving WeightedIndex there (#1548)weighted::Weight, allowing WeightedIndex to trap overflow (#1353)weight, weights, total_weight to distribution WeightedIndex (#1420)WeightedError to weighted::Error, revising variants (#1382) and mark as #[non_exhaustive] (#1480)std::simd, expand SIMD & docs (#1239)ReseedingRng::reseed discard remaining data from the last block generated (#1379)SmallRng::seed_from_u64 implementation (#1203)UniformFloat::new samples and UniformFloat::sample_single to yield high (#1462)Slice (#1469)Uniform for usize portable via UniformUsize (#1487)IndexdRandom::choose_multiple_weighted for very small seeds and optimize for large input length / low memory (#1530)sample_floyd, affecting output of rand::seq::index::sample and rand::seq::SliceRandom::choose_multiple (#1277)IteratorRandom::choose and choose_stable (#1268)SliceRandom::shuffle and partial_shuffle (#1272)Uniform: use Canon's method (single sampling) / Lemire's method (distribution sampling) for faster sampling (breaks value stability; #1287)sample_single_inclusive for floats (+~20% perf) (#1289)Cargo.lock.msrv file (#1275)rustfmt and enforce (#1448)benches crate (#1329, #1439) and migrate to Criterion (#1490)Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
### Fixed - Fix compile on Windows
Update to use log version 0.3.x
Nothing published for this version
### Fixed - Compatible with Rust master - Fixed iOS compilation
Compatible with Rust master (move from old_io to std::io)
old_io to std::io)Migrate to a cargo-compatible directory structure.
gen_weighted_bool(1)Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →