NVDA version compatibility
Declared range
buildVars.py declares addon_minimumNVDAVersion = "2026.1" and
addon_lastTestedNVDAVersion = "2026.1". tests/test_buildvars.py keeps
the two in sync and well-formed:
-
Both must be strings with at least a
major.minorcomponent, each part an integer. -
lastTestedNVDAVersionmust be greater than or equal tominimumNVDAVersion.
The floor comes from a real runtime dependency, not an aspirational
target: the bundled dengjen-tts-grpc.exe binary needs NVDA’s Python
3.13 64-bit runtime, a requirement in place since v3.2-beta.1. See
Requirements and Container for
how that subprocess is launched.
Why the floor moved
The v4.0.1 changelog documents a correction, not a new restriction: the
add-on previously declared support for NVDA 2025.1+, but any NVDA older
than the Python 3.13 switch failed to load the driver with an
ImportError. minimumNVDAVersion was corrected to 2026.1 to match
the runtime the bundled engine actually requires, rather than leaving
users on older NVDA releases to hit that failure at load time.
Bumping the floor
Change addon_minimumNVDAVersion and/or addon_lastTestedNVDAVersion in
buildVars.py — CLAUDE.md’s guardrails call for configuring through
`buildVars.py before modifying sconstruct directly. Bump
lastTestedNVDAVersion whenever a new NVDA release has been verified,
even when the minimum doesn’t move; test_buildvars.py fails the build
if lastTested ever drops below minimum.
The Microsoft Visual C++ 2015-2022 Redistributable requirement (Requirements) is a separate, OS-level dependency of the bundled MSVC-built speech engine — it isn’t gated by NVDA’s own version and applies regardless of which NVDA release is running.
Verifying against a specific NVDA release
pytest tests_e2e/ drives a full, real NVDA install end to end via
nvda-addon-testkit — installing the built add-on, working through its no-voice modal,
downloading a real voice, and speaking with it. It’s CI-only: it needs
the e2e job’s provisioned NVDA and requirements-test-e2e.txt, and
isn’t meant to be reproduced on a personal machine.
Troubleshooting covers the symptoms of an incompatible NVDA/runtime pairing — the driver missing from NVDA’s synthesizer list, or failing to load.
Want to help? Learn how to contribute to the ZirekHQ docs ›