Skip to main content

Add-on Package Structure

An NVDA add-on is distributed as a .nvda-addon file, which is a ZIP archive containing:

Manifest File

The manifest.ini file contains required metadata:

Manifest Fields

str
required
Unique identifier (lowerCamelCase recommended). Used as the add-on ID.
str
required
Short label shown to users (one line).
str
Longer description with more details.
str
required
Author name and optionally email.
str
required
Version number (semantic versioning recommended: major.minor.patch).
str
required
Minimum NVDA version required (e.g., 2023.1.0).
str
required
Last NVDA version tested with this add-on (e.g., 2024.1.0). Must be >= minimumNVDAVersion.
str
Homepage or documentation URL (should begin with https://).
str
Default documentation filename in doc/ directory.
str
Version history and changes.

Version Compatibility

API Version Requirements:
  • Set minimumNVDAVersion to the oldest NVDA version you support
  • Set lastTestedNVDAVersion to the latest version you’ve tested
  • Test your add-on with both the minimum and latest versions
  • Update lastTestedNVDAVersion when testing with new NVDA releases
Checking Versions

Install Tasks

Optional installTasks.py module for installation/uninstallation logic:
Install tasks have access to the add-on’s translations via addon.getTranslationsInstance().

Translations

Support multiple languages:
1

Create POT file

Extract translatable strings to a template:
2

Create PO files

Create language-specific files:
3

Translate strings

Edit .po files with translations.
4

Compile to MO

5

Translate manifest (optional)

Create locale/es/manifest.ini with translated summary, description, and changelog.

Using Translations in Code

translations.py

Documentation

Provide user documentation:

Creating the Package

Manual Packaging

1

Prepare directory

Create directory with all required files in proper structure.
2

Create ZIP archive

Or use Python:
3

Rename to .nvda-addon

Ensure file extension is .nvda-addon.

Using Add-on Template

The NVDA Add-on Template provides automated packaging:

Testing Before Distribution

1

Test installation

Install the packaged add-on and verify it loads correctly.
2

Test in multiple NVDA versions

Test with your minimum and maximum supported versions.
3

Test uninstallation

Ensure clean uninstall with no leftover files or settings.
4

Test upgrades

Install old version, then upgrade to new version.
5

Test translations

Switch NVDA language and verify translations work.
6

Review logs

Check NVDA log for errors or warnings.

Submitting to Add-on Store

The official NVDA Add-on Store is the recommended distribution method:
1

Review submission requirements

2

Create GitHub repository

Host your add-on source on GitHub with proper documentation.
3

Submit via pull request

4

Respond to review

Address any feedback from reviewers.
5

Updates

Submit new versions via pull request with updated manifest.

Store Requirements

Submission Requirements:
  • Source code must be publicly available
  • Add-on must pass automated tests
  • Must follow NVDA coding standards
  • Documentation must be included
  • License must be compatible (GPL preferred)

Alternative Distribution

Besides the Add-on Store, you can distribute via:

Direct Download

  • Host .nvda-addon file on your website
  • Users download and install manually
  • Include clear installation instructions

GitHub Releases

Community Add-ons

Version Updates

When releasing updates:
1

Update version number

Increment version in manifest.ini:
  • Major (1.0.0 → 2.0.0): Breaking changes
  • Minor (1.0.0 → 1.1.0): New features
  • Patch (1.0.0 → 1.0.1): Bug fixes
2

Update lastTestedNVDAVersion

Test with latest NVDA and update if compatible.
3

Update changelog

Document all changes in manifest.ini or separate changelog.
4

Test thoroughly

Test installation, upgrade, and all functionality.
5

Tag release

Create git tag matching version number.

Best Practices

Development:
  • Use semantic versioning
  • Keep comprehensive changelog
  • Test with multiple NVDA versions
  • Provide clear documentation
  • Respond to user issues promptly
  • Follow NVDA coding standards
Security:
  • Don’t include sensitive data in add-on
  • Validate all user input
  • Use HTTPS for all URLs
  • Don’t execute arbitrary code
  • Be careful with file system operations

Continuous Integration

Automate testing with GitHub Actions:
.github/workflows/build.yml

Licensing

Choose an appropriate license:
  • GPL v2 or later (recommended, same as NVDA)
  • MIT License
  • Apache License 2.0
Include COPYING.txt or LICENSE.txt in your add-on.

Resources