Skip to main content

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.py for notepad.exe)
  • Can handle events and define scripts specific to that application
  • Are automatically loaded and unloaded as the application starts and closes
Learn more about App Modules →

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
Learn more about Global Plugins →

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
Learn more about Custom NVDA Objects →

Add-on Structure

myAddon/
├── manifest.ini
├── appModules/
│   └── myapp.py
├── globalPlugins/
│   └── myplugin.py
├── locale/
│   ├── en/
│   └── es/
└── doc/
    └── en/
        └── readme.md

Development Workflow

1

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\
2

Create your code

Place your Python files in the appropriate subdirectories:
  • scratchpad/appModules/ for app modules
  • scratchpad/globalPlugins/ for global plugins
3

Reload plugins

Use NVDA+Control+F3 or select Tools > Reload plugins to test your changes without restarting NVDA.
4

Package as an add-on

Once your code is working, create a proper add-on package with a manifest file for distribution.

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)
Breaking changes only occur in annual .1 releases (e.g., 2026.1). Standard releases (2026.2, 2026.3) preserve API signatures but may add new features.

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

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

Build docs developers (and LLMs) love