15 releases (9 breaking)

0.10.0 Feb 7, 2023
0.8.3 Dec 20, 2022
0.8.2 Nov 22, 2022
0.5.1 Jul 13, 2022

#356 in Algorithms

Download history 447/week @ 2023-08-14 286/week @ 2023-08-21 423/week @ 2023-08-28 485/week @ 2023-09-04 385/week @ 2023-09-11 439/week @ 2023-09-18 419/week @ 2023-09-25 375/week @ 2023-10-02 583/week @ 2023-10-09 611/week @ 2023-10-16 570/week @ 2023-10-23 619/week @ 2023-10-30 599/week @ 2023-11-06 509/week @ 2023-11-13 508/week @ 2023-11-20 615/week @ 2023-11-27

2,298 downloads per month
Used in 3 crates (via bevy_turborand)

Apache-2.0 OR MIT

2.5K SLoC


CI License Cargo Documentation

Fast random number generators.

turborand's internal implementations use Wyrand, a simple and fast generator but not cryptographically secure, and also ChaCha8, a cryptographically secure generator tuned to 8 rounds of the ChaCha algorithm in order to increase throughput considerably without sacrificing too much security, as per the recommendations set out in the Too Much Crypto paper.


use turborand::prelude::*;

let rand = Rng::new();

if rand.bool() {
    println!("Success! :D");
} else {
    println!("Failure... :(");

Sample a value from a list:

use turborand::prelude::*;

let rand = Rng::new();

let values = [1, 2, 3, 4, 5];

let value = rand.sample(&values);

Generate a vector with random values:

use turborand::prelude::*;
use std::iter::repeat_with;

let rand = Rng::new();

let values: Vec<_> = repeat_with(|| rand.f32()).take(10).collect();

no-std Compatibility

turborand can be exposed to no-std environments, however only with reduced capability and feature sets. There'll be no Default implementations, and no new() constructors, so Rng/ChaChaRng seeds must be provided by the user from whatever source available on the platform. Some TurboRand methods will also not be available unless the alloc feature is enabled, which necessitates having a global allocator.


Wyrand is a pretty fast PRNG, and is a good choice when speed is needed while still having decent statistical properties. Currently, the turborand implementation benches extremely well against similar rand algorithms. Below is a chart of the fill_bytes method performance, tested on Windows 10 x64 on an AMD Ryzen 1700 clocked at 3.7Ghz with 32GB RAM at 3066Mhz.

fill_bytes benchmark

For filling 2048 byte array buffers, turborand's Rng is able to do so in around 170-180ns, whereas SmallRng does it between 260-268ns, and Pcg64Mcg (the fastest PCG impl on 64bit systems) does it in 305-312ns.

u64 gen benchmark

For generating unbound u64 values, turborand and fastrand are equal in performance, which is expected given they both implement the Wyrand algorithm, consistently performing around 820-830ps for generating a u64 value. SmallRng performs around 1.16ns, while Pcg64Mcg is at 1.35ns.

Migrating between versions

Check out MIGRATION.md to get all the notes needed to migrate between major versions of turborand.


Licensed under either of

at your option.