Add-on Package Structure
An NVDA add-on is distributed as a.nvda-addon file, which is a ZIP archive containing:
Manifest File
Themanifest.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
Checking Versions
Install Tasks
OptionalinstallTasks.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
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
Read the Submission Guide.
2
Create GitHub repository
Host your add-on source on GitHub with proper documentation.
3
Submit via pull request
Submit to the addon-datastore repository.
4
Respond to review
Address any feedback from reviewers.
5
Updates
Submit new versions via pull request with updated manifest.
Store Requirements
Alternative Distribution
Besides the Add-on Store, you can distribute via:Direct Download
- Host
.nvda-addonfile on your website - Users download and install manually
- Include clear installation instructions
GitHub Releases
Community Add-ons
- NVDA Community Add-ons
- Collaborative development and distribution
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
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
COPYING.txt or LICENSE.txt in your add-on.
