#speech-recognition #speech #stt #api-bindings


Safe wrapper around the Vosk API Speech Recognition Toolkit

2 unstable releases

0.2.0 Oct 1, 2022
0.1.0 Jun 29, 2022

#434 in Audio

Download history 117/week @ 2024-02-26 113/week @ 2024-03-04 72/week @ 2024-03-11 97/week @ 2024-03-18 150/week @ 2024-03-25 152/week @ 2024-04-01 100/week @ 2024-04-08 176/week @ 2024-04-15 242/week @ 2024-04-22 102/week @ 2024-04-29 118/week @ 2024-05-06 132/week @ 2024-05-13 96/week @ 2024-05-20 98/week @ 2024-05-27 65/week @ 2024-06-03 69/week @ 2024-06-10

337 downloads per month
Used in marek_vosk_speech_recogni…

MIT license

567 lines


Latest release Documentation MIT Build Status

Safe FFI bindings around the Vosk API Speech Recognition Toolkit.


// Simplified version of examples/read_wav.rs

// Normally you would not want to hardcode the audio samples
let samples = vec![100, -2, 700, 30, 4, 5];
let model_path = "/path/to/model";

let model = Model::new(model_path).unwrap();
let mut recognizer = Recognizer::new(&model, 16000.0).unwrap();


for sample in samples.chunks(100) {
    println!("{:#?}", recognizer.partial_result());

println!("{:#?}", recognizer.final_result().multiple().unwrap());



The Vosk-API dynamic libraries have to be discoverable by the rust linker (static libraries are not available). Download the zip file for your platform here and:

Do either of the following:

  • Use the RUSTFLAGS environment variable to provide the path to the variables like so: RUSTFLAGS=-L/path/to/the/libraries
  • Create a build script and provide cargo with the path to the libraries with cargo:rustc-link-search or cargo:rustc-link-lib.

Although both approaches are equivalent, the latter is more practical as it does not require the developer to remember a terminal command.


  • Move the libraries to a directory in your PATH environment variable.


Do either of the following:

  • Move them to /usr/local/lib or /usr/lib.
  • Set the LIBRARY_PATH environment variable to the directory containing the libraries.


The libraries also have to be discoverable by the executable at runtime. You will have to follow one of the approaches in the same section you chose in compilation.

For both approaches, you will need to copy the libraries to the root of the executable (target/<cargo profile name> by default). It is recommended that you use a tool such as cargo-make to automate moving the libraries from another, more practical, directory to the destination during build.


If you added your libraries to a directory in your PATH, no extra steps are needed as long as that is also the case for the target machine.


  • If you followed option 1 in the compilation section: No extra steps are needed as long as the target machine also has the libraries in one of the mentioned directories.
  • If you followed option 2: You will need to add the directory containing the libraries to the LD_LIBRARY_PATH environment variable. Note that this directory does not have to be the same added to LIBRARY_PATH in the compilation step.


~31K SLoC