github VocaHQ/vocalinux v0.16.0

6 hours ago

Vocalinux v0.16.0

TL;DR:

Vocalinux 0.16.0 is a stable minor on the 0.15 line. New installs default to hold Right Alt push-to-talk. Settings gain an update checker with tray notifications, a searchable language list, unused-model deletion, a family dictation tone picker (default Voca), and an About page for this app, the VocaHQ family, and talk-to-us links. Catalog tones are the family preview WAVs, not synthesized files. The license is AGPL-3.0. The installer uses a Justfile and uv lockfiles, and it needs distro python3-gi instead of building PyGObject from sdist. Test Dictation now says when no speech model is downloaded instead of claiming no speech. App, tray, and site favicons use the shared Voca family mic. vocalinux.com is restyled to the Voca family workbench.


Highlights

Area Description
Updates In-app checker (stable/nightly) plus tray Update Available when GitHub has a newer release
Shortcuts New installs default to hold Right Alt push-to-talk; existing configs keep their shortcut
Settings Searchable language combobox; delete unused downloaded speech models
About This app, VocaHQ family links, and talk-to-us (GitHub, Discord, X, email)
Audio Family tone picker (Lift, Flick, Ember, Step, Voca, Soft, Chirp, Scale, Drop, Glass, Off) plus Preview. New installs default to Voca. Catalog files are the family preview WAVs
License AGPL-3.0, aligned with other VocaHQ projects
Icons App icon, tray states, and site favicons use the shared Voca family mic
Installer Justfile, uv lockfiles, distro python3-gi required. Epic #701 is still open
Test Dictation Missing-model / never-started recognition no longer reports "no speech"

New Features

  • Settings: in-app update checker with stable/nightly channels. (#631 by @jatinkrmalik)
  • Updates: tray Update Available entry and About badge when a newer GitHub release exists. (#645 by @jatinkrmalik)
  • Shortcuts: new installs default to hold Right Alt (push-to-talk). Existing configs keep their shortcut (often double-Ctrl toggle). (#648 by @jatinkrmalik)
  • Settings: searchable Speech Model language combobox. (#672 by @jatinkrmalik, fixes #652 reported by @hopsayer)
  • Settings: delete unused downloaded speech models. (#671 by @jatinkrmalik, fixes #650 reported by @hopsayer)
  • Settings: About page groups this app, VocaHQ family sites, and talk-to-us links. (#718 by @jatinkrmalik)
  • Tray: option to disable the missing-tray warning dialog. (#628 by @jatinkrmalik, fixes #620 reported by @luginf)
  • License: migrate from GPL-3.0 to AGPL-3.0. (#660 by @jatinkrmalik)
  • Icons: app icon, tray states, and site favicons use the shared Voca family mic instead of the old Linux rounded-rect. (#704 by @jatinkrmalik)
  • Audio: family dictation tone picker in Settings → Audio (Lift, Flick, Ember, Step, Voca, Soft, Chirp, Scale, Drop, Glass, Off) plus Preview. New installs and unknown saved names default to Voca. A saved catalog id, including Off, is left alone. The enable switch is still the master mute (including errors). Off only skips start/stop. Original start/stop/error WAVs stay in the tree. (#707 by @jatinkrmalik)

Bug Fixes

  • IBus: require a restorable engine for scoped injection. (#623 by @Scrates1)
  • IBus: restore engine after register_component teardown. (#643 by @jatinkrmalik, fixes #558 reported by @paolobenve)
  • IBus: restore XKB layout after scoped injection on X11. (#665 by @jatinkrmalik, fixes #664 reported by @lucasloami)
  • Injection: stop typing "test" during the wtype probe. (#627 by @jatinkrmalik, fixes #622 reported by @rafaeln)
  • whisper.cpp: skip unsupported context_params on pywhispercpp 1.4. (#626 by @jatinkrmalik, fixes #625 reported by @doctorcolossus)
  • whisper.cpp: use CUDA device 0 when pywhispercpp is CUDA-backed. (#636 by @flesler)
  • whisper.cpp: honor bundled GPU libs and skip software Vulkan devices. Addresses AppImage/GPU comments on #604 from @hopsayer and @JesterEE; #604 remains open. (#674 by @jatinkrmalik)
  • Audio: filter unsafe virtual capture devices that crash capture. (#629 by @jatinkrmalik, fixes #624 reported by @nouredeen06)
  • Audio: open stereo mics at native channel count. (#673 by @jatinkrmalik, fixes #666 reported by @nouredeen06)
  • Audio: catalog tones are the exact family preview WAVs, not the synthesized #707 files. Voca default start/stop are pairs/05-fifth (19448 bytes). generate_sounds.py does not clobber catalog ids. (#708 by @jatinkrmalik)
  • Tray: prefer Ayatana AppIndicator so the KDE tray icon appears. (#621 by @kacperpaczos)
  • Tray: reuse Settings and Logs windows instead of duplicating them. (#669 by @jatinkrmalik, fixes #653 reported by @hopsayer)
  • Settings: separate Close from dictation test controls. (#670 by @jatinkrmalik, fixes #651 reported by @hopsayer)
  • Settings: Test Dictation no longer reports "no speech" when recognition never started (missing model / auto-pause / live engine out of sync). (#702 by @jatinkrmalik)
  • Clipboard: restore after ydotool clipboard-paste injection. (#588 by @mohamdhashim)
  • Clipboard: text-only reads and safer overlapping restore. (#646 by @jatinkrmalik)
  • AppImage: ship transitive GI typelibs for non-Debian hosts. Already shipped as an AppImage hotfix on the v0.15.0 GitHub Release (2026-08-03); included here so the tree matches. (#637 by @jatinkrmalik; report/comments on #585 by @pallaswept)
  • AppImage: pin pywhispercpp to the version install.sh declares so a newer PyPI wheel cannot break the Vulkan rebuild. (#718 by @jatinkrmalik)
  • Installer: gate util-linux-extra to Ubuntu 24.04+. (#635 by @flesler, fixes #526 reported by @BravoSione)
  • Installer: do not pip-build PyGObject from sdist. Distro python3-gi is required. Unset XDG_SESSION_TYPE / XDG_CURRENT_DESKTOP no longer crash under set -u. (#706 by @jatinkrmalik)
  • Settings: report failed model downloads instead of claiming success. (#690 by @kacperpaczos)
  • Tests: stop the suite from overwriting the user's real config.json. (#694 by @kacperpaczos)

Docs / maintenance

  • Website screenshot refresh for v0.15. (#630 by @jatinkrmalik)
  • Prefer Ayatana AppIndicator in Fedora/Arch packaging hints. (#638 by @jatinkrmalik)
  • User guide: CUDA device 0 limit for dual NVIDIA. (#644 by @jatinkrmalik)
  • Discord and VocaHQ README shields. (#695 by @jatinkrmalik)
  • Point GitHub URLs at VocaHQ. (#696 by @jatinkrmalik)
  • Docs: VocaGateway rename and homepage GITHUB_REPO_URL reuse. (#697 by @jatinkrmalik)
  • Discord invite and X handle point at VocaHQ. (#722 by @jatinkrmalik)
  • vocalinux.com restyled to the Voca family workbench; Open Graph card uses the flat Tux. (#728, #729 by @jatinkrmalik)
  • Website copy drops the stale 100% offline claim and marks VocaWin as alpha on the site. (#717 by @jatinkrmalik)
  • CI: force-push tags in Codeberg mirror workflow. (#633 by @jatinkrmalik)
  • Installer: harden install.sh and replace Makefile with Justfile. Part of epic #701 (still open). (#700 by @sesav)
  • Deps: lock dependencies with uv and pin every build input. Part of epic #701 (still open). (#705 by @sesav)

Thanks

Thank you @jatinkrmalik for the update checker, Right Alt PTT default, searchable languages, unused model deletion, AGPL migration, family mic icons, Voca tone picker, family preview WAVs, Test Dictation missing-model message, About page, installer follow-ups, the vocalinux.com restyle, and the bulk of the desktop reliability fixes in this cut.

Thank you @sesav for hardening install.sh, replacing Makefile with Justfile, and adding uv lockfiles with pinned build inputs (#700, #705; epic #701).

Thank you @kacperpaczos for the KDE Ayatana tray fix, failed-download reporting, and the config.json test isolation (#621, #690, #694).

Thank you @flesler for CUDA device 0 selection and gating util-linux-extra to Ubuntu 24.04+ (#636, #635).

Thank you @mohamdhashim for restoring the clipboard after ydotool paste (#588).

Thank you @Scrates1 for requiring a restorable IBus engine on scoped injection (#623).

Thank you @rafaeln for reporting the wtype "test" injection (#622).

Thank you @doctorcolossus for reporting the pywhispercpp 1.4 context_params crash (#625).

Thank you @luginf for the missing-tray warning feature request (#620).

Thank you @nouredeen06 for the audio capture crash reports (#624, #666).

Thank you @paolobenve for the IBus teardown / dead-keys report (#558).

Thank you @lucasloami for the X11 ABNT2 layout restore report (#664).

Thank you @hopsayer for the Settings Close separation, window reuse, searchable language, and unused model requests (#651, #653, #652, #650), and for the GPU comments on #604.

Thank you @BravoSione for the util-linux-extra install failure on Mint 21.3 (#526).

Thank you @JesterEE for the GPU / AppImage comments on #604 that informed #674.

Thank you @pallaswept for the openSUSE AppImage startup report that led to the #637 hotfix (#585).

Thanks to everyone who filed bugs and tested builds on the way to 0.16.


Install / Upgrade

Recommended (install.sh)

curl -fsSL https://raw.githubusercontent.com/VocaHQ/vocalinux/main/install.sh -o /tmp/vl.sh && bash /tmp/vl.sh

The installer needs distro python3-gi / python3-gobject. It no longer pip-builds PyGObject from sdist.

AppImage

Download Vocalinux-0.16.0-x86_64.AppImage or Vocalinux-0.16.0-aarch64.AppImage from this release:

chmod +x Vocalinux-0.16.0-x86_64.AppImage
./Vocalinux-0.16.0-x86_64.AppImage

Host text-injection tools (xdotool, wtype, or ydotool) are still required, same as a PyPI install. FUSE is needed to run the AppImage on most hosts.

Arch Linux (AUR)

yay -S vocalinux

PyPI

pip install -U vocalinux

PyPI is the Python package only. For system deps, desktop integration, and models, use install.sh.

Flatpak

Local build notes live under packaging/flatpak/. Flathub may still trail this tag.

Upgrade details: docs/UPDATE.md

Full changelog: v0.15.0...v0.16.0

Don't miss a new vocalinux release

NewReleases is sending notifications on new releases.