> ## Documentation Index
> Fetch the complete documentation index at: https://mintlify.com/nvaccess/nvda/llms.txt
> Use this file to discover all available pages before exploring further.

# Development Overview

> An introduction to NVDA development, architecture, and how to get started contributing

## 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

<CardGroup cols={2}>
  <Card title="Python 3.13" icon="python">
    Core application logic, screen reader features, and accessibility interfaces
  </Card>

  <Card title="C++" icon="code">
    nvdaHelper components for in-process DLL injection and performance optimization
  </Card>

  <Card title="SCons" icon="hammer">
    Build system for compiling and packaging NVDA
  </Card>

  <Card title="Visual Studio" icon="windows">
    C++ compilation with MSVC 2022 or 2026 toolchain
  </Card>
</CardGroup>

### 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:

<Steps>
  <Step title="Fork and clone the repository">
    Create your own fork of the NVDA repository on GitHub and clone it with submodules
  </Step>

  <Step title="Set up the development environment">
    Install Python 3.13, Visual Studio 2022/2026, and uv package manager
  </Step>

  <Step title="Prepare the source tree">
    Run `scons source` to build dependencies and prepare for development
  </Step>

  <Step title="Make changes and test">
    Modify code, run NVDA from source with `runnvda.bat`, and test your changes
  </Step>

  <Step title="Build and validate">
    Create binary builds with `scons dist` to ensure everything works correctly
  </Step>

  <Step title="Submit pull request">
    Push your changes and create a pull request for review
  </Step>
</Steps>

### Version Requirements

<Warning>
  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
</Warning>

### 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](/development/setup) for detailed installation instructions
* Check the [building guide](/development/building) for compilation steps
* Read the [running from source guide](/development/running-from-source) for testing
* Visit the [NVDA repository](https://github.com/nvaccess/nvda) for issues and discussions

<Note>
  NVDA uses tab indentation for Python code and follows specific coding standards. Always run pre-commit hooks before submitting changes.
</Note>

### 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

<CardGroup cols={2}>
  <Card title="Environment Setup" icon="laptop-code" href="/development/setup">
    Set up your development environment with all required dependencies
  </Card>

  <Card title="Building NVDA" icon="hammer" href="/development/building">
    Learn how to build NVDA from source code
  </Card>

  <Card title="Running from Source" icon="play" href="/development/running-from-source">
    Test NVDA directly from source without building installers
  </Card>

  <Card title="GitHub Repository" icon="github" href="https://github.com/nvaccess/nvda">
    Visit the official NVDA repository on GitHub
  </Card>
</CardGroup>
