Vocalinux v0.18.5
A patch release that closes the reports filed after 0.18.4. A stop pressed while a recording is starting can no longer leave the microphone recording forever, dictation survives a stalled microphone, keyboards stay alive through suspend and the GNOME lock screen, and the installer learns an upgrade mode that keeps your existing configuration.
Highlights
| Fix | What changed |
|---|---|
| A racing stop always wins | A stop arriving while a recording starts is no longer overwritten, so the mic can never keep recording with no way to halt it |
| Stalled microphones recover | Capture reads are bounded and cancellable; a mic that stops answering gets one recovery pass before dictation fails cleanly instead of hanging in PROCESSING |
| Keyboards survive suspend and lock | The evdev forwarder releases its EVIOCGRAB when forwarding cannot run, ending dead keyboards at the GNOME lock screen |
| Dialogs stay on their own workspace | Dictation Pad, Settings and other standalone windows no longer bind to or travel with other windows on Wayland |
| Ctrl+mouse-wheel zoom works | Ctrl key events pass through again, so Ctrl+scroll zooms in Firefox and elsewhere |
| Upgrade mode in the installer | install.sh on an existing install defaults to keeping your configuration, virtual environment and downloaded models; --upgrade runs it non-interactively
|
New Features
install.shupgrade mode keeps the existing configuration: the saved engine,config.json, virtual environment and downloaded models are preserved, and pywhispercpp is rebuilt only when the pinned version drifts (#1026; fixes #1009 reported by @plaffitt)
Bug Fixes
Recognition and audio
- A stop that races a recording start is never lost: the session arms before LISTENING is published, and the capture loop reads outside
_buffer_lock(#1023 by @aagprojectsteam-max; fixes #1022 reported by @aagprojectsteam-max) - Capture reads are bounded and cancellable with a five-second stall deadline and one recovery pass, stops run single-flight, and ALSA enumeration prefers the PulseAudio PCM (#974 by @neuroborus)
Hotkeys and input
- The evdev forwarder releases EVIOCGRAB when forwarding cannot run, so keyboards no longer die at the GNOME lock screen after suspend/resume (#1025; fixes #1021 reported by @iholder101)
- Ctrl events are preserved for applications, restoring Ctrl+mouse-wheel zoom (#967 by @loject; fixes #950 reported by @loject)
UI (Wayland)
- Standalone dialogs no longer bind to other windows, so Dictation Pad and Settings stop travelling workspaces together (#1024; fixes #984 reported by @hopsayer)
- The Wayland fallback overlay stays alive when the dock closes it (#1017; fixes #1010 reported by @lavoie005)
Clipboard
- Paste-injection copies are marked sensitive (
wl-copy --sensitive) on wl-clipboard 2.2+, so clipboard managers that honor the hint keep them out of history; the xclip/xsel path and older wl-copy have no such hint (#956 by @Nosion)
Packaging
- AUR source publication is gated on attested sdists: the PKGBUILD is prepared only from the canonical sdist whose checksum and build provenance verify (#1020 by @sesav)
- The tray prefers libayatana-appindicator-glib when available (#1019; fixes #1013 reported by @jo-so)
- The Snap lists PulseAudio microphones and explains that its whisper.cpp build is CPU-only (#1018; fixes #1011 reported by @cmcclung-ANGENG)
Improvements
- uv pins aligned across CI and release workflows (#1016 by @sesav), release build tooling pinned with a reproducible-wheel gate (#945 by @sesav), supported uv range widened plus Fedora/AppImage build hardening (#952 by @sesav), and dependency bumps covering flagged vulnerabilities and the pip and GitHub Actions groups (#1008 by @Mr-Sunglasses, #1014, #1015)
Thanks
Reporters: @aagprojectsteam-max, @iholder101, @hopsayer, @loject, @plaffitt, @lavoie005, @jo-so, @cmcclung-ANGENG. Code: @aagprojectsteam-max (#1023), @neuroborus (#974), @loject (#967), @Nosion (#956), @sesav (#1020, #1016, #952, #945), @Mr-Sunglasses (#1008).
Install / Upgrade
Quick Install (Recommended)
curl -fsSL https://raw.githubusercontent.com/VocaHQ/vocalinux/v0.18.5/install.sh | bashFrom Source
git clone https://github.com/VocaHQ/vocalinux.git
cd vocalinux
./install.shFrom PyPI
# Install the Linux system packages first:
# GTK/AppIndicator, PortAudio, and xdotool/wtype are required.
python3 -m venv ~/.local/share/vocalinux-pypi/venv --system-site-packages
source ~/.local/share/vocalinux-pypi/venv/bin/activate
pip install vocalinux
vocalinuxPyPI installs the Python package only. For automatic system dependency,
desktop integration, and model setup, use the Quick Install command above.
See docs/INSTALL.md for distro-specific PyPI prerequisites.
Arch Linux (AUR)
yay -S vocalinuxAppImage (no install, no root)
Download the .AppImage matching your CPU (x86_64 or aarch64, the latter attached
shortly after this release is published) below:
chmod +x Vocalinux-0.18.5-x86_64.AppImage
./Vocalinux-0.18.5-x86_64.AppImageStill requires xdotool/wtype/ydotool on the host for text injection, same as the PyPI path.
Distro packages (.deb / .rpm)
Download the package matching your distro and CPU (amd64/x86_64, or arm64/aarch64
attached shortly after this release is published):
# Debian / Ubuntu
sudo apt install ./vocalinux_*_amd64.deb
# Fedora
sudo dnf install ./vocalinux-*.x86_64.rpmThin packages: Python, GTK, PyGObject and the AppIndicator typelib come from the
distro, and apt/dnf resolves them. Only pywhispercpp and pynput are
vendored (the first is packaged by neither distro, the second is missing on
Fedora). whisper.cpp runs on CPU in these packages; the Vulkan build is the
AppImage. A PPA and a COPR are not published yet.
On Wayland the default Right Alt hotkey uses evdev: sudo usermod -aG input $USER,
then log out and back in (the input group can read every keyboard and pointer
device; X11 needs nothing).
Flatpak
Install and auto-update via the self-hosted VocaHQ remote (flatpak update
picks up each release):
flatpak install https://vocahq.github.io/vocalinux-flatpak/com.vocalinux.Vocalinux.flatpakrefThe .flatpakref adds the vocahq remote and resolves org.gnome.Platform//50
through Flathub itself — no separate Flathub setup needed. To add the
pieces by hand instead:
flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
flatpak remote-add --if-not-exists vocahq https://vocahq.github.io/vocalinux-flatpak/vocahq.flatpakrepo
flatpak install vocahq com.vocalinux.VocalinuxOr download the .flatpak matching your CPU (x86_64 or aarch64, attached
shortly after this release is published) — a bundle with no auto-update:
# once: Flathub remote + GNOME runtime (the app itself is not on Flathub)
flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
flatpak install flathub org.gnome.Platform//50
flatpak install --user ./Vocalinux-0.18.5-x86_64.flatpak
flatpak run com.vocalinux.VocalinuxWhisper.cpp engine only. Hotkeys need device access as documented in
packaging/flatpak/README.md. Not on Flathub (flathub/flathub#9368).
Snap
Tagged releases also attach vocalinux_0.18.5_amd64.snap
and try the Snap Store (edge and candidate). stable is promoted
from candidate after QA by the snap-promote.yml dispatch workflow.
Wayland typing runs through the RemoteDesktop portal; the snap ships no uinput plug.
The GitHub .snap is also the sideload while a Store revision lags:
sudo snap install --dangerous ./vocalinux_0.18.5_amd64.snap--dangerous is required because this file is not a Store revision. It will not
refresh from the Store. amd64 only.
Verifying what you downloaded
SHA256SUMS covers every file here and is attached once the aarch64 AppImage,
both Flatpak builds, and the snap finish, a few minutes after this release appears.
The wheel and the sdist below are the same bytes published to PyPI.
sha256sum -c --ignore-missing SHA256SUMSEach artifact also carries GitHub build provenance, which ties it to this workflow run:
gh attestation verify Vocalinux-0.18.5-x86_64.AppImage \
--repo VocaHQ/vocalinuxSee CHANGELOG for detailed changes.
What's Changed
- fix(deps): bump vulnerable dependencies flagged by Dependabot by @Mr-Sunglasses in #1008
- ci(release): pin build tooling and gate reproducible wheels by @sesav in #945
- chore(dev): widen uv range and harden Fedora/AppImage builds by @sesav in #952
- fix(ci): align uv pins across CI and release workflows by @sesav in #1016
- fix(overlay): keep the Wayland fallback overlay alive when the dock closes it by @jatinkrmalik in #1017
- fix(snap): list PulseAudio microphones and explain CPU-only whisper.cpp by @jatinkrmalik in #1018
- fix(tray): prefer libayatana-appindicator-glib when available by @jatinkrmalik in #1019
- fix(recognition): never lose a stop that races start, and read capture outside the buffer lock by @aagprojectsteam-max in #1023
- fix(shortcuts): preserve Ctrl events for mouse-wheel zoom by @loject in #967
- fix(clipboard): keep paste-injection copies out of clipboard history 🤖🤖🤖 by @Nosion in #956
- fix(aur): gate source publication on attested sdists by @sesav in #1020
- chore(deps): bump the github-actions group across 1 directory with 6 updates by @dependabot[bot] in #1014
- fix(ui): keep standalone dialogs from binding to other windows on Wayland by @devin-ai-integration[bot] in #1024
- chore(deps): bump the pip group across 2 directories with 4 updates by @dependabot[bot] in #1015
- fix(evdev): release EVIOCGRAB when forwarding cannot run by @devin-ai-integration[bot] in #1025
- fix(installer): add upgrade mode that keeps the existing configuration by @devin-ai-integration[bot] in #1026
- fix(audio): prevent dictation hangs on stalled microphones by @neuroborus in #974
- chore(release): v0.18.5 by @devin-ai-integration[bot] in #1027
New Contributors
- @aagprojectsteam-max made their first contribution in #1023
- @loject made their first contribution in #967
- @Nosion made their first contribution in #956
- @neuroborus made their first contribution in #974
Full Changelog: v0.18.4...v0.18.5
Full Changelog: v0.18.4...v0.18.5