What are NVDA Add-ons?
Add-ons allow you to customize and extend NVDA’s functionality. They can:- Add support for specific applications (App Modules)
- Implement new global commands (Global Plugins)
- Customize behavior of controls (NVDA Objects)
- Add speech synthesizers and braille display drivers
- Provide new functionality across the entire operating system
Add-ons are Python modules packaged with a manifest file and distributed as
.nvda-addon files.Types of Add-on Components
App Modules
App modules provide application-specific support. They:- Are loaded when a specific application is running
- Are named after the executable (e.g.,
notepad.pyfor notepad.exe) - Can handle events and define scripts specific to that application
- Are automatically loaded and unloaded as the application starts and closes
Global Plugins
Global plugins provide functionality across all applications. They:- Are loaded when NVDA starts
- Can respond to events from any application
- Can implement global commands accessible anywhere
- Remain active until NVDA exits
Custom NVDA Objects
NVDA Objects represent individual controls and widgets. You can create custom NVDA Object classes to:- Provide better accessibility for specific controls
- Customize how information is presented to users
- Add functionality to existing controls
- Implement text support for controls that don’t natively support it
Add-on Structure
Development Workflow
Set up the scratchpad directory
Enable the scratchpad directory in NVDA Settings > Advanced. This allows you to test code without creating full add-on packages.The scratchpad is located at:
%APPDATA%\nvda\scratchpad\Create your code
Place your Python files in the appropriate subdirectories:
scratchpad/appModules/for app modulesscratchpad/globalPlugins/for global plugins
Reload plugins
Use NVDA+Control+F3 or select Tools > Reload plugins to test your changes without restarting NVDA.
API Stability
The NVDA Add-on API consists of all NVDA Python objects, classes, and functions, excluding:- Symbols prefixed with underscore (
_) - these are private - Transitive imports
- Pip packages (may be updated at any time)
API Release Cycle
- Annual API-breaking release (e.g., 2026.1): Signature-breaking changes are permitted
- Standard releases (e.g., 2026.2, 2026.3): Existing API signatures are preserved, new features may be added
- Bug fixes and behavioral refinements: Permitted in any release
- Security improvements: Take precedence over backward compatibility
Key Resources
- NVDA Add-on Store
- NVDA Add-on API Mailing List
- Add-on Template Repository
- Submission Guide
- Community Add-ons
Python Requirements
NVDA add-ons are written in Python. You should be familiar with:- Python syntax and basic concepts
- Object-oriented programming
- Python modules and packages
- Event-driven programming
NVDA uses a specific version of Python. Check the Developer Guide for the current version.
Next Steps
Create an App Module
Add application-specific functionality
Build a Global Plugin
Implement system-wide features
API Reference
Browse the complete API documentation
Distribution Guide
Package and distribute your add-on
