Please read and abide by the Citizen and Contributor Code of Conduct while participating in this project.
Before You Start
The NVDA project is guided by a product vision statement and set of principles. Always consider the vision and principles when planning features and prioritizing work.Finding Issues to Work On
If you’re new to the project or looking for ways to help, check out:Guidelines
Discuss Before You Code
- Unrelated changes should be addressed in separate issues
- Include information about:
- Use cases
- Design considerations
- User experience implications
- Wait for acceptance of your proposal before coding
- A
triagedlabel indicates an issue is ready for a fix - Focus on higher priority issues (p1-p3) over lower priority ones (p4-p5)
- A
- Consider starting a GitHub discussion or mailing list topic to gauge interest
Minor Changes Exception
You can create a pull request directly for minor/trivial changes that don’t require design or implementation discussion:- Typo fixes
- Obvious coding errors
- Simple synthesizer or braille display drivers
Translation Issues
Issues with translations should be reported to the NVDA Translators list.Contribution Process
Set up your development environment
Set up your development environment or use GitHub Actions to build NVDA for you by following the CI/CD README.
Ensure the issue is triaged
Make sure the issue you plan to fix has been triaged and has a priority assigned.
Create a branch
Create a branch for your contribution based on the latest commit in the official master branch. This helps reduce merge conflicts.
Build and test
- Build NVDA and run from source
- Manually test your changes
- Run automated tests
Run pre-submission checks
Before opening your pull request, run:All tests must pass before submission.
Update documentation
If you’re adding a feature or changing something noticeable to users:
- Update the User Guide
- Document new commands, drivers, settings, dialogs, etc.
- Follow the User Guide standards
Create a change log entry
Add an entry to the Available sections:
changes.md file in this format:- New features
- Changes
- Bug fixes
- Changes for developers
Change log entries are not required for changes with no/minor user impact or no developer impact.
Create a pull request
Fill out the Pull Request template including:
- Link to issue number
- Summary of the issue
- Description of user-facing changes
- Description of developer-facing changes
- Development approach
- Testing strategy
- Known issues
- Enable “Allow edits from maintainers” (default for new PRs)
- Use draft PRs for early feedback
- Mark as “ready for review” when you want code review
- Consider targeting
betaorrcfor bugs in the current release cycle
CI/CD checks
Every time you push a commit:
- pre-commit.ci applies linting fixes automatically
- Re-run with comment:
pre-commit.ci run - Skip with
[skip ci]in commit message
- Re-run with comment:
- GitHub Actions builds NVDA and creates artifacts for testing
- System tests run automatically
- Security checks verify code safety
Participate in code review
- Answer questions from reviewers
- Discuss and implement suggested changes
- Be proactive to speed up the review process
- CoPilot AI may review your code - engage with helpful comments and explain why you’re ignoring others
Code Style
Please follow the coding standards documented separately. Key points:- Follow PEP 8 except where it contradicts NVDA-specific guidance
- Use tabs for indentation, not spaces
- Include type hints for all new code
- Add docstrings for public functions and classes
- Use descriptive names for identifiers
Technical Design
Review the technical design overview to understand NVDA’s architecture.Copyright Headers
Refer to the guide on creating or updating copyright headers.Ways to Contribute
Beyond code contributions, you can help NVDA in many ways:- Reporting issues - Help identify bugs and suggest improvements
- Issue triage - Help investigate and categorize issues
- Testing - Test alpha and beta releases
- Translating - Localize NVDA to your language
- Creating add-ons - Extend NVDA’s functionality
Getting Help
If you need assistance:- Join the NVDA Developers Mailing List
- Start a GitHub discussion
- Check the NVDA Wiki for additional guides
