passt is a CLI tool and library for generating random strings to be used as password.

The goal with this small project was to build a usable and useful CLI tool and library using Rust. It was my first time having the code for a CLI and library in one project.

The goal with this was to have as little dependencies as possible. I managed to only use functions from the std library, though there’s a hard dependency on /dev/urandom (Unix) or file:/dev/urandom (Windows) for random number generation.

In the process of building the tool I learned how to use configs to run code depending on the OS it is executed on, as shown in the following example.

#[cfg(target_os = "windows")]
let mut f = File::open("file:/dev/urandom").unwrap();
#[cfg(not(target_os = "windows"))]
let mut f = File::open("/dev/urandom").unwrap();

let mut buf = [0u8; 32];
f.read_exact(&mut buf).unwrap();


To use passt in your project, add it to the dependencies in Cargo.toml like so

passt = "0.3.0"

Then add it to your code

use passt::Passt;

// create random password with 16 characters, do not include special characters
fn my_random_string() -> String {
  Passt::random_password(16, Some(false));


The CLI can be installed with cargo. Run cargo install passt, then run passt -h to see all options:

$ passt -h

USAGE: passt -l <int> [-s] [-chars "<str>"] [-n <int>]

-l      length of the generated password
-n      number of passwords to create (default: 1)
-s      use special characters
-chars  possible characters as a string, e.g. "abc012"