What's new in Vlocal: dated releases and fixes
Every Vlocal release is listed here, with its publication date and what it actually changes. Fixes are written in plain words, root cause included, with no "various improvements".
Dates are publication dates on the update channel. Earlier internal versions, numbered 3.x in June 2026, are not listed.
1.3.4, 11 September 2026
- Updates announce themselves. When a newer version is published, a dot appears on the Updates entry of the sidebar, a banner shows at the top of the window, and the menu bar icon gains an "Update x.y.z available" entry at the top of its menu, which opens the Updates tab. Vlocal checks once at launch, then every six hours, with a simple GET that carries no personal data. Before, only a visit to the Updates tab revealed a new version, and nobody went there.
- Light mode. Settings, Appearance: a moon and a sun. The dashboard and the dictation pill switch together. Layout, spacing and typography do not change, only the palette does, checked for contrast. Dark stays the default.
- Release emails: a template and
tools/release_mail.pyrender the announcement of each version from a short JSON spec. Sending stays a manual step, after the maintainer approves the text and the recipients.
1.3.3, 11 September 2026
- Hands-free dictation by double tap. Asked for by a user who knew it from Wispr Flow. In Settings, "Trigger" now offers "Hold, or double-tap to keep the mic open": two quick taps lock the mic open, the next tap ends the dictation, and holding still works as before. The pill says the mic is open and which key ends it. The tap logic sits above the key decoder, so it applies to every shortcut, present and future: Ctrl + Cmd, Fn, right Cmd, right Option, Ctrl + Space. A lone short tap is cancelled and the expected gesture is shown.
- Changing the shortcut or the trigger in Settings now takes effect immediately. The toast said "Shortcut updated" but nothing changed until the next launch. The old monitors are now removed and the new ones armed on the spot, verified by the lifecycle gate.
- The single-instance lock has two layers, the support folder and the user's private temporary directory, independent of HOME, and only "already locked" means another instance runs: a network home without
flockno longer keeps Vlocal from opening.
1.3.2, 11 September 2026
- The global shortcut and quitting work again. Since 1.2.0, setting up the shortcut raised an error on every launch: a module was used a few lines before it was imported in the same function, which Python treats as a local variable that does not exist yet. That call is the first step of startup, so everything after it was skipped too: the global shortcut, the menu bar icon, the freeze watchdog and the application delegate. Without that delegate, closing the window hid it for good, clicking Vlocal in the Dock did nothing, and Quit was silently refused, leaving Force Quit as the only way out. The window and the Dictate button kept working, which is why nothing flagged it. 1.1.x was not affected.
- Reopening and quitting no longer depend on startup completing: the behaviour is built into the application delegate before the window exists.
- Startup stages are isolated: a failing step no longer takes the others down, and it is reported as an incident code (
hotkey_start_fail,startup_stage_fail), as is a finished onboarding without Accessibility (hotkey_untrusted). - Restarting after granting Accessibility waits for the previous process to actually exit, instead of a fixed two seconds.
- Three new build gates: static analysis for undefined names and names used before assignment, the full unit test suite, and a smoke test that launches the real app, then closes, reopens and quits it. They found two older bugs of the same kind: the meeting-stop message for a full disk could not be displayed, now fixed, and a cap on the number of speakers by speech duration, announced in 1.0.26, had never run, with behaviour left unchanged until it is validated on real audio.
- 1.3.1 is skipped: a build reporting that number already exists outside this repository, and it must receive this update too.
1.3.0, 9 September 2026
- The restart macOS requires is now announced. Accessibility is never granted to a process that is already running: ticking the box changed nothing until Vlocal restarted, and the onboarding said so in one grey line. It is now a numbered box, the restart is the highlighted action, and the app comes back to that exact step instead of starting the setup over.
- Usage is measured precisely enough to be read. Speech duration per day, the Mac model, the interface language, the chosen shortcut and the engine actually in use, GPU or CPU, are added to the declared telemetry, along with a daily count of technical incidents per code, counters only and never the detail of an incident. Everything is listed in both READMEs, on the privacy page, and locked by a test.
- A day of use is no longer lost. The app used to send the last three days; a Mac left off for a week lost the days in between. It now sends the last thirty, which the server accepts and applies idempotently.
- Admin console rebuilt: interactive charts, every figure carries its own definition and period, one detailed record per person, hardware breakdown, retention and incidents.
1.2.0, 9 September 2026
- Dashboard numbers are now exact. They were recomputed from the history entries on screen: capped at 400, and empty when history is off. On a real database the app showed 50 minutes saved for a month where the counters held 4 h 05. They now read the per-day counters, which also take over the history already in the database on upgrade, and count meetings.
- Three shortcuts that never worked. Settings offered "Fn", "Right Cmd" and "Right Option"; the backend did not know them and silently fell back to Ctrl + Cmd. Each is now a real shortcut, identified by its own key code so a cursor key or the left modifier cannot trigger a dictation. The Fn key needs "Press Fn key to: Do Nothing" in System Settings, which the app now says.
- Optional contact email at install time and in Settings, validated on both sides, added to the declared telemetry along with the timestamp of the last dictation and meeting counters.
1.1.2, 8 September 2026
Security review before the public announcement.
- In-app updater: the downloaded update must be signed by this project's Apple team, with the team identifier pinned, in addition to the Developer ID and notarization checks. A notarized app from another developer is refused.
- Backend: public roles hold no table privilege at all; the telemetry function is the only surface open to the app's public key, with at most 300 new installs per hour, sanitized names and capped values; the feedback endpoint is rate-limited; paid-era functions answer 410; the admin console is served with a Content-Security-Policy.
1.1.1, 7 September 2026
Telemetry transport fixed. 1.1.0 wrote its daily counters with a direct PostgREST upsert; under row-level security that upsert needs read access to the row, which would have exposed names to anyone holding the public key. The app now calls a single security definer function, and the tables are not readable or writable with that key at all. Nothing else changes.
1.1.0, 6 September 2026
Free and open source.
- The paywall, license keys and payment flow are removed. The first-launch screen asks for a first and last name instead, with a clear statement of what the app sends and a "continue without sharing" option.
- Declared telemetry: install identifier, names, versions, and per-day counters, meaning dictations, words and estimated time saved. Nothing else, and a test locks it.
- Speed regression fixed. One GPU inference exceeding a fixed 22 s timeout switched the whole session to the CPU engine. Measured: 1.0 s per dictation on GPU, 8.0 s on CPU, 1.5 GB more memory. The timeout is now proportional to the audio, the switch is a 10-minute suspension, and only three freezes in an hour disable the GPU for the session.
- Live-tail fixed: the search for a silence to cut a window was limited to 16 s after the target and never widened, so a long sentence stalled it for the rest of the dictation. It now searches all available audio, incrementally.
- Finalization watchdog proportional to the dictation length, instead of a fixed 25 s.
- Meetings: automatic speaker count by spectral gap, the eigengap of the voice similarity graph, with the silhouette as fallback and guard. On a real 69-minute meeting with four speakers the silhouette hesitated between 2 and 4, 0.296 versus 0.289, and chose 2; the spectral estimate finds 4, keeps 2 on five two-speaker meetings and 1 on single-voice subsets. Region-level speaker accuracy on the annotated windows: 81.6 % to 94.0 %, the same as forcing 4.
- Dictation overlay: the pointer now sits on the menu bar edge on every screen. The previous offset assumed a 37 px menu bar and pushed the tip 4 px under the bar on 14-inch notch Macs, which are 33 px, and entirely under it on 13-inch Macs.
- Obsidian: a "Vlocal, ma voix" vault can be created from Settings. Dictations go to a daily note, each meeting gets a note with speakers, reminders are listed, and a CLAUDE.md at the root describes the structure for an assistant.
- Admin console: token stored as a SHA-256 hash, per-IP and global lockouts.
- Meeting import: GPU timeout proportional to the block length, instead of a fixed 60 s.
- Code: live-tail extracted to its own module, backend coordinates centralized, Nuitka compilation removed from the build, usage counters table added in SQLite.
1.0.26, 16 August 2026
Meetings: a short recording with a single speaker was split into several speakers. Centroid merging thresholds now adapt to the duration of speech, and the detected speaker count is capped by the available speech, about 15 s per speaker.
1.0.25, 15 August 2026
- Meeting re-analysis: speaker boundaries snapped on all three attribution paths, the fallback path was missing it; a visible warning when the diarization falls back to the tile path; a progress bar.
- Helper processes are launched from
Contents/Helpers, so they no longer show a Dock icon.
1.0.24, 15 August 2026
Speaker boundary snapping wired into the production attribution path; 1.0.23 had it on the fallback path only. Measured word-level speaker accuracy on the annotated bench: 92.3 % to 96.9 %.
1.0.23, 14 August 2026
Meetings: word-to-speaker attribution snapped to the nearest speech boundary, up to two words; known-voice matching ignores placeholder names; the match threshold is raised to 0.75.
1.0.22, 13 August 2026
Dictation microphone capture moves to a disposable subprocess that is killed and respawned in about one second if it hangs. Dictations are chained, a new one can start while the previous one is being transcribed, with FIFO insertion order. No user is blocked more than two seconds by the microphone.
1.0.21, 23 July 2026
Stability release: microphone auto-heal, finalization heartbeat, GPU freeze telemetry.
1.0.13 to 1.0.17, 24 to 26 June 2026
Obsidian connector, the "new line" voice command, in-app diagnostic report.
1.0.1 to 1.0.12, 17 to 21 June 2026
Launch series: in-app updater with signature verification, notarization, hardened runtime entitlements, reminders as native notifications, window drag fix, welcome and permission flows.
How to get these updates
Open Vlocal, go to the Updates tab and click. The app downloads the new version, verifies the Apple signature, the notarization and the author's team identifier, replaces the application and restarts. You can also download the latest version from the home page. The line-by-line detail is readable in the public repository, and the open source page explains how the project is built.