transcribe.cpp Is Trying to Do for Speech Recognition What llama.cpp Did for LLMs
CJ Pais shipped a ggml-backed, MIT-licensed C++ library that runs 16+ ASR model families on Metal, Vulkan, and CUDA from a single C header. The problem it solves is real. The gap between solving it and owning it is also real.

The Problem Nobody Fixed
Local speech-to-text inference in 2026 is solved until you try to ship it cross-platform.
CJ Pais, creator of Handy, put it plainly: distributing a cross-platform app with the current ASR stack is terrible. You have whisper.cpp and ONNX. Add MLX for Apple and now you support two different engines, porting models to each. That is not an engineering problem. That is a tax you pay forever.
Every new state-of-the-art ASR model ships in its own framework. NVIDIA Parakeet lives in NeMo. Cohere Transcribe is PyTorch. GigaAM, Moonshine, and the others each bring their own runtime opinions. For teams building desktop or embedded apps, the practical answer has been: pick Whisper, lock in, move on.
transcribe.cpp is the attempt to end that negotiation.

What It Actually Is
transcribe.cpp is a C/C++ speech-to-text inference library. Think of it as "llama.cpp for STT models": it relies on the ggml runtime to support a variety of STT model families via GGUF, running with Metal, Vulkan, and CUDA backends for fast GPU inference.
The library supports 16 ASR families covering 60+ models, with acceleration via Vulkan, Metal, CUDA, and TinyBLAS, and every model has been numerically verified and WER tested. The roster includes OpenAI Whisper, NVIDIA Parakeet, Cohere Transcribe, GigaAM, and Moonshine.
The public C API is a single header at include/transcribe.h, with bindings for Python, TypeScript, Rust, and Swift. Quantization follows the llama.cpp convention: F16, Q8_0, Q6_K, Q5_K_M, Q4_K_M. The smallest Parakeet variant comes in at 135 MB at Q8_0.
One constraint: input must be 16 kHz mono WAV, which means ffmpeg preprocessing for any real-world audio pipeline. That is operational friction at scale, not a dealbreaker.
The Validation Bet
Most hobbyist inference ports claim model support. transcribe.cpp makes a harder claim. Every model published under the handy-computer Hugging Face org has been numerically validated and WER tested to match the reference implementation. That is a numerical contract, not a compatibility badge—the single most credible thing about a v0.1.0 library.
The Parakeet family recomputes positional encoding per call, meaning no practical per-call audio length limit. Buffered streaming is supported with lookahead latency ranging from 160ms to 2.08 seconds depending on configuration.
The tradeoff: no VAD, no speaker diarization, no translation for non-Whisper models. For meeting bots, call-center tools, or podcast workflows, those are not nice-to-haves.
Mozilla AI's Play
transcribe.cpp is the first independent open-source project developed with Mozilla AI's Builders in Residence program. Mozilla AI is not the maintainer. CJ Pais is.
What Mozilla AI gets is clear. The plan is to use the library to build transcribefiles: portable, multi-platform, self-contained executables. That mirrors the llamafile pattern exactly. The first version of transcribefile shipped as part of the llamafile release, built as a cosmocc-compiled CLI supporting 16+ model families.
Blacksmith provides CI/CD runners. Hugging Face provides private storage for canonical GGUF conversions. Modal provided cloud credits for WER testing. That is meaningful runway for what is, by star count, still a solo project.
The Production Stress Test Already Exists
transcribe.cpp has what most v0.1.0 inference libraries lack: a production application running it. Handy, Pais's desktop speech-to-text app, has 26.7k GitHub stars. transcribe.cpp was integrated with the v0.9.0 release, which introduced streaming model support. That is a real-world load test most libraries do not see for months.
The handy-computer/transcribe.cpp repository sits at 192 stars and 11 forks. Extremely new. Longevity depends heavily on whether one person sustains it post-residency, and Mozilla has a documented history of deprioritizing projects when focus shifts.
Who Else Is Solving This
CrispASR started as a whisper.cpp fork and extends that base into a unified speech engine backed by full ggml C++ runtimes for major ASR and TTS architectures, with one build, one binary, one CLI. CrispASR ships 43 ASR backends and 48 TTS engines—91 total in the feature matrix. It includes VAD, diarization, and translation that transcribe.cpp explicitly does not have.
The incumbent is whisper.cpp: MIT licensed, battle-hardened, massive community. For teams needing only Whisper-family models, transcribe.cpp adds no immediate value.
Translation: transcribe.cpp enters a market where competitors are either narrower and proven (whisper.cpp) or broader and unchoreographed (CrispASR). It is betting on WER-validated, canonically distributed GGUF models for the post-Whisper ASR generation, wrapped in a clean C API with four language bindings.
The Honest Stakes
If you are shipping a cross-platform desktop or embedded app and you need to run NVIDIA Parakeet, Cohere Transcribe, or Moonshine locally on the same GPU backend across Mac, Windows, and Linux, transcribe.cpp is currently the most credible answer to that exact problem. The MIT license removes commercial friction. The bindings cover Python, TypeScript, Rust, and Swift at launch, unusually broad for v0.1.0.
If you need VAD, diarization, translation, or a production-hardened API that will not break before 1.0, you are either waiting or building elsewhere.
The author flags it plainly: this is v0.1.0 with rough edges that cannot be discovered alone. That is the right posture. It does not change the maintenance risk for teams embedding it today.
The bet transcribe.cpp is making is that on-device inference keeps pulling workloads off the cloud, and that the ASR model ecosystem fragments fast enough to make unified runtime structurally necessary. Both trends are real. Whether this library captures them is a different question, and the repo's star count says the jury is still deliberating.
- Announcing transcribe.cpp — Mozilla AI Blog
- transcribe.cpp — Project Page (CJ Pais Workshop)
- handy-computer/transcribe.cpp — GitHub
- cjpais/Handy — GitHub
- Mozilla AI Releases Llamafile 0.10.4 With Transcribefile Built On Transcribe.cpp — Phoronix
- llamafile Releases (transcribefile PR) — GitHub
- CrispASR — GitHub
- transcribe-cpp 0.1.1 on PyPI — Libraries.io
- Mozilla AI Unveils transcribe.cpp — StartupHub.ai
- cjpais (CJ Pais) · GitHub
- transcribefile: CPU build of transcribe.cpp + sync to df1a4ad by aittalam · Pull Request #1007 · mozilla-ai/llamafile
- Mozilla.ai's Post - Announcing transcribe.cpp
- CrispASR/COMPARISON.md at main · CrispStrobe/CrispASR
- GitHub - ggml-org/whisper.cpp: Port of OpenAI's Whisper model in C/C++ · GitHub
- Best whisper.cpp Alternative in 2026: On-Device Transcription and Beyond | Cactus
- whisper.cpp download | SourceForge.net
- 10 Best Whisper Alternatives in 2026 (Tested) - Brilo AI
- Whisper.cpp vs faster-whisper 2026: Local STT Benchmarks, Setup & GPU Acceleration
- GitHub - CrispStrobe/Susurrus: speech to text gui for different (e.g. Whisper, Voxtral) models and backends, including whisper.cpp, crispasar, mlx-whisper, faster-whisper, ctranslate2; applies pyannote for diarization · GitHub
- Voxtral vs Whisper 2026: WER Benchmarks, Streaming & Hardware — Weesper Neon Flow Blog
- Whisper Alternatives in 2026 — Honest Comparison of 14 Speech-to-Text Options | VexaScribe