Skip to main content

Prerequisites

Before setting up NVDA development, ensure you have:
  • Windows 10 (Version 22H2) or Windows 11
  • Administrator access for installing development tools
  • At least 10 GB of free disk space
  • Internet connection for downloading dependencies

Getting the Source Code

The NVDA project uses Git for version control. The repository is hosted on GitHub.

Fork and Clone

If you plan to contribute to NVDA, start by forking the repository:
1

Fork the repository

Visit https://github.com/nvaccess/nvda and click the Fork button to create a copy in your GitHub account
2

Clone with submodules

Clone your fork with the --recursive flag to fetch all required submodules:
git clone --recursive https://github.com/YOUR-USERNAME/nvda.git
The --recursive flag is essential. Without it, you’ll be missing critical dependencies contained in Git submodules.
3

Navigate to the directory

cd nvda

Keeping Your Fork in Sync

When you fork the repository, GitHub creates a copy of the master branch. However, this branch won’t automatically update when the NV Access master branch is updated. To keep your work based on the latest commits:
# Add a remote for the NV Access repository
git remote add nvaccess https://github.com/nvaccess/nvda.git

# Fetch the NV Access branches
git fetch nvaccess

# Switch to the local master branch
git checkout master

# Set the local master to use the NV Access master as its upstream
git branch -u nvaccess/master

# Update the local master
git pull
This configuration ensures your master branch stays synchronized with the official NVDA repository.

Managing Git Submodules

If you didn’t use --recursive when cloning, initialize submodules manually:
git submodule update --init
After any git pull, merge, or checkout, update submodules:
git submodule update
Run git submodule update after every pull to ensure submodules are current.

Installing Required Dependencies

Python 3.13.12

NVDA requires a specific version of Python:
1

Check the required version

The exact version is specified in .python-versions in the repository root. As of now, it’s Python 3.13.12, 64-bit.
2

Download Python

Download Python 3.13.12 from python.org
3

Install Python

Run the installer and ensure you:
  • Select the 64-bit version
  • Add Python to PATH
  • Install for all users (recommended)
4

Verify installation

python --version
Should output: Python 3.13.12
You must use Python 3.13.12 specifically. NVDA requires Python >= 3.13 and < 3.14.

uv Package Manager

NVDA uses uv as its package and project manager.
# Install uv
pip install uv

Microsoft Visual Studio

Visual Studio is required for compiling C++ components.

Choose Your Edition

Build Tools

Minimal installation for command-line buildsDownload Build Tools

Community Edition

Full IDE with debugging capabilitiesDownload Community
To replicate the production build environment, use the version of Visual Studio 2022 that GitHub Actions is using.

Required Components

During installation, you must include specific components:
If installing manually, select these components:Workloads Tab:
  • Desktop development with C++
    • Ensure “C++ Clang tools for Windows” is included in optional components
Individual Components Tab:
  • Windows 11 SDK (10.0.26100.x)
  • MSVC v143 - VS 2022 C++ ARM64/ARM64EC build tools
  • MSVC v143 - VS 2022 C++ x64/x86 build tools
  • C++ ATL for v143 build tools (x86 & x64)
  • C++ ATL for v143 build tools (ARM64/ARM64EC)
Preview or Insiders versions of Visual Studio are not supported. Use stable releases only.

Git Submodule Dependencies

NVDA includes several dependencies as Git submodules:

Runtime Dependencies

  • eSpeak NG (commit b0b605c8a80f76c4c19e18033c6780c3cc4afc5b) - Speech synthesis
  • Sonic (commit d2cdb40fbdc82b464be364a50b34e8dd82b6c80a) - Audio speed adjustment
  • IAccessible2 (commit c9ae003d9c85eb707716928de97e055f5b77189c) - Accessibility API
  • liblouis (version 3.36.0) - Braille translation
  • Unicode CLDR (version 48.0) - Locale data
  • Microsoft Detours (commit 9764cebcb1a75940e68fa83d6730ffaf0f669401) - API hooking
  • Windows Implementation Library (WIL) (commit 7cf41936c5b4ab79daf0d9437211380dc69fa958)
  • Java Access Bridge 64-bit (Zulu 17.0.16+8)
  • Adobe Acrobat accessibility interface (version XI)
  • brlapi (version 0.8.7+) - Braille device communication
  • Nullsoft Install System (version 3.11) - Installer creation

Build Time Dependencies

Included in the miscDeps submodule:
  • xgettext and msgfmt from GNU gettext - Translation tools

Python Dependencies

NVDA depends on numerous Python packages specified in pyproject.toml. The build system automatically manages these dependencies using uv.

Key Python Packages

Runtime:
  • comtypes 1.4.13
  • wxPython 4.2.4
  • pywin32 311
  • cryptography 46.0.5
  • pyserial 3.5
  • requests 2.32.5
Build:
  • SCons 4.10.1
  • py2exe 0.14.0.0
  • setuptools ~80.10.2
Development:
  • ruff 0.14.5 (linter and formatter)
  • pyright 1.1.407 (type checker)
  • pre-commit 4.2.0 (git hooks)
All Python dependencies are installed into an isolated virtual environment within the repository. They won’t affect your system-wide Python installation.

Visual Studio Code (Optional)

If you use VS Code, NVDA provides a preconfigured workspace: The .vscode submodule contains prepopulated workspace configuration.

Disable VS Code Configuration

If you prefer not to use the preconfigured workspace:
git submodule deinit .vscode

Re-enable Later

git submodule init .vscode

Optional Dependencies

Doxygen (Developer Documentation)

Only needed if you want to generate nvdaHelper C++ documentation:

Verifying Your Setup

After installing all dependencies, verify your setup:
# Check Python version
python --version

# Check if uv is installed
uv --version

# Verify Git submodules are initialized
git submodule status

# Check Visual Studio installation
where cl.exe
All commands should complete without errors.

Next Steps

Building NVDA

Learn how to build NVDA from source

Running from Source

Run NVDA directly without building installers

Troubleshooting

If you see empty directories in include/ or miscDeps/:
git submodule update --init --recursive
Ensure you’re using Python 3.13.12 exactly:
python --version
If incorrect, uninstall other Python versions or use virtual environments.
Re-run the Visual Studio Installer and import the .vsconfig file from the NVDA repository root.
Ensure Visual Studio’s build tools are in your PATH:
"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" x64

Build docs developers (and LLMs) love