diff --git a/README.md b/README.md
index 79bea54..24a8677 100644
--- a/README.md
+++ b/README.md
@@ -32,39 +32,42 @@ 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.10.0-beta
+## ๐ What's New in v0.10.1-beta
-> ๐ **Release: reliability hardening across keyboard/audio/tray handling, stronger IBus activation, and better CI/testing quality.**
+> ๐ **Release: focused stability patch for tray resources, engine switching safety, keyboard layout preservation, settings dialog compatibility, and suspend/resume reliability.**
-### ๐ Highlights (v0.9.0 โ v0.10.0)
+### ๐ Highlights (v0.10.0 โ v0.10.1)
| Feature | Description |
|---------|-------------|
-| **โจ๏ธ Keyboard Robustness** | Better modifier alias matching across layouts and SYN_DROPPED recovery in evdev |
-| **๐๏ธ Audio Compatibility** | Device channel probing now validates supported sample rates for safer defaults |
-| **๐ฅ๏ธ IBus + Tray Stability** | IBus activation uses `register_component`; tray updates use icon names reliably |
-| **๐งช Quality & CI Upgrades** | Test coverage rose to 80%+, with Node 24 and path-filtered CI pipelines |
+| **๐ผ๏ธ Tray Resource Reliability** | Packaged resources now include tray assets to prevent missing icon scenarios |
+| **๐ง Engine Switch Safety** | Recognition is stopped before engine changes to prevent segfaults |
+| **โจ๏ธ Layout Preservation** | IBus activation now preserves XKB keyboard layout state |
+| **๐ช UI Compatibility** | Settings dialog includes a dedicated Close button for better WM compatibility |
+| **โก Suspend/Resume Recovery** | App now automatically recovers speech recognition and keyboard shortcuts after system suspend/resume |
+| **๐ค Push-to-Talk Reliability** | Fixed premature transcription triggering on silence during push-to-talk mode |
-### โจ New in v0.10.0-beta
+### โจ Scope
-- **IBus registration flow improvements** - Text injection now uses explicit component registration for more reliable engine activation
-- **Expanded IBus test coverage** - Launch mode and main entrypoint paths are now covered in tests
-- **Improved project defaults** - Minimum supported Python version is now 3.9+
+- **Patch release focused on reliability** - No new features, only targeted fixes and maintenance updates
+- **Desktop UX hardening** - Better behavior across tray, settings dialog, and keyboard layout workflows
+- **Suspend/Resume stability** - New D-Bus handler ensures app survives system sleep cycles
+- **Operational maintenance** - Dependency updates for the web and dev toolchains
-### ๐ Bug Fixes (v0.10.0)
+### ๐ Bug Fixes (v0.10.1)
-- **#342**: Generalized pynput modifier alias matching across keyboard layouts
-- **#341**: Channel probing now verifies sample-rate support for selected audio devices
-- **#339**: evdev backend now handles `SYN_DROPPED` to avoid stale modifier state
-- **#333**: Settings dialog now forces window decorations to fix missing-titlebar scenarios
-- **#330**: Tray icon updates now use icon names for AppIndicator compatibility
-- **#304**: IBus activation now uses `register_component` for more reliable startup behavior
+- **#349 / #354**: Bundle resources in package to fix missing system tray icons
+- **#350 / #355**: Stop recognition before switching engines to prevent segfaults
+- **#323 / #356**: Add Close button to settings dialog for better window-manager compatibility
+- **#292 / #343**: Preserve XKB layout when activating the Vocalinux IBus engine
+- **#359**: Prevent premature transcription during push-to-talk silence
+- **#367 / #369**: Auto-recover speech recognition after system resume via new suspend handler
+- **#371**: Restart keyboard shortcut backend after system resume
+- **#372**: Delay keyboard restart to allow USB device re-enumeration after resume
### ๐ง Improvements
-- **Installation fallback hardening** - Installer now resolves latest tag via GitHub API and improves piped-shell behavior
-- **CI runtime modernization** - Deploy workflow upgraded to Node.js 24 with smarter path-based workflow filtering
-- **Repo cleanup** - Removed stale `setup.py` and legacy website build script
+- **Dependencies** - Updated npm/yarn dependency group and `brace-expansion` dev dependency
---
@@ -368,7 +371,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.10.0 |
+| ๐ง Linux | **VocaLinux** | [vocalinux.com](https://vocalinux.com) | [jatinkrmalik/vocalinux](https://github.com/jatinkrmalik/vocalinux) | โ
Beta v0.10.1 |
| ๐ 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 |
diff --git a/docs/RELEASE_PROCESS.md b/docs/RELEASE_PROCESS.md
index ed8df27..48b8c40 100644
--- a/docs/RELEASE_PROCESS.md
+++ b/docs/RELEASE_PROCESS.md
@@ -339,6 +339,7 @@ git push origin v0.5.1-beta
| 0.8.0-beta | 2026-03-01 | Beta | Push-to-talk mode, optional voice commands, input/audio compatibility fixes |
| 0.9.0-beta | 2026-03-14 | Beta | Left/right modifier keys, sound effects toggle, Wayland clipboard fallback, leading-space fix |
| 0.10.0-beta | 2026-03-25 | Beta | Keyboard/audio reliability hardening, IBus/tray stability fixes, CI + test coverage improvements |
+| 0.10.1-beta | 2026-03-27 | Beta | Stability patch: tray resource bundling, engine-switch segfault prevention, settings close action, XKB layout preservation |
## Questions?
diff --git a/docs/UPDATE.md b/docs/UPDATE.md
index f5855c4..8c42724 100644
--- a/docs/UPDATE.md
+++ b/docs/UPDATE.md
@@ -2,39 +2,43 @@
This guide explains how to update Vocalinux to the latest version.
-## What's New in v0.10.0-beta
+## What's New in v0.10.1-beta
### ๐ Highlights
| Feature | Description |
|---------|-------------|
-| **โจ๏ธ Keyboard Robustness** | Better modifier alias handling across layouts and evdev `SYN_DROPPED` recovery |
-| **๐๏ธ Audio Compatibility** | Audio channel probing now validates sample-rate support per device |
-| **๐ฅ๏ธ IBus + Tray Stability** | IBus activation is more reliable and tray icon refresh is more consistent |
-| **๐งช Testing & CI Upgrades** | Coverage increased to 80%+, with modernized Node 24 CI workflows |
+| **๐ผ๏ธ Tray Resource Reliability** | Bundled package resources now prevent missing system tray icons |
+| **๐ง Engine Switch Safety** | Recognition now stops before engine changes to avoid segfaults |
+| **โจ๏ธ Keyboard Layout Preservation** | XKB layout is preserved when activating the Vocalinux IBus engine |
+| **๐ช Settings Dialog Compatibility** | Added an explicit Close button for improved WM interoperability |
+| **โก Suspend/Resume Recovery** | App now automatically recovers speech recognition and keyboard shortcuts after system suspend/resume |
+| **๐ค Push-to-Talk Reliability** | Fixed premature transcription triggering on silence during push-to-talk mode |
-### โจ New Features
+### โจ Scope
-- **IBus registration improvements** โ Text injection activation now uses `register_component`
-- **Expanded IBus test coverage** โ Added launch-mode and main-entrypoint test paths
-- **Python baseline update** โ Minimum supported Python version is now 3.9+
+- **Patch-focused release** โ No new feature surface; this version is dedicated to stability and compatibility fixes
+- **Desktop reliability hardening** โ Improved behavior across tray, engine switching, settings dialog actions, and keyboard layout handling
+- **Suspend/Resume stability** โ New D-Bus handler ensures app survives system sleep cycles
### ๐ Bug Fixes
-- **#342**: Generalize pynput modifier alias matching across layouts
-- **#341**: Probe audio channels using device-supported sample rates
-- **#339**: Handle evdev `SYN_DROPPED` to prevent stale modifier state
-- **#333**: Force window decorations in settings dialog
-- **#330**: Use icon names for AppIndicator tray updates
-- **#304**: Use `register_component` for IBus engine activation
+- **#349 / #354**: Bundle resources in package to fix missing system tray icons
+- **#350 / #355**: Stop recognition before switching engines to prevent segfaults
+- **#323 / #356**: Add Close button to settings dialog for WM compatibility
+- **#292 / #343**: Preserve XKB layout when activating Vocalinux IBus engine
+- **#359**: Prevent premature transcription during push-to-talk silence
+- **#367 / #369**: Auto-recover speech recognition after system resume via new suspend handler
+- **#371**: Restart keyboard shortcut backend after system resume
+- **#372**: Delay keyboard restart to allow USB device re-enumeration after resume
### ๐ง Improvements
-- Installer fallback now resolves latest tag through GitHub API and better handles piped shell execution
-- CI now uses Node.js 24 for website deployment and path-based filtering to skip unnecessary workflows
-- Removed stale `setup.py` and legacy `build-website.sh`
+- Bumped npm/yarn dependency group across the web workspace (#346)
+- Bumped `brace-expansion` in development dependencies (#357)
+- Disabled copy-to-clipboard by default in Settings (#370)
-See the [full changelog](https://github.com/jatinkrmalik/vocalinux/releases/tag/v0.10.0-beta).
+See the [full changelog](https://github.com/jatinkrmalik/vocalinux/releases/tag/v0.10.1-beta).
---
@@ -129,7 +133,7 @@ The installer will:
```bash
cd vocalinux
git fetch origin
-git checkout v0.10.0-beta
+git checkout v0.10.1-beta
./install.sh
```
diff --git a/install.sh b/install.sh
index 6712803..4a632f6 100755
--- a/install.sh
+++ b/install.sh
@@ -235,7 +235,7 @@ resolve_install_tag() {
return
fi
fi
- INSTALL_TAG="v0.10.0-beta"
+ INSTALL_TAG="v0.10.1-beta"
}
resolve_install_tag
diff --git a/src/vocalinux/version.py b/src/vocalinux/version.py
index 81a2f0d..c597e73 100644
--- a/src/vocalinux/version.py
+++ b/src/vocalinux/version.py
@@ -2,8 +2,8 @@
Version information for Vocalinux.
"""
-__version__ = "0.10.0-beta"
-__version_info__ = (0, 10, 0, "beta")
+__version__ = "0.10.1-beta"
+__version_info__ = (0, 10, 1, "beta")
__author__ = "Jatin K Malik"
__email__ = "jatinkrmalik@gmail.com"
__license__ = "GPL-3.0"
diff --git a/web/package-lock.json b/web/package-lock.json
index ac00472..f2fc225 100644
--- a/web/package-lock.json
+++ b/web/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "vocalinux-website",
- "version": "0.10.0",
+ "version": "0.10.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "vocalinux-website",
- "version": "0.10.0",
+ "version": "0.10.1",
"dependencies": {
"@types/node": "^20.14.10",
"@types/react": "^18.3.3",
diff --git a/web/package.json b/web/package.json
index 36c7cd6..47088b1 100644
--- a/web/package.json
+++ b/web/package.json
@@ -1,6 +1,6 @@
{
"name": "vocalinux-website",
- "version": "0.10.0",
+ "version": "0.10.1",
"private": true,
"type": "module",
"scripts": {
diff --git a/web/src/app/changelog/page.tsx b/web/src/app/changelog/page.tsx
index 564c00b..c4219e8 100644
--- a/web/src/app/changelog/page.tsx
+++ b/web/src/app/changelog/page.tsx
@@ -5,6 +5,23 @@ import { SeoSubpageShell } from "@/components/seo-subpage-shell";
import { absoluteUrl, buildPageMetadata } from "@/lib/seo";
const releases = [
+ {
+ version: "v0.10.1-beta",
+ date: "2026-03-30",
+ type: "beta",
+ highlights: [
+ "Bundled package resources to prevent missing system tray icons (fixes #349, PR #354)",
+ "Stopped recognition before engine switches to prevent segfaults (fixes #350, PR #355)",
+ "Added a dedicated Close button in Settings for better WM compatibility (fixes #323, PR #356)",
+ "Preserved XKB layout state during Vocalinux IBus activation (fixes #292, PR #343)",
+ "Auto-recover speech recognition after system suspend/resume via new D-Bus handler (fixes #367, PR #369)",
+ "Restart keyboard shortcut backend after resume to keep shortcuts working (PR #371)",
+ "Delayed keyboard restart to allow USB re-enumeration after resume (PR #372)",
+ "Fixed premature transcription during push-to-talk silence (fixes #358, PR #359)",
+ "Disabled copy-to-clipboard by default in Settings (PR #370)",
+ "Maintenance updates: npm/yarn dependency refresh and brace-expansion dev dependency bump (PR #346, #357)",
+ ],
+ },
{
version: "v0.10.0-beta",
date: "2026-03-25",
@@ -190,7 +207,7 @@ export default function ChangelogPage() {
headline: "Vocalinux Changelog - Release History",
description:
"Complete release history for Vocalinux, the offline voice dictation software for Linux.",
- dateModified: "2026-03-25",
+ dateModified: "2026-03-30",
author: {
"@type": "Person",
name: "Jatin K Malik",
diff --git a/web/src/app/page.tsx b/web/src/app/page.tsx
index 7eb8418..0b74ca5 100644
--- a/web/src/app/page.tsx
+++ b/web/src/app/page.tsx
@@ -64,7 +64,7 @@ const homeJsonLd = [
},
description:
"Offline voice dictation and speech-to-text for Linux with whisper.cpp and VOSK.",
- "softwareVersion": "0.10.0-beta",
+ "softwareVersion": "0.10.1-beta",
author: {
"@type": "Person",
name: "Jatin K Malik",
@@ -290,7 +290,7 @@ export default function HomePage() {
/>
Vocalinux
- v0.10.0 Beta
+ v0.10.1 Beta