Backend
Whisper.cpp Vulkan on Arch: A Detective Story With No Crime
hopsayer Dev.to (EN Zone)
1 views
A six-week journey through source builds, CI pipelines, and one package pacman never mentioned.
TL;DR: pacman -S whisper-cpp ggml-vulkan. That's it. That's the whole answer. Here's why it took me several weeks to find it.
The setup
I use whisper.cpp for local speech-to-text and as a part of my projects. I have a GPU utilization monitor permanently visible in my GNOME panel via the Vitals extension — so when whisper.cpp started detecting my GPU but running everything on CPU anyway, I noticed immediately. Went to fix it.
What followed was several weeks of googling, building from source, writing a custom PKGBUILD, setting up CI, publishing an AUR-style repo — and eventually discovering that the actual fix is a single extra package that pacman never once mentioned to me.
The investigation
First thing I checked: is the official extra/whisper-cpp package compiled with Vulkan support? All search results said no — -DGGML_VULKAN is explicitly OFF, GPU code is absent from the binary. The app sees your GPU through vulkan-icd-loader but has no code to actually use it.
That matched exactly what I was seeing. So the binary itself was the problem.
At the time, a separate whisper-cpp-vulkan package had existed in the repos but kept appearing and disappearing — and right then it was gone from both extra and AUR. AUR pushes were also temporarily restricted due to a supply-chain incident. So the "just install the vulkan variant" path was closed, though it used to be available sometime.
The obvious move: build from source with -DGGML_VULKAN=ON, package it up, done. I published whisper-cpp-vulkan-arch with a PKGBUILD and prebuilt binaries, wired up CI to track upstream releases automatically and rebuild correspondingly, and wrote a Reddit post explaining the situation.
The post was dated August 13, 2026.
The twist
A few weeks later, someone commented on the post. They suggested installing ggml and vulkan-icd-loader.
I started writing a detailed reply explaining why this was wrong: ggml is a CPU library, it's already automatically pulled as an explicit dependency, it doesn't add Vulkan support — this was literally the initial point for the whole action. While writing that reply, I kept double-checking myself.
That same day I had been setting up llama-cpp. Installing it, I noticed ggml-vulkan somewhere — either in pacman output or on the llama.cpp Arch Wiki page. And I noticed something else: llama-cpp was using my GPU. Seemingly — in the same conditions in which whisper-cpp hadn't earlier. These are essentially the same engine under the hood. That didn't add up.
So while composing my rebuttal, I took a detour through the llama.cpp Arch Wiki page. The Installation section lists the ggml backend packages. Right there, first bullet: ggml-vulkan for Vulkan inference.
A package I had never seen in any search result, in any forum thread, in any documentation — despite 15–20 searches over several weeks with every variation of "whisper-cpp vulkan arch linux gpu" I could think of. The reason it never surfaced: the information lives on the llama.cpp wiki page. Google has no reason to show you a llama.cpp article when you're searching for whisper.cpp, even though they share the same backend architecture. If it wasn't for llama-cpp, I wouldn't know about ggml-vulkan at all.
I still had my custom whisper-cpp-vulkan-arch installed on my system from the repo. I tried adding ggml-vulkan on top of it — and pacman threw a wall of file conflict errors: headers, .so files, cmake configs. Both packages were shipping the same ggml-vulkan internals. That was actually the final piece: if my bundled build and ggml-vulkan are fighting over the exact same files, then ggml-vulkan is genuinely the backend, not a duplicate or unrelated package.
I uninstalled my package, installed stock extra/whisper-cpp, installed ggml-vulkan. Ran whisper. GPU counter jumped.
The date was September 3, 2026.
What actually happened (with dates)
Pulling the git history from gitlab.archlinux.org/archlinux/packaging/packages/ggml:
June 19, 2026 — ggml package appears in extra as a split package, with ggml-vulkan as one of its subpackages.
July 1, 2026 — whisper-cpp 1.9.1-1 lands in extra with WHISPER_USE_SYSTEM_GGML=ON and replaces=(whisper-cpp-vulkan). The package is now a universal binary — it uses whatever ggml backend you have installed. One binary, all backends. Not several mutually exclusive binaries, each is the only one for each backend.
August 13, 2026 — I publish my post, convinced the official package is CPU-only and a separate Vulkan build is necessary. I'm not wrong about what I observed; I'm wrong about why.
September 3, 2026 — I find out ggml-vulkan exists. Problem solved in 30 seconds. Discovery took weeks. As usual (or often).
So there was roughly a six-week window during which whisper-cpp already worked with Vulkan, ggml-vulkan already existed in extra, and yet it was essentially impossible to figure this out through normal means. I wasn't the only one: googling the issue leads you to my post, which at time of writing is one of the most current sources on the topic — and it's wrong about the solution.
Why was it so hard to find
This isn't a complaint about the Arch maintainers — the packaging work here is genuinely solid. But the discoverability gap is real:
1. pacman says nothing about ggml-vulkan.
When you install whisper-cpp, pacman pulls ggml as a hard dependency and installs it silently. You see it go in, assume it's sufficient, move on. There's no mention that ggml-vulkan, ggml-cuda, or any other backend exists. The optdepends mechanism exists exactly for this — the llama.cpp package uses it properly — but whisper-cpp doesn't list any backends there.
2. There's no Arch Wiki page for whisper-cpp.
The llama.cpp page explicitly lists all ggml backends in the Installation section. It's the first thing you see. If you search for llama.cpp + GPU on Arch, you find the answer in under a minute. If you search for whisper.cpp + GPU on Arch, you find semi-relevant outdated sources and my post.
3. Search results are months behind.
Everything I found pointed to the old architecture: whisper-cpp compiled with explicit backend flags, separate -vulkan packages, no shared ggml. The transition to the modular system happened quietly, with no announcement that would surface in search results for "whisper-cpp vulkan arch linux".
Current state (September 2026)
What to do:
pacman -S whisper-cpp ggml-vulkan
Make sure you also have a Vulkan driver for your GPU (vulkan-radeon, nvidia-utils, etc.). That's it.
My package (whisper-cpp-vulkan-arch) is now conceptually obsolete. It builds whisper.cpp with a bundled ggml-vulkan, which means it conflicts with the system ggml package — and by extension with llama-cpp and anything else in the ggml ecosystem. I've updated the README to say this clearly. The repo stays up as a historical reference, a personal pain story, a kind of single source of truth for my findings and a record of what this problem looked like in the middle of the transition.
What's still missing: optdepends in the official whisper-cpp package. A GitLab MR is in progress — pending account approval on the Arch GitLab instance. If that lands, the next person with this problem will see ggml-vulkan: Vulkan GPU acceleration right in their pacman output and won't need to spend weeks on it. Until it's done, this article and the updated README of the repo will describe the problem and the solution for those who are searching.
If you hit this problem and this post helped, or if something here is wrong or outdated — leave a comment. The whole point is to make this findable.
Read original: https://dev.to/hopsayer/whispercpp-vulkan-on-arch-a-detective-story-with-no-crime-3nl4
← Previous
Amparo: applying for food aid without reading a single word
Next →
Understanding Things Anyway
Related
A
Axiom: Stop Fighting Your Project Before You Even Run It
Backend
1
DEV Community
F
Finding "Duplicates Through Time"
Backend
1
DEV Community
O
OmniVoice โมเดล TTS 600+ ภาษา โคลนเสียงจากคลิป 3 วินาที เปิดซอร์สฟรี
Backend
1
Dev.to (EN Zone)
A
Amparo: applying for food aid without reading a single word
Backend
1
Dev.to (EN Zone)
Comments0
No comments yet — be the first