toggleX 1.0 - NVDA 2026.1 compatible
First release under new maintainership, and the first release compatible with NVDA 2026.1.
toggleX was originally written by Tyler Spivey (tspivey@pcdesk.net) and Erion, whose last release was version 0.20121226.01. Josh Kennedy (joshknnd1982@gmail.com) has taken over the add-on and brought it up to date. The original code is preserved unmodified as the first commit in this repository.
Install
Download toggleX-1.0.nvda-addon below and open it, or install it from NVDA's Add-on Store via Install from external source.
Requires NVDA 2026.1 or later. Earlier versions of NVDA need toggleX 0.x.
Fixed for NVDA 2026.1
- The add-on loads again. NVDA 2026.1 is an API-compatibility-breaking release and rejects add-ons whose
lastTestedNVDAVersionis below 2026.1. The manifest now declares 2026.1. - Line indentation (
i) no longer corrupts the setting.reportLineIndentationis a four-state integer in current NVDA (off, speech, tones, both), not a boolean, and toggleX was writing a boolean over it. It now writes valid values and remembers the mode you had chosen, restoring and announcing it when you switch back on. - Table headers (
o) no longer corrupts the setting. Same problem and same fix —reportTableHeadersis a four-state integer (off, rows and columns, rows, columns). - Removed
updateChannelfrom the manifest, which is not a field NVDA recognises. - The stand-in used by the "all text processing" toggle (
z) now matches the signature of NVDA's currentspeech.speech.processText, including itsnormalizeargument.
Changed
- Saved synthesizer slots have moved to JSON, in
toggleX.jsonin your NVDA user configuration directory. Existing slots are imported automatically the first time 1.0 runs; the oldswitch_synth.pickleis left in place and never read again. - Loading a slot applies the voice before rate, pitch and volume. Changing a voice makes NVDA reload that voice's own settings, so the previous order silently discarded a saved rate whenever the slot also changed voice.
- Loading a slot announces the synthesizer's display name ("Windows OneCore voices") rather than its internal module name ("oneCore"), and reports a failure instead of raising if the saved synthesizer can no longer be loaded.
- Saving a slot now confirms which slot was written.
- Unsupported synthesizer settings are detected with NVDA's
isSupportedAPI rather than by catchingNotImplementedError. - Messages are wrapped for translation, and
NVDA+0now appears in NVDA's Input Gestures dialog under a toggleX category with a description. - Both commands speak in NVDA's on-demand speech mode.
- The plugin module was renamed from
globalPlugins/toggle.pytoglobalPlugins/toggleX.py, since all add-ons share theglobalPluginsnamespace andtogglewas collision-prone. - toggleX no longer leaves NVDA's
processTextpatched if the add-on is unloaded while theztoggle is active.
Full notes: CHANGELOG.md