chore(release): prepare v0.14.2 (#537)

* chore(release): prepare v0.14.2

IBus stability patch on the 0.14 series: engine process launch after XDG
import (#534) and FocusIn gate for first dictation on GNOME Wayland (#533).

Keep 0.14 series feature list in README/UPDATE for patch releases; changelog
and AppStream note only the delta. Document that rule in RELEASE_PROCESS.

* fix(release): address 0.14.2 review findings

- Dates: v0.14.2 uses 2026-07-17 (not before 0.14.1)
- AUR: sha256sums=SKIP until tag; document updpkgsums in RELEASE_PROCESS
- Single version source: package __init__ re-exports version.py; User-Agent uses __version__
- Docs: drop redundant series recaps; shrink AppStream/changelog delta
- README ecosystem status: Stable v0.14.2 (not Beta)

* docs(release): include settings scroll fixes in 0.14.2 notes

Cover #538 and #541 (scrollable settings tabs / wheel polish) in README,
UPDATE, website changelog, AppStream, and version history after rebasing
onto main.
This commit is contained in:
Jatin K Malik
2026-07-17 18:42:53 -07:00
committed by GitHub
parent d8f15d83d3
commit 3d65e5cea9
14 changed files with 91 additions and 24 deletions
+13 -9
View File
@@ -32,24 +32,28 @@ It's a free, GPLv3-licensed desktop app that lets you dictate text into *any* ap
No internet required. No data leaves your machine. Just speak and type.
## 📚 What's New in v0.14.1
## 📚 What's New in v0.14.2
> **Release: Flatpak packaging, AUR package, layout-aware hotkeys, and installer/text-injection fixes.**
> **0.14.2 is a stability patch on the 0.14 series.** Feature set is the same as 0.14.x; this release fixes IBus reliability and settings dialog sizing.
### Highlights
### 0.14 series highlights
| Feature | Description |
|---------|-------------|
| **Flatpak packaging** | Distro-independent install with whisper.cpp, global hotkeys (evdev), and Wayland text injection (wl-copy + ydotool) |
| **Configurable hotkeys** | Bind any modifier combination to a key (e.g. `Alt+R`, `Ctrl+Shift+V`) |
| **FunASR / SenseVoice** | Remote-API engine supports FunASR and SenseVoice models |
| **Flatpak packaging** | Distro-independent install with whisper.cpp, global hotkeys (evdev), and Wayland paste (wl-copy + ydotool) |
| **AUR package** | Arch users can install via `yay -S vocalinux` |
| **Layout-aware hotkeys** | Combo keys work correctly on non-US keyboard layouts |
| **Installer / text injection** | `sg` fix for Ubuntu 26.04/Debian 13; treat XIM `none` as unset |
| **Wayland / IBus reliability** | GNOME and KDE injection fixes, first-dictation FocusIn gate, engine process launch restored |
See [docs/UPDATE.md](docs/UPDATE.md) and the [full changelog](https://github.com/jatinkrmalik/vocalinux/releases/tag/v0.14.1).
### Bug fixes in v0.14.2
### Previous: v0.14.0-beta
- **IBus**: Restore engine process launch after the Flatpak XDG path import change (no silent ydotool fallback when IBus should work) (#534)
- **IBus**: Wait for FocusIn before commit on scoped injection so the first dictation of a session is not dropped on GNOME Wayland (#533, fixes #523)
- **Settings UI**: Tabs scroll so the dialog fits the monitor; wheel events from unfocused combos/spins reach the tab scroller (#538, #541)
Configurable shortcuts, FunASR/SenseVoice remote API, Wayland IBus reliability, audio crash fix, hybrid-CPU efficiency. Details in [UPDATE.md](docs/UPDATE.md).
See [docs/UPDATE.md](docs/UPDATE.md) and the [full changelog](https://github.com/jatinkrmalik/vocalinux/releases/tag/v0.14.2). Earlier 0.14.x notes are in UPDATE.md.
---
@@ -426,7 +430,7 @@ Vocalinux is part of a family of privacy-first, offline voice dictation tools. S
| Platform | Project | Website | GitHub | Status |
|----------|---------|---------|--------|--------|
| 🐧 Linux | **VocaLinux** | [vocalinux.com](https://vocalinux.com) | [jatinkrmalik/vocalinux](https://github.com/jatinkrmalik/vocalinux) | ✅ Beta v0.14.1 |
| 🐧 Linux | **VocaLinux** | [vocalinux.com](https://vocalinux.com) | [jatinkrmalik/vocalinux](https://github.com/jatinkrmalik/vocalinux) | ✅ Stable v0.14.2 |
| 🍎 macOS | **VocaMac** | [vocamac.com](https://vocamac.com) | [jatinkrmalik/vocamac](https://github.com/jatinkrmalik/vocamac) | 🚀 Beta |
| 🪟 Windows | **VocaWin** | [vocawin.com](https://vocawin.com) | [jatinkrmalik/vocawin](https://github.com/jatinkrmalik/vocawin) | 📋 Planned |
+12
View File
@@ -97,6 +97,17 @@ Change the Development Status classifier:
"Development Status :: 5 - Production/Stable",
```
### Patch releases within a minor line (e.g. 0.14.x)
When shipping bug fixes only (PATCH bump, same MINOR):
- **README / `docs/UPDATE.md` "What's New"** keeps the **minor-series feature list** (everything introduced in that 0.Y line) and adds a short **Bug fixes in this patch** subsection for the delta only. Do not make the marketing highlight table look featureless because this tag only contains fixes.
- **Website changelog** (`web/src/app/changelog/page.tsx`) may list only the delta for the new entry; older entries stay historical.
- **AppStream** (`packaging/flatpak/com.vocalinux.Vocalinux.metainfo.xml`): add a short `<release>` note for the patch delta only; leave the long product feature `<ul>` as series/product-level.
- **SECURITY.md** supported versions table usually stays on the minor line (`0.14.x`) without a row per patch.
- **AUR PKGBUILD**: bump `pkgver` / `_tag`; leave `sha256sums=('SKIP')` until the tag tarball exists. The release workflow runs `updpkgsums` when publishing to the AUR.
- **Dates**: patch release dates must not predate the previous release in changelog / AppStream / version history.
### Step 3: Update Documentation
#### 3.1 Update `README.md`
@@ -346,6 +357,7 @@ git push origin v0.5.1-beta
| 0.13.0-beta | 2026-06-30 | Beta | Guided whisper.cpp model variants, Wayland text-injection reliability, hotplug keyboard support, dictation spacing fix, website docs refresh |
| 0.14.0-beta | 2026-07-13 | Beta | Configurable modifier+key hotkeys, FunASR/SenseVoice remote-API support, GNOME/KDE Wayland IBus reliability fixes, audio crash fix, hybrid-CPU efficiency fix |
| 0.14.1 | 2026-07-17 | Stable | Flatpak packaging, AUR package, layout-aware hotkeys, installer/text-injection fixes |
| 0.14.2 | 2026-07-17 | Stable | IBus engine launch + FocusIn gate; settings tabs scroll to fit monitor |
## Questions?
+27 -1
View File
@@ -2,6 +2,32 @@
This guide explains how to update Vocalinux to the latest version.
## What's New in v0.14.2
0.14.2 is a stability patch on the **0.14 series**. The feature set is the same as 0.14.x; this release fixes IBus reliability and settings dialog sizing.
### 0.14 series highlights
| Feature | Description |
|---------|-------------|
| **Configurable Shortcuts** | Bind any modifier combination to a key — e.g. `Alt+R`, `Ctrl+Shift+V`, or `Super+F10` |
| **FunASR / SenseVoice Remote API** | Remote-API engine supports FunASR and SenseVoice via OpenAI-compatible endpoints |
| **Flatpak packaging** | Universal Flatpak (whisper.cpp) with sandbox-aware paths, global hotkeys, and Wayland paste injection |
| **AUR package** | Official Arch packaging and CI publish path |
| **Layout-aware hotkeys** | Combo keys respect non-US layouts |
| **Wayland / IBus reliability** | GNOME and KDE injection fixes, first-dictation FocusIn gate, engine process launch restored |
| **Audio / hybrid-CPU** | Recording device-index crash fixed; whisper.cpp no longer defaults to all cores on hybrid CPUs |
### Bug fixes in v0.14.2
- **IBus**: Restore engine process launch after the Flatpak XDG path import change. `start_engine_process` and the IBus component exec run `ibus_engine.py` by path, so the relative import failed with `ImportError` and Vocalinux fell back to ydotool/clipboard paste (#534)
- **IBus**: Wait for FocusIn before commit on scoped injection. Cold first activation on GNOME Wayland could commit before mutter bound a client context, so the first dictation of a session was dropped while logs still reported success (#533, fixes #523)
- **Settings UI**: Wrap each notebook tab in a vertical ScrolledWindow so the dialog fits 1080p monitors instead of growing past the screen; forward wheel events from unfocused combos/spins to the tab scroller and drop nested Advanced ScrolledWindow shadows (#538, #541)
See the [full changelog](https://github.com/jatinkrmalik/vocalinux/releases/tag/v0.14.2).
---
## What's New in v0.14.1
### Highlights
@@ -305,7 +331,7 @@ The installer will:
```bash
cd vocalinux
git fetch origin
git checkout v0.14.1
git checkout v0.14.2
./install.sh
```
+4 -3
View File
@@ -3,8 +3,8 @@
pkgname=vocalinux
# AUR pkgver cannot contain hyphens (v0.14.0-beta -> 0.14.0beta).
pkgver=0.14.1
_tag=0.14.1
pkgver=0.14.2
_tag=0.14.2
pkgrel=1
pkgdesc="Free, offline voice dictation for Linux"
arch=('any')
@@ -48,7 +48,8 @@ optdepends=(
)
conflicts=('vocalinux-git')
source=("${pkgname}-${_tag}.tar.gz::https://github.com/jatinkrmalik/vocalinux/archive/refs/tags/v${_tag}.tar.gz")
sha256sums=('030dfe1ddbc51672c7bfb0f471c256a998fe871bd190028dd882e4507d00af58')
# SKIP until the v${_tag} tarball exists. release.yml sets updpkgsums=true on publish.
sha256sums=('SKIP')
build() {
cd "${pkgname}-${_tag}"
+1 -1
View File
@@ -78,7 +78,7 @@ pipx run flatpak-pip-generator \
sources:
- type: git
url: https://github.com/jatinkrmalik/vocalinux.git
tag: v0.14.1
tag: v0.14.2
commit: <release-commit-sha>
```
@@ -105,6 +105,11 @@
</content_rating>
<releases>
<release version="0.14.2" date="2026-07-17">
<description>
<p>IBus stability (engine process launch after XDG path import; first-dictation FocusIn gate on GNOME Wayland) and settings dialog tabs that scroll so the window fits the monitor.</p>
</description>
</release>
<release version="0.14.1" date="2026-07-16">
<description>
<p>First Flathub-oriented packaging release: Flatpak with whisper.cpp + Vulkan, wl-copy/ydotool Wayland paste, evdev global hotkeys, AUR package, layout-aware shortcuts, and installer fixes.</p>
+3 -2
View File
@@ -7,13 +7,14 @@ This is important for pip/pipx installations where PyGObject is installed
but system typelibs (AppIndicator3, etc.) may not be accessible.
"""
__version__ = "0.1.0"
# Import common types first to avoid circular imports
from .common_types import RecognitionState # noqa: F401
# Import non-GTK modules that are safe to import at package level
from .utils import ResourceManager
# Single source of truth lives in version.py (also used by pyproject dynamic version).
from .version import __version__ # noqa: F401
# Note: speech_recognition, text_injection, and ui.tray_indicator
# are imported lazily in main.py to handle missing GTK gracefully
@@ -23,6 +23,7 @@ from ..ui.audio_feedback import play_error_sound, play_start_sound, play_stop_so
from ..utils.paths import models_dir
from ..utils.vosk_model_info import VOSK_MODEL_INFO
from ..utils.whispercpp_model_info import WHISPERCPP_MODEL_INFO, get_model_path, is_model_downloaded
from ..version import __version__
from .command_processor import CommandProcessor
from .silero_vad import SILERO_CHUNK_SIZE, load_silero_vad
@@ -1700,7 +1701,7 @@ class SpeechRecognitionManager:
url,
stream=True,
timeout=self._MODEL_DOWNLOAD_TIMEOUT,
headers={"User-Agent": "vocalinux/0.14.1"},
headers={"User-Agent": f"vocalinux/{__version__}"},
)
response.raise_for_status()
+2 -2
View File
@@ -2,8 +2,8 @@
Version information for Vocalinux.
"""
__version__ = "0.14.1"
__version_info__ = (0, 14, 1)
__version__ = "0.14.2"
__version_info__ = (0, 14, 2)
__author__ = "Jatin K Malik"
__email__ = "jatinkrmalik@gmail.com"
__license__ = "GPL-3.0"
+7
View File
@@ -18,6 +18,13 @@ class TestVersion(unittest.TestCase):
parts = __version__.replace("-", ".").split(".")
self.assertTrue(len(parts) >= 3)
def test_package_version_matches_version_module(self):
"""Package root re-exports version.py so import vocalinux.__version__ is correct."""
import vocalinux
from vocalinux.version import __version__
self.assertEqual(vocalinux.__version__, __version__)
def test_version_info_tuple(self):
"""Test that version info tuple exists and is valid."""
from vocalinux.version import __version_info__
+2 -2
View File
@@ -1,12 +1,12 @@
{
"name": "vocalinux-website",
"version": "0.14.1",
"version": "0.14.2",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "vocalinux-website",
"version": "0.14.1",
"version": "0.14.2",
"dependencies": {
"@types/node": "^20.14.10",
"@types/react": "^18.3.3",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "vocalinux-website",
"version": "0.14.1",
"version": "0.14.2",
"private": true,
"type": "module",
"scripts": {
+10
View File
@@ -14,6 +14,16 @@ import { SeoSubpageShell } from "@/components/seo-subpage-shell";
import { absoluteUrl, buildPageMetadata } from "@/lib/seo";
const releases = [
{
version: "v0.14.2",
date: "2026-07-17",
type: "stable",
highlights: [
"IBus: restore engine process launch after Flatpak XDG path import so the engine no longer dies with ImportError and falls back to ydotool/clipboard paste (PR #534)",
"IBus: wait for FocusIn before commit on scoped injection so the first dictation of a session is not dropped on GNOME Wayland (PR #533, fixes #523)",
"Settings UI: notebook tabs scroll so the dialog fits the monitor; wheel events from unfocused combos/spins reach the tab scroller (PR #538, #541)",
],
},
{
version: "v0.14.1",
date: "2026-07-17",
+2 -2
View File
@@ -68,7 +68,7 @@ const homeJsonLd = [
},
description:
"Offline voice dictation and speech-to-text for Linux with whisper.cpp and VOSK.",
softwareVersion: "0.14.1",
softwareVersion: "0.14.2",
author: {
"@type": "Person",
name: "Jatin K Malik",
@@ -341,7 +341,7 @@ export default function HomePage() {
/>
<span className="text-lg font-bold sm:text-xl">Vocalinux</span>
<span className="from-primary/20 border-primary/30 shadow-primary/20 hidden rounded-full border bg-gradient-to-r to-green-500/20 px-2.5 py-1 text-xs font-semibold text-primary shadow-sm sm:inline-block">
v0.14.1
v0.14.2
</span>
</Link>