Mercury: A Pure-Rust Whisper You Can Run Without Python
Mercury is a pure-Rust Whisper implementation — no Python runtime, no whisper.cpp FFI. Here's how it compares on accuracy, speed, and what is still experimental.

OpenAI Whisper became the default open-source speech-to-text stack the week it shipped. Journalists, podcasters, on-device voice notes, accessibility captions — if you wanted transcription you did not send to a cloud API, you reached for Whisper. In Rust, that almost always meant one of two compromises: bind to whisper.cpp over FFI, or shell out to the Python reference. Either way, a C or Python runtime sits on the hottest path in the app.
Mercury is the other option: a pure-Rust Whisper implementation on the Candle tensor framework. Custom mel spectrogram, custom tokenization, custom decoding, hand-written AVX2 kernels. No Python. No whisper-sys by default. This is the first Remade-with-Rust flagship write-up — not another catalog. The inventory stays on The Importance of Remade With Rust and the Remade with Rust page. The thesis of why rebuilds matter is rebuilding the foundation of the internet. This article is the Whisper slice: numbers, limits, when to use it.
Why A Pure-Rust Whisper Beats Another Binding
A binding is a handshake in front of the original heap. whisper.cpp is excellent C++. It is still C++: the CVE class that never ages out of parsers and buffers. Python is excellent for research. It is a terrible thing to ship next to a wallet, a codec, or anything that is supposed to stay memory-safe and cross-compile to WASM. The NIST Secure Software Development Framework has been pushing organizations toward memory-safe languages for this reason. Wrapping the old runtime does not satisfy that push. Replacing it does.
Speech is also a privacy surface. Cloud ASR means the voice note left the building. Local ASR that still drags in a Python interpreter and a pile of native wheels is local in theory and operationally a supply chain. The Electronic Frontier Foundation has documented how "the audio stays on device" claims collapse when the stack phones home for models, telemetry, or a helper daemon. Mercury's pitch is narrower and checkable: inference is Rust, weights are downloaded from manifests with licenses surfaced, GPU is optional behind feature flags, CPU-only still compiles.
Trust, Security, and Incentive apply to a library the same way they apply to a vault. Trust the compiler's refusal of use-after-free, not a promise that this FFI boundary was audited this quarter. Security is a smaller attack surface on a workload that touches microphones. Incentive is permissive licensing — MIT or Apache-2.0 for the code — so you can embed Mercury without a copyleft surprise, while model weights keep their licenses. That split is honest; hiding it would not be.
A free internet needs speech primitives you can run without asking a Python vendor or a GPU cloud. Pure-Rust Whisper is that primitive, still early, already usable on tiny.en and base.en.
How Mercury Compares To Whisper.cpp
Numbers below are the ones we publish on the Remade with Rust catalog. They are not a press-embargoed "10×." Read them as a snapshot. Workloads, CPUs, and model sizes move the ranking.
Mercury Accuracy Versus Whisper.cpp
Against whisper.cpp on LibriSpeech, Mercury lands 0.19 percentage points behind on clean speech and marginally ahead on noisy speech. That is not a knockout. It is "same league, different weather." If your corpus is studio-clean audiobooks, the C++ engine still nicks it. If your corpus is a kitchen and a cheap mic, the gap can flip.
Greedy decoding with the full logit-filter grammar is what ships today. Beam search is on the experimental list, not a buried checkbox. Do not compare a beam-search whisper.cpp run to a greedy Mercury run and call it science. Match the decoder, then argue.
Speed: End-To-End Versus The Encoder
On end-to-end throughput today, Mercury is roughly 1.12× slower than whisper.cpp. That sentence belongs in the same paragraph as the win: it runs 1.38× faster than whisper.cpp's unfused encoder. The kernel work is real; the whole-pipeline work is not finished. Anyone who quotes only the encoder number is selling. Anyone who quotes only 1.12× slower and ignores noisy-speech quality is selling the other direction.
The FFAI toolkit wraps Mercury as the ASR engine in a larger media library (TTS, OCR, VLM on the same Candle backbone). Early FFAI ASR-path benchmarks land 15% faster than whisper.cpp with 7% better quality. That is a path number — fused pipeline, not the standalone crate in isolation. If you are choosing a library, say which surface you measured.
Optional GPU acceleration is feature-flagged. The core still builds and runs on CPU-only targets. That matters for phones, CI, and air-gapped machines more than it matters for a demo laptop with a 4090.
What Is Experimental In Mercury Today
Mercury is experimental. tiny.en and base.en today. Larger models, streaming APIs, and beam search are next, not silent. If you need multilingual large-v3 in production tomorrow with a battle-tested C++ decoder, whisper.cpp is still the conservative pick. If you need a Rust graph with no Python and you can live on base English, Mercury is the one that matches the rest of a Remade-with-Rust binary.
The Federal Trade Commission's consumer privacy guidance is not about codecs, but it is about claims. We will not claim "faster and better at everything." We will claim a memory-safe implementation, measured gaps, and a public repo.
When To Reach For Mercury Instead Of Whisper.cpp
Pick the engine the way you pick a database: by the constraint you refuse to violate.
Standalone Crate Versus The FFAI Bundle
Need ASR only, in a Rust service or a CLI? Depend on Mercury. Need ASR plus OCR plus vision-language on one API? FFAI is the bundle; Mercury is the speech engine inside it. Do not pull the whole toolkit to transcribe a voicemail. Do not re-implement spectrograms because you wanted "just Whisper" and then FFI'd cpp anyway.
Both live under github.com/Remade-With-Rust. Dual-license on the code. Weights are not "we relicensed OpenAI's models." Check the manifest for the checkpoint you ship.
No Python Runtime On The Hot Path
If your product story is Digital Freedom — voice notes that never boarded a data-center Python worker — the dependency graph has to agree. The Freedom Guide is full of local-first steps that look silly next to libpython in the same process. Mercury is how speech stops being the exception.
WASM and "no C toolchain on the user's machine" are the same test as the rest of the house stack. A *-sys crate that needs clang is a defect for that test, even when the transcription quality is pretty.
Licenses, Models, And What You Should Not Wait For
Use Mercury when you can pin tiny.en / base.en, accept greedy decode, and want the attack surface of Candle + Rust instead of ggml + Python. Keep whisper.cpp when you need the long tail of models, streaming maturity, or a drop-in that every intern already knows. Those can coexist in an industry. They should not coexist inside one "pure Rust" deliverable.
Watch the repo for beam search and larger checkpoints. Do not wait for a sales page. There is not one. The Eras of Digital Freedom roadmap is the product sequence; Remade with Rust is the substrate. Speech that stays on the device is Era-shaped even when the crate name is a planet.
If you came here from a codec or allocator card, this is the same program with a microphone. If you came here because you searched "Whisper without Python," the answer is Mercury — with the LibriSpeech grain of salt still in the glass.

