About NVDA Development
NVDA (NonVisual Desktop Access) is a free, open-source screen reader for Microsoft Windows. The project uses Python as its primary language, with performance-critical components written in C++.Project Structure
The NVDA codebase is organized into several key directories:- source/ - Main Python source code for NVDA
- nvdaHelper/ - C++ components for accessibility interfaces and performance-critical operations
- include/ - Third-party dependencies and headers
- miscDeps/ - Build tools and miscellaneous dependencies
- user_docs/ - User-facing documentation in multiple languages
- projectDocs/ - Developer and project documentation
Technology Stack
Python 3.13
Core application logic, screen reader features, and accessibility interfaces
C++
nvdaHelper components for in-process DLL injection and performance optimization
SCons
Build system for compiling and packaging NVDA
Visual Studio
C++ compilation with MSVC 2022 or 2026 toolchain
Key Dependencies
NVDA relies on several important libraries: Runtime Dependencies:- comtypes (1.4.13) - COM interface generation
- wxPython (4.2.4) - GUI framework
- pywin32 (311) - Windows API access
- eSpeak NG - Speech synthesis engine
- liblouis (3.36.0) - Braille translation
- IAccessible2 - Accessibility API
- SCons (4.10.1) - Build orchestration
- py2exe (0.14.0.0) - Creating standalone executables
- uv - Package and project manager
Development Workflow
The typical NVDA development workflow involves:Fork and clone the repository
Create your own fork of the NVDA repository on GitHub and clone it with submodules
Set up the development environment
Install Python 3.13, Visual Studio 2022/2026, and uv package manager
Version Requirements
Operating System Requirements
- Minimum: Windows 10 Version 1507
- Recommended: Windows 11 for active feature development
- Windows 10: Use Version 22H2 if staying on Windows 10
Architecture Support
NVDA is built for multiple architectures:- x86 (32-bit) - Legacy support
- x86_64 (64-bit) - Primary architecture
- ARM64 - Native ARM support
- ARM64EC - Emulation-compatible ARM64 binaries
Code Quality Tools
The project uses several tools to maintain code quality:- Ruff (0.14.5) - Fast Python linter and formatter
- Pyright (1.1.407) - Static type checker for Python
- pre-commit (4.2.0) - Git hooks for code quality checks
- Robot Framework (7.3.2) - System testing framework
Getting Help
When developing NVDA:- Review the setup guide for detailed installation instructions
- Check the building guide for compilation steps
- Read the running from source guide for testing
- Visit the NVDA repository for issues and discussions
NVDA uses tab indentation for Python code and follows specific coding standards. Always run pre-commit hooks before submitting changes.
Contributing Guidelines
Before contributing:- Fork the repository and create a feature branch
- Follow the project’s coding standards (tabs, line length 110)
- Write clear commit messages
- Test your changes thoroughly from source
- Ensure all pre-commit checks pass
- Submit a pull request with a detailed description
Next Steps
Environment Setup
Set up your development environment with all required dependencies
Building NVDA
Learn how to build NVDA from source code
Running from Source
Test NVDA directly from source without building installers
GitHub Repository
Visit the official NVDA repository on GitHub
