Skip to main content

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
Build Dependencies:
  • 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:
1

Fork and clone the repository

Create your own fork of the NVDA repository on GitHub and clone it with submodules
2

Set up the development environment

Install Python 3.13, Visual Studio 2022/2026, and uv package manager
3

Prepare the source tree

Run scons source to build dependencies and prepare for development
4

Make changes and test

Modify code, run NVDA from source with runnvda.bat, and test your changes
5

Build and validate

Create binary builds with scons dist to ensure everything works correctly
6

Submit pull request

Push your changes and create a pull request for review

Version Requirements

NVDA requires specific versions of dependencies. Always check the following files for exact versions:
  • .python-versions for Python version (currently 3.13.12)
  • pyproject.toml for Python package versions
  • .vsconfig for Visual Studio components

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:
NVDA uses tab indentation for Python code and follows specific coding standards. Always run pre-commit hooks before submitting changes.

Contributing Guidelines

Before contributing:
  1. Fork the repository and create a feature branch
  2. Follow the project’s coding standards (tabs, line length 110)
  3. Write clear commit messages
  4. Test your changes thoroughly from source
  5. Ensure all pre-commit checks pass
  6. 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

Build docs developers (and LLMs) love