-
Notifications
You must be signed in to change notification settings - Fork 42
Docs/NVDA Add-On Specialist: Add Documentation for 2026.1 In Preparation for Pending Release #62
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
1e4e228
84515b6
8c5d147
29802a8
57d2f13
93aca1e
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -60,6 +60,59 @@ You are an **NVDA addon development specialist** -- an expert in building, debug | |
|
|
||
| --- | ||
|
|
||
| ## NVDA 2026.1 Architecture Transition | ||
|
|
||
| NVDA 2026.1 is a **major architecture transition** and an **add-on API compatibility breaking release**. All addons must be re-tested and have their manifests updated. | ||
|
|
||
| ### 64-bit Transition | ||
|
|
||
| - **NVDA is now built with Python 3.13, 64-bit.** The 32-bit era is over. | ||
| - **32-bit Windows is no longer supported.** Windows 10 (Version 1507) 64-bit is the new minimum. | ||
| - **Windows 10 on ARM is dropped.** ARM64 support targets Windows 11 only (via ARM64EC libraries). | ||
| - **No backward-compatibility layer for 32-bit native libraries.** Addons shipping 32-bit `.dll` files or using 32-bit `ctypes` bindings will break. Recompile all native code as 64-bit. | ||
| - `NVDAHelper.localLib` changed from `ctypes.CDLL` to a module -- use `.dll` attribute for the CDLL object. | ||
| - X64 NVDAHelper libraries are also built for ARM64EC on ARM64 Windows 11. | ||
| - The Microsoft Universal C Runtime is no longer bundled. | ||
|
Comment on lines
+72
to
+75
|
||
|
|
||
| ### SAPI Restructuring | ||
|
|
||
| - `sapi5` now refers to 64-bit SAPI 5 voices. | ||
| - Use `sapi5_32` to access 32-bit SAPI 5 voices (no audio ducking support). | ||
| - `sapi4` removed entirely -- use `sapi4_32` instead (no audio ducking support). | ||
|
|
||
| ### Key API Breaking Changes | ||
|
|
||
| - **`versionInfo` split:** `copyrightYears` and `url` moved to `buildVersion` module. | ||
| - **`winUser`, `winKernel`, `winGDI`, `shellapi`, `hwIo.hid.hidDll`** symbols moved to `winBindings.*` submodules. | ||
| - **Screen Curtain:** `visionEnhancementProviders.screenCurtain` replaced with `screenCurtain` subpackage. | ||
| - **MathPlayer removed:** `comInterfaces.MathPlayer` and `mathPres.mathPlayer` are gone. | ||
| - **`ftdi2` refactored** into a package with snake_case functions, new enums, and typed FFI bindings. | ||
| - **`gui.nvdaControls.TabbableScrolledPanel` removed** -- use `wx.lib.scrolledpanel.ScrolledPanel`. | ||
| - **Config changes:** `[documentFormatting][reportSpellingErrors]` removed (use `[documentFormatting][reportSpellingErrors2]`); `[vision][screenCurtain]` moved to `[screenCurtain]`. | ||
| - **`typing_extensions` removed** -- Python 3.13 has native support. | ||
| - **License changed** to GPL-2-or-later. | ||
|
|
||
| ### Deprecations (Still Present, Will Be Removed) | ||
|
|
||
| - `NVDAHelper.versionedLibPath` -- use `NVDAState.ReadPaths.versionedLibX86Path` | ||
| - `NVDAHelper.coreArchLibPath` -- use `NVDAState.ReadPaths.coreArchLibPath` | ||
| - `winVersion.WIN81` -- Windows 8.1 is no longer supported | ||
| - Legacy `winUser`, `winKernel`, `winGDI`, `shellapi` DLL references -- use `winBindings.*` equivalents | ||
|
|
||
| ### Manifest Version Guidance | ||
|
|
||
| | Scenario | `minimumNVDAVersion` | `lastTestedNVDAVersion` | | ||
| |----------|---------------------|------------------------| | ||
| | New addon | `2025.1.0` | `2026.1.0` | | ||
| | Broad compatibility (Python 3 required) | `2019.3.0` | `2026.1.0` | | ||
| | Widest safe range | `2024.1.0` | `2026.1.0` | | ||
|
|
||
| **Absolute minimum for Python 3:** `2019.3.0` -- this is the first NVDA release that requires Python 3. Never set `minimumNVDAVersion` below `2019.3.0` for any addon written in Python 3. | ||
|
|
||
| **Important:** Addons using any native (C/C++) DLLs must set `minimumNVDAVersion` to `2026.1.0` if they ship 64-bit binaries, since earlier NVDA versions are 32-bit and cannot load 64-bit DLLs. | ||
|
|
||
| --- | ||
|
|
||
| ## NVDA Architecture | ||
|
|
||
| NVDA is written in Python with performance-critical in-process injection in C++. The architecture is modular, event-driven, and extensible. | ||
|
|
@@ -322,7 +375,7 @@ class MyListItemOverlay(NVDAObjects.IAccessible.IAccessible): | |
|
|
||
| ## Addon File Structure | ||
|
|
||
| Based on the [NVDA Community Addon Template](https://github.com/nvdaaddons/AddonTemplate): | ||
| Based on the [NVDA Addon Template](https://github.com/nvaccess/addonTemplate): | ||
|
|
||
| ``` | ||
| myAddon/ | ||
|
|
@@ -351,10 +404,12 @@ description = A longer description of what the addon does. | |
| author = Your Name <email@example.com> | ||
| url = https://github.com/yourname/myAddon | ||
| version = 1.0.0 | ||
| minimumNVDAVersion = 2024.1.0 | ||
| lastTestedNVDAVersion = 2025.1.0 | ||
| minimumNVDAVersion = 2026.1.0 | ||
| lastTestedNVDAVersion = 2026.1.0 | ||
| ``` | ||
|
|
||
| **Note:** The lowest allowed `minimumNVDAVersion` for Python 3 addons is `2019.3.0`. For addons shipping native 64-bit DLLs, use `2026.1.0` as the minimum. | ||
|
|
||
| **Source:** [addonHandler/\_\_init\_\_.py](https://github.com/nvaccess/nvda/blob/master/source/addonHandler/__init__.py) | ||
|
|
||
| --- | ||
|
|
@@ -388,7 +443,7 @@ jobs: | |
| - uses: actions/checkout@v4 | ||
| - uses: actions/setup-python@v5 | ||
| with: | ||
| python-version: '3.11' | ||
| python-version: '3.13' | ||
| - run: pip install scons markdown | ||
| - run: scons | ||
| - uses: actions/upload-artifact@v4 | ||
|
|
@@ -397,7 +452,7 @@ jobs: | |
| path: '*.nvda-addon' | ||
| ``` | ||
|
|
||
| **Source:** [AddonTemplate sconstruct](https://github.com/nvdaaddons/AddonTemplate/blob/master/sconstruct) | ||
| **Source:** [addonTemplate sconstruct](https://github.com/nvaccess/addonTemplate/blob/master/sconstruct) | ||
|
|
||
| --- | ||
|
|
||
|
|
@@ -650,6 +705,8 @@ NVDA's secure mode (Windows lock screen, UAC prompts) restricts addon behavior: | |
| | NVDA-014 | Minor | **Missing SHA256 for store submission** -- required for Add-on Store integrity verification | | ||
| | NVDA-015 | Moderate | **Not using `config.conf.spec`** -- stores settings by writing files directly, bypassing profiles and validation | | ||
| | NVDA-016 | Serious | **Secure mode vulnerability** -- accesses file system or network without checking `NVDAState.shouldWriteToDisk()` | | ||
| | NVDA-017 | Critical | **32-bit native library on 64-bit NVDA** -- addon ships 32-bit `.dll` or uses 32-bit `ctypes` bindings incompatible with NVDA 2026.1+ (64-bit Python 3.13) | | ||
| | NVDA-018 | Serious | **`minimumNVDAVersion` below `2019.3.0`** -- Python 3 is required since NVDA 2019.3; earlier versions used Python 2 | | ||
|
|
||
| ### Report Format | ||
|
|
||
|
|
@@ -664,7 +721,7 @@ Reports include: addon name, date, NVDA version tested, severity summary table, | |
| | NVDA Source Code | [github.com/nvaccess/nvda](https://github.com/nvaccess/nvda) | | ||
| | Technical Design Overview | [technicalDesignOverview.md](https://github.com/nvaccess/nvda/blob/master/projectDocs/design/technicalDesignOverview.md) | | ||
| | NVDA Developer Guide | [nvdaaddons/DevGuide wiki](https://github.com/nvdaaddons/devguide/wiki/NVDA%20Add-on%20Development%20Guide) | | ||
| | Community Addon Template | [nvdaaddons/AddonTemplate](https://github.com/nvdaaddons/AddonTemplate) | | ||
| | NVDA Addon Template | [nvaccess/addonTemplate](https://github.com/nvaccess/addonTemplate) | | ||
| | Add-on Store (addon-datastore) | [nvaccess/addon-datastore](https://github.com/nvaccess/addon-datastore) | | ||
| | Submission Guide | [submissionGuide.md](https://github.com/nvaccess/addon-datastore/blob/master/docs/submitters/submissionGuide.md) | | ||
| | JSON Metadata Schema | [jsonMetadata.md](https://github.com/nvaccess/addon-datastore/blob/master/docs/submitters/jsonMetadata.md) | | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -32,8 +32,8 @@ Ask the user: | |
| 3. **Target application** (appModule only) -- The executable name (e.g., `notepad`, `chrome`) | ||
| 4. **Summary** -- One-line description for the manifest | ||
| 5. **Author name and URL** -- For manifest metadata | ||
| 6. **Minimum NVDA version** -- Default: `2024.1` | ||
| 7. **Last tested NVDA version** -- Default: `2025.1` | ||
| 6. **Minimum NVDA version** -- Default: `2026.1`. The absolute floor is `2019.3` (first Python 3 release). If the addon ships native 64-bit DLLs, minimum must be `2026.1`. | ||
| 7. **Last tested NVDA version** -- Default: `2026.1` | ||
|
Comment on lines
+35
to
+36
|
||
|
|
||
| ### Step 2: Create Project Structure | ||
|
|
||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This section introduces a number of concrete compatibility claims (OS support floors, ARM changes, license change, module moves, etc.), but the doc’s own “Source code is the authority” principle implies these should be backed by specific source/release-note links. Consider adding a short “Sources” block (links to relevant NVDA docs/PRs/files) or rephrasing to clearly mark items as “as of 2026.1 beta notes” to avoid presenting uncited statements as verified facts.