From fbb81238f5de24db7de9685670434f16d033db61 Mon Sep 17 00:00:00 2001 From: Jatin K Malik Date: Sun, 2 Aug 2026 15:26:03 -0700 Subject: [PATCH] chore(release): prepare v0.15.0 (#609) * chore(release): prepare v0.15.0 Bump version across app, web, AUR, and Flatpak metainfo. Document GitHub release-notes rules, refresh README/UPDATE/INSTALL/USER_GUIDE for the 0.15 series (sidebar settings, AppImage, auto-pause/keepalive, Vulkan device selection), and align website product surfaces with shipped features. Co-authored-by: Jatin K Malik * docs(release): fold latest main into v0.15.0 notes Include dictation capitalization/trailing-space, ibus-wayland injection, IBus teardown, and settings notice polish landed on main after the initial release prep rebase. Co-authored-by: Jatin K Malik * docs(release): include Bluetooth mic crash fix in v0.15.0 notes Fold #599 (PortAudio Bluetooth SCO probe heap corruption) into README, UPDATE, changelog, AppStream, and release history after rebasing onto main. Co-authored-by: Jatin K Malik * docs(release): include language catalog expansion in v0.15.0 notes Fold #616 (Hungarian and expanded speech languages, Fixes #565) into README, UPDATE, changelog, AppStream, PRODUCT.md, and release history after rebasing onto latest main. Co-authored-by: Jatin K Malik * docs(release): fold settings footer and language follow-ups into v0.15.0 Include #618 sidebar dictation footer, #619 Custom Shortcut Record/Set restore, and #617 English (India) Whisper language mapping after rebasing onto latest main. Co-authored-by: Jatin K Malik --------- Co-authored-by: Cursor Agent Co-authored-by: Jatin K Malik --- CONTRIBUTING.md | 2 +- README.md | 39 +++++++----- SECURITY.md | 3 +- docs/HTTP_REMOTE.md | 2 +- docs/INSTALL.md | 14 +++++ docs/RELEASE_PROCESS.md | 55 ++++++++++++++++- docs/UPDATE.md | 60 ++++++++++++++++++- docs/USER_GUIDE.md | 15 ++++- packaging/aur/vocalinux/PKGBUILD | 4 +- packaging/flatpak/README.md | 2 +- .../com.vocalinux.Vocalinux.metainfo.xml | 5 ++ pyproject.toml | 2 +- src/vocalinux/version.py | 4 +- web/PRODUCT.md | 18 ++++-- web/package-lock.json | 4 +- web/package.json | 2 +- web/src/app/advanced-settings/page.tsx | 5 +- web/src/app/changelog/page.tsx | 21 +++++++ web/src/app/desktop-reliability/page.tsx | 7 ++- web/src/app/faq/page.tsx | 4 +- web/src/app/gpu-acceleration/page.tsx | 3 + web/src/app/install/page.tsx | 11 ++++ web/src/app/page.tsx | 18 +++++- web/src/app/screenshots/page.tsx | 10 ++-- 24 files changed, 261 insertions(+), 49 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 26b66e8..210ffca 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -241,7 +241,7 @@ The test server supports both API formats: **To test in Vocalinux:** 1. Start the test server -2. Open Vocalinux Settings → Speech Engine tab +2. Open Vocalinux Settings → Speech Engine (sidebar) 3. Select **Remote API** from the engine dropdown 4. Set Server URL to `http://localhost:8080` 5. Choose API Endpoint format (whisper.cpp or OpenAI) diff --git a/README.md b/README.md index b27a215..14a12d5 100644 --- a/README.md +++ b/README.md @@ -38,28 +38,35 @@ 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.2 +## 📚 What's New in v0.15.0 -> **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. +> **0.15.0** adds searchable sidebar settings, AppImage packages, a much larger speech-language catalog (including Hungarian), cleaner continuous dictation (capitalization + trailing spaces), power-saving model unload, smarter Vulkan GPU selection, and Wayland IBus improvements on top of the 0.14 packaging line. -### 0.14 series highlights +### Highlights | Feature | Description | |---------|-------------| -| **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 | -| **Wayland / IBus reliability** | GNOME and KDE injection fixes, first-dictation FocusIn gate, engine process launch restored | +| **Searchable settings** | Sidebar navigation with search replaces the seven-tab notebook (#601) | +| **AppImage** | Self-contained x86_64 and aarch64 builds on GitHub Releases (#573, #602) | +| **More languages** | ~33 selectable speech languages (plus Auto-detect), including Hungarian; VOSK only lists languages with official models (#616, fixes #565) | +| **Dictation polish** | Auto-capitalize after sentence punctuation; trailing space so the next utterance does not glue on (#554, #608) | +| **Auto-pause + keep-alive** | Pause/unload while configured apps run; unload after idle timeout (#592) | +| **Vulkan GPU selection** | Prefer discrete GPUs automatically; pick a device in Advanced settings (#590) | +| **ibus-wayland** | Use IBus on “unbridged” compositors when `ibus-wayland` is running (#614) | -### Bug fixes in v0.14.2 +### Also in this release -- **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) +- Settings: dictation status / mic level / Test Dictation / Close live in the sidebar footer (#618) +- Settings: Custom Shortcut Record/Set controls show again (#619) +- Languages: English (India) maps to Whisper code `en` (#617) +- CLI `--version` (#563) +- Bluetooth mic probing no longer corrupts the heap / crashes on SCO capture devices (#599) +- IBus engine teardown when parent destroy fails (#613) +- Settings info notices flattened to match the rest of the dialog (#615) +- KDE Plasma Wayland unbridged-IBus skip when ibus-wayland is absent (#577) +- xdotool focus preserve; installer / uninstall / AUR reliability fixes (#564, #583, #569, #597, #579, #586) -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. +See [docs/UPDATE.md](docs/UPDATE.md) and the [full changelog](https://github.com/jatinkrmalik/vocalinux/releases/tag/v0.15.0). --- @@ -79,7 +86,7 @@ See [docs/UPDATE.md](docs/UPDATE.md) and the [full changelog](https://github.com ## 📸 Screenshots -Vocalinux in action, plus the settings tabs from v0.14.0-beta. Full gallery on the [website screenshots page](https://vocalinux.com/screenshots/). +Vocalinux in action. Settings gallery shots may lag the searchable sidebar UI from v0.15.0 — full gallery on the [website screenshots page](https://vocalinux.com/screenshots/). ### Product @@ -447,7 +454,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) | ✅ Stable v0.14.2 | +| 🐧 Linux | **VocaLinux** | [vocalinux.com](https://vocalinux.com) | [jatinkrmalik/vocalinux](https://github.com/jatinkrmalik/vocalinux) | ✅ Stable v0.15.0 | | 🍎 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/SECURITY.md b/SECURITY.md index f9f4314..67a678a 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -4,7 +4,8 @@ | Version | Supported | | ------- | ------------------ | -| 0.14.x | :white_check_mark: | +| 0.15.x | :white_check_mark: | +| 0.14.x | :x: | | 0.13.x | :x: | | 0.12.x | :x: | | 0.11.x | :x: | diff --git a/docs/HTTP_REMOTE.md b/docs/HTTP_REMOTE.md index 4609733..7a6548f 100644 --- a/docs/HTTP_REMOTE.md +++ b/docs/HTTP_REMOTE.md @@ -98,7 +98,7 @@ The remote engine is a power-user option in the **Speech Engine** settings. - **Model**: model identifier sent to OpenAI-compatible servers. Use `whisper-1` for classic Whisper servers, or `sensevoice` for FunASR/SenseVoice. 4. Click **Test Connection** — a successful test means the URL is reachable and credentials (if any) are accepted. A failure here is just a warning; Vocalinux will still try again on the first transcription. -Settings auto-save and re-initialise the engine immediately, so you can start dictating as soon as the test passes. Toggling the switch off restores the local engine selected on the Speech Engine tab. +Settings auto-save and re-initialise the engine immediately, so you can start dictating as soon as the test passes. Toggling the switch off restores the local engine selected on the Speech Engine page in Settings. ### Via the config file diff --git a/docs/INSTALL.md b/docs/INSTALL.md index 316b100..0038a12 100644 --- a/docs/INSTALL.md +++ b/docs/INSTALL.md @@ -27,6 +27,20 @@ That's it! The installer handles everything automatically: git clone https://github.com/jatinkrmalik/vocalinux.git && cd vocalinux && ./install.sh ``` +### AppImage (no install, no root) + +Download the `.AppImage` for your CPU (`x86_64` or `aarch64`) from +[GitHub Releases](https://github.com/jatinkrmalik/vocalinux/releases), then: + +```bash +chmod +x Vocalinux-*-x86_64.AppImage # or aarch64 +./Vocalinux-*-x86_64.AppImage +``` + +AppImage still needs host text-injection tools (`xdotool` on X11; `wtype` / +`ydotool` / clipboard tools on Wayland), same as the PyPI path. Prefer the +one-liner installer above when you want system deps and models set up for you. + ### From PyPI The PyPI package installs the Python application and Python dependencies, but it diff --git a/docs/RELEASE_PROCESS.md b/docs/RELEASE_PROCESS.md index 484a5f4..1038ae7 100644 --- a/docs/RELEASE_PROCESS.md +++ b/docs/RELEASE_PROCESS.md @@ -28,11 +28,13 @@ Use this checklist for every release: - [ ] `SECURITY.md` - Update supported versions table ### Website -- [ ] `web/src/app/page.tsx` - Update `softwareVersion` in schema (around line 68) -- [ ] `web/src/app/page.tsx` - Update version badge in header (around line 293) +- [ ] `web/src/app/page.tsx` - Update `softwareVersion` in schema +- [ ] `web/src/app/page.tsx` - Update version badge / live version surfaces if present - [ ] `web/src/app/changelog/page.tsx` - Add new release entry to changelog - [ ] `web/package.json` - Update version field - [ ] `web/package-lock.json` - Keep top-level/version metadata aligned with `web/package.json` +- [ ] `web/PRODUCT.md` - Keep capabilities aligned with shipped features +- [ ] Confirm install docs/website mention **AppImage** when this release ships AppImages ### Testing & Verification - [ ] Run `make test` - All tests pass @@ -108,6 +110,54 @@ When shipping bug fixes only (PATCH bump, same MINOR): - **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. +### GitHub Release Notes Writing Rules + +Use these rules for every GitHub Release body (and for the draft pasted into the release-prep PR). Website changelog entries stay shorter; see below. + +#### Sources of truth + +- Delta commits: `git log vPREV..HEAD` plus merged PR titles/bodies. +- Closed issues via PR `Fixes` / `Closes` references only — do not invent issue numbers. +- Do not invent benchmarks, user counts, testimonials, or features not in the tree. + +#### Required structure + +1. `# Vocalinux vX.Y.Z` title +2. One to three plain sentences: what this release is for (no hype) +3. `## Highlights` — markdown table, about 4–8 rows +4. `## New Features` — bullets with PR + author; include issue closes when real +5. `## Bug Fixes` — group by area (IBus, Installer, AUR, Text injection, …) +6. Optional: `## Improvements`, `## Docs`, `## Packaging` +7. `## Thanks` — external PR authors and issue reporters by `@handle` +8. `## Install / Upgrade` — `install.sh`, AUR, PyPI, **AppImage**, Flatpak status (honest) +9. Footer compare link: `https://github.com/jatinkrmalik/vocalinux/compare/vPREV...vX.Y.Z` + +#### Include / exclude + +- **Include:** user-visible features, install/packaging changes, desktop reliability fixes, docs that change user instructions. +- **Exclude or demote:** Dependabot-only bumps, CI matrix tweaks, agent-env docs, pure refactors — short “CI / maintenance” subsection at most. + +#### Attribution and voice + +- Feature/fix bullets: `(#N by @author; fixes #M reported by @reporter)` when known. +- Practical, specific, Linux-native. Name the symptom users hit. +- Avoid promotional filler (“seamless”, “pivotal”, “game-changer”, fake significance). + +#### Website changelog vs GitHub Release + +- **Website** (`web/src/app/changelog/page.tsx`): 3–10 concise user-facing bullets for the new entry. +- **GitHub Release**: fuller narrative + install block + thanks. Draft in the release-prep **PR body**; paste/edit onto the release after the tag workflow runs (workflow install stub + generated notes are a starting point only). + +#### Minor vs patch (reminder) + +- **Minor** (e.g. `0.15.0`): rewrite README / UPDATE “What’s New” for the new series; full website changelog entry; AppStream release note summarizes the series. +- **Patch** (e.g. `0.15.1`): keep series feature table; add “Bug fixes in this patch” only; website changelog lists delta only. + +#### Draft delivery + +- Release-prep PRs should include a `## Draft GitHub Release Notes` section in the PR description for review before tag. +- Do not tag from the prep branch alone; tag after merge to `main`. + ### Step 3: Update Documentation #### 3.1 Update `README.md` @@ -358,6 +408,7 @@ git push origin v0.5.1-beta | 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 | +| 0.15.0 | 2026-07-28 | Stable | Searchable settings + sidebar dictation footer, AppImage, expanded languages, dictation polish, auto-pause/keepalive, Vulkan device selection, ibus-wayland, Bluetooth mic + shortcut UI fixes | ## Questions? diff --git a/docs/UPDATE.md b/docs/UPDATE.md index c68813b..69e3e57 100644 --- a/docs/UPDATE.md +++ b/docs/UPDATE.md @@ -2,6 +2,64 @@ This guide explains how to update Vocalinux to the latest version. +## What's New in v0.15.0 + +0.15.0 is a **minor** release on the stable line. It redesigns settings navigation, adds AppImage packages, expands the speech-language catalog (Hungarian and many more), cleans up continuous dictation spacing/capitalization, adds power/GPU controls, and improves Wayland IBus on compositors that ship `ibus-wayland`, on top of the 0.14 packaging work (Flatpak, AUR, configurable hotkeys). + +### Highlights + +| Feature | Description | +|---------|-------------| +| **Searchable settings** | Sidebar navigation with search replaces the seven-tab notebook (#601) | +| **AppImage** | Self-contained x86_64 and aarch64 builds attached to GitHub Releases (#573, #602) | +| **Language catalog** | ~33 selectable speech languages plus Auto-detect (incl. Hungarian); CLI choices derived from the same catalog; VOSK hides Whisper-only langs (#616, fixes #565) | +| **Dictation polish** | Auto-capitalize after `.` / `!` / `?`; append a trailing space after each completed utterance (#554, #608) | +| **Auto-pause + keep-alive** | Unload the model while configured apps run, or after an idle timeout (#592) | +| **Vulkan GPU selection** | Prefer a discrete GPU automatically; pick a device under Advanced settings (#590) | +| **ibus-wayland** | Prefer IBus on previously “unbridged” compositors when `ibus-wayland` is running (#614) | +| **CLI `--version`** | Print the installed version and exit (#563) | + +### New Features + +- **Searchable sidebar settings** — Topic pages in a sidebar with live search instead of seven notebook tabs (#601) +- **AppImage packaging** — Relocatable x86_64 and aarch64 AppImages built in the release workflow (#573, #602) +- **Expanded speech languages** — Hungarian plus many high-demand Whisper languages in Settings/CLI; official Alphacephei VOSK models where available; Whisper-only languages stay hidden in the VOSK dropdown (#616 by @jatinkrmalik, fixes #565) +- **Sidebar dictation controls** — Recognition status, mic level, Test Dictation, and Close stay visible in the settings sidebar footer while switching pages (#618) +- **Sentence capitalization** — Capitalize at the start of dictation and after sentence-ending punctuation (#554, closes #553) +- **Trailing space between utterances** — Completed transcriptions leave a trailing space so the next session does not glue onto the previous sentence (#608, fixes #605) +- **Auto-pause apps + model keep-alive** — Optional unload while selected processes run; idle timeout unload for battery/Optimus laptops (#592, closes #445, #591) +- **Vulkan discrete GPU auto-select + manual device** — Prefer discrete devices; override in Advanced settings (#590, closes #589) +- **IBus via ibus-wayland** — On compositors previously treated as unbridged, use IBus when `ibus-wayland` is available (#614 by @eiseleb47, closes #607) +- **`vocalinux --version`** — Print package version (#563, closes #555) + +### Bug Fixes + +- **Settings**: Restore Custom Shortcut entry / Record / Set controls after the sidebar settings refactor (#619) +- **Languages**: Map English (India) (`en-in`) to Whisper code `en` for whisper.cpp / Whisper / remote API (#617) +- **Audio**: Stop Bluetooth mic probing from corrupting the heap — one PortAudio open per capture session, stop-before-close, no stereo probe on mono-only devices (#599, fixes #567) +- **IBus**: Keep engine teardown correct when parent `do_destroy` fails (#613 by @eiseleb47, fixes #606) +- **Settings UI**: Flatten info notices so helper text matches the rest of the dialog (#615) +- **KDE Plasma Wayland**: Skip unbridged IBus when `ibus-wayland` is not present so injection does not silently fail (#577, fixes #574) +- **xdotool**: Preserve input focus after injection (#564, fixes #549) +- **Uninstall**: Remove IBus data dir; stop the app by PID file; remove `~/.local/bin` launcher wrappers reliably (#597, #569) +- **Installer**: Prefer both libgirepository 1.0 and 2.0 when present (#583, fixes #571) +- **AUR**: Virtual `python-pywhispercpp` dependency; clipboard/wtype tools as optdepends (#579, #586) +- **UI**: First-run dialog response without `Gtk.Dialog.do_response` (#580, fixes #566) +- **Vosk**: Italian and English-India entries in medium/large model tables (#551, fixes #550) +- **Docs**: Correct ydotool service setup guidance (#560, fixes #557) + +### Docs / website + +- Marketing site redesign with workstation craft (#582) +- Languages marketing page with honest per-engine badges (#616) +- Multi-distro tray icon FAQ (#584) +- robots.txt no longer blocks indexable pages (#610) +- Website CI lint / action warning cleanup (#611) + +See the [full changelog](https://github.com/jatinkrmalik/vocalinux/releases/tag/v0.15.0). + +--- + ## 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. @@ -331,7 +389,7 @@ The installer will: ```bash cd vocalinux git fetch origin -git checkout v0.14.2 +git checkout v0.15.0 ./install.sh ``` diff --git a/docs/USER_GUIDE.md b/docs/USER_GUIDE.md index 9387a77..9987f70 100644 --- a/docs/USER_GUIDE.md +++ b/docs/USER_GUIDE.md @@ -36,6 +36,10 @@ Vocalinux supports login autostart using the standard Linux desktop-session mech 4. **Speak clearly**: As you speak, your words will be transcribed into the currently focused application 5. **Stop voice typing**: Click the tray icon and select "Stop Voice Typing" when you're done, double-tap again in toggle mode, or release the key in push-to-talk mode +### Dictation formatting + +Vocalinux capitalizes the start of dictation and letters after `.`, `!`, or `?`. Each completed utterance also leaves a trailing space so the next push-to-talk or toggle session does not glue onto the previous sentence (`Hello.This` → `Hello. This`). + ### Understanding the Status Icons - **Microphone off** (gray): Voice typing is inactive @@ -112,7 +116,7 @@ Vocalinux now offers **three speech recognition engines**: ### Changing Engine and Model 1. Open settings from the tray icon menu (right-click) -2. Go to the "Speech Engine" tab +2. Open the **Speech Engine** page in the settings sidebar (search works if you prefer) 3. Select your **Speech Engine**: - whisper_cpp (recommended) - whisper @@ -152,12 +156,21 @@ English-only whisper.cpp specializations limit the language selector to English. - **CUDA** (NVIDIA only) - Fallback if Vulkan not available - **CPU** - Always works as fallback +On multi-GPU machines, Vocalinux prefers a **discrete** Vulkan device when one is present. You can override the device under **Advanced** settings (`whispercpp_gpu_device`). + To check which backend is being used, look for these log messages when starting Vocalinux: ``` [INFO] whisper.cpp using Vulkan GPU backend: AMD Radeon RX 6800 [INFO] whisper.cpp configured with n_threads=16 ``` +### Auto-pause and model keep-alive + +Optional power-saving controls live under settings: + +- **Auto-pause apps** — unload the speech model while configured apps/games are running, then reload when they exit +- **Model keep-alive** — unload the model after a configurable idle timeout so idle dictation does not keep GPU/CPU resources warm + ## Troubleshooting If you encounter issues, check the [Installation Guide](INSTALL.md) troubleshooting section or run the application with debug logging: diff --git a/packaging/aur/vocalinux/PKGBUILD b/packaging/aur/vocalinux/PKGBUILD index 943ca77..7c472be 100644 --- a/packaging/aur/vocalinux/PKGBUILD +++ b/packaging/aur/vocalinux/PKGBUILD @@ -3,8 +3,8 @@ pkgname=vocalinux # AUR pkgver cannot contain hyphens (v0.14.0-beta -> 0.14.0beta). -pkgver=0.14.2 -_tag=0.14.2 +pkgver=0.15.0 +_tag=0.15.0 pkgrel=1 pkgdesc="Free, offline voice dictation for Linux" arch=('any') diff --git a/packaging/flatpak/README.md b/packaging/flatpak/README.md index b64555a..2a7c373 100644 --- a/packaging/flatpak/README.md +++ b/packaging/flatpak/README.md @@ -78,7 +78,7 @@ pipx run flatpak-pip-generator \ sources: - type: git url: https://github.com/jatinkrmalik/vocalinux.git - tag: v0.14.2 + tag: v0.15.0 commit: ``` diff --git a/packaging/flatpak/com.vocalinux.Vocalinux.metainfo.xml b/packaging/flatpak/com.vocalinux.Vocalinux.metainfo.xml index 56178ff..4c0743b 100644 --- a/packaging/flatpak/com.vocalinux.Vocalinux.metainfo.xml +++ b/packaging/flatpak/com.vocalinux.Vocalinux.metainfo.xml @@ -105,6 +105,11 @@ + + +

Searchable sidebar settings with dictation controls in the sidebar footer, AppImage packages for x86_64 and aarch64, expanded speech-language catalog (including Hungarian), sentence capitalization and trailing spaces for continuous dictation, auto-pause and idle model unload, Vulkan discrete-GPU selection, ibus-wayland support on previously unbridged compositors, Bluetooth mic capture crash fix, custom-shortcut Record/Set restore, and desktop reliability fixes.

+
+

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.

diff --git a/pyproject.toml b/pyproject.toml index 87ce4dd..0d70573 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -20,7 +20,7 @@ keywords = [ "linux", "accessibility", "voice-typing", "speech-to-text" ] classifiers = [ - "Development Status :: 4 - Beta", + "Development Status :: 5 - Production/Stable", "Environment :: X11 Applications :: GTK", "Intended Audience :: End Users/Desktop", "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", diff --git a/src/vocalinux/version.py b/src/vocalinux/version.py index 796e761..3f6e1aa 100644 --- a/src/vocalinux/version.py +++ b/src/vocalinux/version.py @@ -2,8 +2,8 @@ Version information for Vocalinux. """ -__version__ = "0.14.2" -__version_info__ = (0, 14, 2) +__version__ = "0.15.0" +__version_info__ = (0, 15, 0) __author__ = "Jatin K Malik" __email__ = "jatinkrmalik@gmail.com" __license__ = "GPL-3.0" diff --git a/web/PRODUCT.md b/web/PRODUCT.md index ed6018b..c759c04 100644 --- a/web/PRODUCT.md +++ b/web/PRODUCT.md @@ -18,21 +18,27 @@ Offline-first Linux voice typing with real desktop integration (system tray, X11 ## Operating context -- Install via a one-line shell installer, then run from PATH or app menu -- System tray indicator and settings GUI (GTK) +- Install via a one-line shell installer, AppImage from GitHub Releases, AUR, or local Flatpak build; then run from PATH, app menu, or the AppImage binary +- System tray indicator and settings GUI (GTK) with searchable sidebar navigation and an always-visible sidebar footer for dictation status / Test Dictation / Close - Dictation into terminals, browsers, IDEs, office apps -- Engines and models chosen for hardware (CPU, optional Vulkan GPU) +- Engines and models chosen for hardware (CPU, optional Vulkan GPU with discrete-device preference) - Guides and comparison pages on vocalinux.com; source on GitHub ## Capabilities and constraints - Engines: whisper.cpp (default), OpenAI Whisper, VOSK, optional Remote API +- Speech languages: large selectable catalog (~33 + Auto-detect) shared by Settings/CLI; VOSK only lists languages with official Alphacephei models; remaining Whisper languages available via Auto-detect - Display servers: X11 and Wayland -- Shortcut modes: toggle and push-to-talk; left/right modifier distinction -- Optional voice commands; Silero neural VAD with amplitude fallback +- Shortcut modes: toggle and push-to-talk; left/right modifier distinction; configurable modifier+key combos +- Optional voice commands (English-only); Silero neural VAD with amplitude fallback +- Continuous dictation polish: capitalize after sentence punctuation; trailing space after each completed utterance +- Optional auto-pause while configured apps run; optional idle model keep-alive unload +- Vulkan discrete GPU auto-select with manual device override in Advanced settings +- Wayland: IBus when `ibus-wayland` is running, including on compositors previously treated as unbridged +- Packaging: install.sh, AppImage (x86_64/aarch64), AUR, Flatpak (local/Flathub status as documented) - No usage telemetry in the installed app - GPL-3.0; marketing version string is tracked in site package/version surfaces -- Website is Next.js marketing + SEO guides (static export) +- Website is Next.js marketing + SEO guides (static export); languages page documents per-engine support honestly ## Brand commitments diff --git a/web/package-lock.json b/web/package-lock.json index 905ad78..2c78766 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -1,12 +1,12 @@ { "name": "vocalinux-website", - "version": "0.14.2", + "version": "0.15.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "vocalinux-website", - "version": "0.14.2", + "version": "0.15.0", "dependencies": { "@types/node": "^20.14.10", "@types/react": "^18.3.3", diff --git a/web/package.json b/web/package.json index 29b07ab..d6a4dd2 100644 --- a/web/package.json +++ b/web/package.json @@ -1,6 +1,6 @@ { "name": "vocalinux-website", - "version": "0.14.2", + "version": "0.15.0", "private": true, "type": "module", "scripts": { diff --git a/web/src/app/advanced-settings/page.tsx b/web/src/app/advanced-settings/page.tsx index 9d8e7d9..a18f40b 100644 --- a/web/src/app/advanced-settings/page.tsx +++ b/web/src/app/advanced-settings/page.tsx @@ -108,7 +108,7 @@ export default function AdvancedSettingsPage() {

- v0.11.0 Advanced Tab + Advanced settings

Advanced Whisper.cpp Settings for Linux Dictation @@ -116,7 +116,8 @@ export default function AdvancedSettingsPage() {

Vocalinux keeps the default setup simple, but power users can unlock advanced whisper.cpp decoding controls for anti-hallucination tuning, - initial prompts, and Remote API server configuration. + initial prompts, Remote API server configuration, Vulkan GPU device + selection, and optional model keep-alive unload.

diff --git a/web/src/app/changelog/page.tsx b/web/src/app/changelog/page.tsx index e234f2c..631d1c3 100644 --- a/web/src/app/changelog/page.tsx +++ b/web/src/app/changelog/page.tsx @@ -14,6 +14,27 @@ import { SeoSubpageShell } from "@/components/seo-subpage-shell"; import { absoluteUrl, buildPageMetadata } from "@/lib/seo"; const releases = [ + { + version: "v0.15.0", + date: "2026-07-28", + type: "stable", + highlights: [ + "Searchable sidebar settings with live search replace the seven-tab notebook (PR #601)", + "AppImage packages for x86_64 and aarch64 on GitHub Releases (PR #573, #602)", + "Expanded speech-language catalog (~33 languages + Auto-detect), including Hungarian; VOSK only lists languages with official models (PR #616, fixes #565)", + "Settings: dictation status / mic level / Test Dictation / Close live in the sidebar footer (PR #618)", + "Settings: Custom Shortcut Record/Set controls show again (PR #619)", + "Languages: English (India) maps to Whisper code en for whisper.cpp / Whisper / remote API (PR #617)", + "Auto-capitalize after sentence punctuation; trailing space so the next utterance does not glue on (PR #554, #608)", + "Auto-pause competing apps and idle model keep-alive unload for battery/GPU headroom (PR #592, closes #445, #591)", + "Vulkan: auto-select discrete GPU and pick a device in Advanced settings (PR #590, closes #589)", + "Wayland: use IBus on previously unbridged compositors when ibus-wayland is running (PR #614, closes #607)", + "IBus: keep engine teardown correct when parent destroy fails (PR #613, fixes #606)", + "CLI: vocalinux --version (PR #563, closes #555)", + "Settings info notices flattened; Bluetooth mic heap-corruption fix; KDE unbridged-IBus skip when ibus-wayland is absent; xdotool focus preserve; installer/AUR fixes (PR #615, #599, #577, #564, #583, #569, #597, #579, #586)", + "Marketing site redesign; languages page per-engine badges; robots.txt indexing fix (PR #582, #616, #610)", + ], + }, { version: "v0.14.2", date: "2026-07-17", diff --git a/web/src/app/desktop-reliability/page.tsx b/web/src/app/desktop-reliability/page.tsx index 57329e4..a2c132f 100644 --- a/web/src/app/desktop-reliability/page.tsx +++ b/web/src/app/desktop-reliability/page.tsx @@ -48,12 +48,17 @@ const reliabilityFeatures = [ { title: "Tray and settings polish", description: - "Bundled resources, lower dialog height, and an explicit close button improve behavior across desktop environments.", + "Bundled resources, searchable sidebar settings, and an explicit close button improve behavior across desktop environments.", icon: Wrench, }, ]; const releaseMap = [ + { + version: "v0.15.0", + highlights: + "Searchable settings with sidebar dictation footer, ibus-wayland on previously unbridged compositors, safer IBus teardown, Bluetooth mic capture crash fix, custom-shortcut Record/Set restore, and xdotool focus preserve.", + }, { version: "v0.12.0-beta", highlights: diff --git a/web/src/app/faq/page.tsx b/web/src/app/faq/page.tsx index 15c597d..f9264eb 100644 --- a/web/src/app/faq/page.tsx +++ b/web/src/app/faq/page.tsx @@ -22,7 +22,7 @@ const faqCategories = [ questions: [ { q: "How do I install Vocalinux?", - a: "Run the one-liner installer: curl -fsSL https://raw.githubusercontent.com/jatinkrmalik/vocalinux/main/install.sh | bash. The installer handles all dependencies and configuration automatically.", + a: "Run the one-liner installer: curl -fsSL https://raw.githubusercontent.com/jatinkrmalik/vocalinux/main/install.sh | bash. The installer handles dependencies and configuration. You can also download an AppImage from GitHub Releases if you prefer a no-root portable binary (host xdotool/wtype/ydotool still required for text injection).", }, { q: "Which Linux distributions are supported?", @@ -114,7 +114,7 @@ const faqCategories = [ }, { q: "Can I use GPU acceleration?", - a: "Yes! whisper.cpp supports GPU acceleration via Vulkan, which works with AMD, Intel, and NVIDIA GPUs. The installer auto-detects your hardware.", + a: "Yes. whisper.cpp supports GPU acceleration via Vulkan on AMD, Intel, and NVIDIA. On multi-GPU machines Vocalinux prefers a discrete device when possible; you can pick a device under Advanced settings.", }, { q: "What model size should I use?", diff --git a/web/src/app/gpu-acceleration/page.tsx b/web/src/app/gpu-acceleration/page.tsx index e261d46..be79e2a 100644 --- a/web/src/app/gpu-acceleration/page.tsx +++ b/web/src/app/gpu-acceleration/page.tsx @@ -201,6 +201,9 @@ export default function GpuAccelerationPage() {

If you see your GPU name, you're ready for accelerated dictation! + On multi-GPU machines Vocalinux prefers a discrete Vulkan device when + one is present; pick a specific device under Advanced settings if you + need to override auto-select.

diff --git a/web/src/app/install/page.tsx b/web/src/app/install/page.tsx index 2240fa0..318def2 100644 --- a/web/src/app/install/page.tsx +++ b/web/src/app/install/page.tsx @@ -65,6 +65,17 @@ export default function InstallGuidesPage() { {installCommand} +

+ Prefer no installer? Download an{" "} + + AppImage + {" "} + for x86_64 or aarch64 from GitHub Releases (host text-injection tools + still required). +

diff --git a/web/src/app/page.tsx b/web/src/app/page.tsx index efd2b73..8e1fe45 100644 --- a/web/src/app/page.tsx +++ b/web/src/app/page.tsx @@ -48,7 +48,7 @@ const homeJsonLd = [ }, description: "Offline voice dictation and speech-to-text for Linux with whisper.cpp and VOSK.", - softwareVersion: "0.14.2", + softwareVersion: "0.15.0", author: { "@type": "Person", name: "Jatin K Malik", @@ -65,6 +65,14 @@ const homeJsonLd = [ "Toggle and push-to-talk shortcut modes", "Left/right modifier key distinction for shortcuts", "Optional voice commands with VOSK-aware defaults", + "Searchable sidebar settings", + "AppImage packages for x86_64 and aarch64", + "Expanded speech-language catalog including Hungarian (per-engine availability)", + "Auto-capitalize sentences after punctuation", + "Trailing space after completed transcriptions for continuous dictation", + "Auto-pause competing apps and idle model keep-alive unload", + "Vulkan discrete GPU auto-select with manual device selection", + "IBus via ibus-wayland on compositors that previously skipped IBus", "Adaptive audio and IBus-aware text injection", "Clipboard fallback for unsupported Wayland compositors", "Sound effects toggle for audio feedback", @@ -111,7 +119,7 @@ const homeJsonLd = [ name: "How do I switch between speech engines?", acceptedAnswer: { "@type": "Answer", - text: "Use the settings GUI or CLI flags for whisper.cpp, Whisper, VOSK, or Remote API. Remote API settings live under Advanced settings.", + text: "Use the settings GUI or CLI flags for whisper.cpp, Whisper, VOSK, or Remote API. Open Settings from the tray and use the sidebar (search works). Remote API options live under Advanced.", }, }, { @@ -562,6 +570,12 @@ export default function HomePage() { Then launch:{" "} vocalinux + + AppImage downloads +

- v0.14.0 Beta UI + Settings gallery (refresh pending)

Vocalinux Screenshots

A look at offline voice dictation on Linux: tray controls, debugging - tools, and the full settings dialog. Click any image to expand it and - browse the gallery. These shots match the current v0.14.0-beta UI. + tools, and the settings dialog. Click any image to expand it and browse + the gallery. Product shots are current; some settings images still show + the older tabbed layout while the app uses a searchable sidebar in + v0.15.0+.