20 Years of NVDA Development: A Data-Driven Retrospective

Celebrating 20 years of NVDA!

Yippee! NVDA, the free and open source Windows screen reader, has been in development for 20 years now! Read on to learn about the development history of NVDA and the huge community that has grown with it.

On top of this massive milestone, NVDA has now been on GitHub for 10 years. GitHub is the platform where NVDA development occurs, it’s where you can report issues, contribute features, and discuss development. During our time on GitHub, NVDA has grown from a small open-source screen reader into a global community effort supported by volunteers, contributors, and NV Access.

This report provides an overview of how the NVDA project has evolved over the past 15 years of tracked data. It explains how we manage bug reports (“issues”), how new code changes are proposed (“pull requests”), and how our security processes have matured. More importantly, it highlights the people and systems behind NVDA’s growth: showing how community engagement, improved processes, and NV Access staffing have helped NVDA development remain responsive, stable, and secure.

Typically an NVDA issue will go from being opened to being “triaged” (i.e. reviewed and confirmed). Then a community member or NV Access will open a pull request to close the issue. The pull request will be reviewed by NV Access and the community. When the request is approved the issue will be closed, the code will be merged, and released in the next version of NVDA.

Overall, we’ve seen steady year on year growth of code changes from both the community and NV Access. This has resulted in largely staying on top of issues, with issues older than 2016 having a 95% closure rate, and issues from 2016-2023 having an 80% closure rate. Since a high of 2500+ open issues a few years ago, NVDA now has about 2100 open issues. Improvements to our issue triage, pull request review and security processes have had measurable results.

The NVDA contributor community is made up of hundreds of volunteers including translators, developers, testers, issue investigators and issue reporters. Community members have volunteered half of our code contributions, reported thousands of issues, and helped investigate those issues. As of 2025, NVDA has several community bodies driving development. There is an advisory group of trusted community members providing advice to NV Access, a security advisory group dedicated to security research, our GitHub community and various community email lists.

Quick Facts

  • ~2100 open issues, ~12,000 closed issues, 85% closure rate
  • 46% of open issues have been accepted and are ready to be worked on
  • 700+ issues opened each year
  • ~700 code contributions a year and steadily growing
  • 50% of all code contributions come from the community
  • 87% of all proposed code contributions have been accepted into NVDA
  • 30+ active community code contributors in 2025
  • 73 active translators in 2025
  • 1.4 million words translated in 2025
  • 20 published security advisories since 2022

How We Manage and Resolve Reported Issues

Issues are how we track bug reports, feature requests and other work for NVDA.

In 2009, the NVDA project first started accepting issue reports on an issue tracking service called Trac.

In 2015, NVDA moved to GitHub, and issues were copied over.

In 2022, NV Access began formally triaging all new issues. This is a process of going through all recently opened issues and:

  • ensuring the report is valid
  • ensure the report contains enough information for a developer to work on it
  • adding information to help progress the issue
  • assigning a priority to the issue

In 2025, NVDA adopted GitHub’s issue form feature, a more beginner friendly way to report issues.

If an issue is accepted and ready for work from either the community or NV Access, the “triaged” label is applied. Otherwise “needs-triage” is applied to issues that need further information. Triaging an issue helps progress it towards completion, and signals to the community that it is ready to be fixed. An issue is then closed when it is fixed, or no longer valid.

The NVDA project consistently gets 700-1000 issues created per year. NVDA had an all time low in 2021 of 700, and an all time high in 2015 of 1200. Since the low of 2021, issue creation has been slowly increasing. Before 2021, issues created per year varied without consistency.

The older an issue is, the more likely it is to be closed. 95% of the issues opened before GitHub, i.e. older than 2016 are closed. Triaging issues also seem to improve closure rate, as our highest closure rate of the past 6 years (80%), and our highest triage rate (95%) both occurred in 2023.

Issue Data

Note issues from 2009 are grouped with issues from 2010 due to migrating from Trac to GitHub.

Data Tables

year created untriaged triaged needs further info total open total closed % closed % triaged
2010 21 4 0 25 1057 97.69% 16.00%
2011 17 3 0 20 690 97.18% 15.00%
2012 31 4 0 35 846 96.03% 11.43%
2013 49 14 0 63 762 92.36% 22.22%
2014 74 5 2 81 866 91.45% 6.17%
2015 60 3 0 63 1111 94.63% 4.76%
2016 106 10 0 116 747 86.56% 8.62%
2017 121 14 0 135 791 85.42% 10.37%
2018 142 21 2 165 800 82.90% 12.73%
2019 147 24 1 172 831 82.85% 13.95%
2020 171 28 1 200 709 78.00% 14.00%
2021 119 35 3 157 546 77.67% 22.29%
2022 13 128 28 169 561 76.85% 75.74%
2023 0 156 8 164 660 80.10% 95.12%
2024 0 230 21 251 526 67.70% 91.63%
2025 0 326 33 359 517 59.02% 90.81%
Total 1071 1005 99 2175 12020 84.68% 46.21%

Charts

Data Sources

How NVDA’s Community Contributes Code

A pull request (PR) is the term for a proposed code change. To make a change to NVDA, such as adding a feature or fixing a bug, NV Access and community members will begin work by creating a pull request. The pull request will then be reviewed by NV Access, and usually the community too, before being incorporated into NVDA.

NVDA is truly made by the community! Since 2015 about 50% of all changes to NVDA have come from community members. Year on year, pull requests continue to grow thanks to growth in the community and NV Access. Each year, the number of total PRs increases by about 50, with 700 contributions in 2025.

In 2015, after moving to GitHub, NVDA started accepting community code contributions via pull requests. In 2016, NV Access hired its first full-time software developer and in 2021, NV Access hired another developer. In 2023, NV Access was briefly down a full-time developer, hiring again in 2024.

After an all-time high of 334 community pull requests in 2019, NV Access started tracking how many PRs were open each week. This was due to a large amount of community contributions waiting on feedback or support from NV Access. Many of these pull requests were part of a major update of the underlying programming language NVDA is written in; going from Python 2 to Python 3. In 2020 there were over 90 open pull requests, in 2025 we had an all time low of 7 open, and a max of 34 open PRs at a time. This means that now when a PR is opened, it receives prompt attention, and time is minimised from the start of work, to being available in NVDA.

From 2020-2021, to catch up with the back log of community contributions, NV Access only accepted community PRs that were bug fixes, and stopped accepting new features from the community. Since reducing the back log and the subsequent re-opening of feature additions from the community, community PRs have risen year on year up to 321 in 2025.

Sometimes, PRs are closed without being added (merged) into NVDA. This could be due to the implementation not working correctly, a new PR being opened to replace it, or the work being abandoned. Overall, 87% of PRs have been accepted and merged. This means that generally when work has started on something, there’s a good chance it gets finished and becomes part of NVDA. This has improved over time, and now is about 90% each year.

Pull Request Data

Data tables

year created max in progress at a time merged NV Access work merged community contributions total merged closed without merge total closed % community contributions % merged
2015 0 2 2 18 20 100.00% 10.00%
2016 73 55 128 53 181 42.97% 70.72%
2017 125 99 224 39 263 44.20% 85.17%
2018 83 143 226 38 264 63.27% 85.61%
2019 112 334 446 91 537 74.89% 83.05%
2020 90+ 130 216 346 68 414 62.43% 83.57%
2021 63 248 178 426 67 493 41.78% 86.41%
2022 65 291 164 455 52 507 36.04% 89.74%
2023 51 282 281 563 46 609 49.91% 92.45%
2024 49 352 298 650 76 726 45.85% 89.53%
2025 34 443 321 764 87 851 42.02% 89.78%
Total 90+ 2110 2091 4201 628 4786 49.77% 87.78%

Charts

Data sources

Improving NVDA’s Security Through Better Reporting

In 2022, NV Access created a formal security issue handling policy and enabled GitHub’s Security Advisories feature. This made it easier for researchers and developers to report vulnerabilities responsibly. A total of 20 published advisories have been recorded since 2022. On average, NV Access will release a fix to a stable version of NVDA within 3 months of a security issue being reported. Over half of security issues were fixed in under 1 month, with more complex security issues increasing our average response time.

Security Advisory Timeline:

  • 2022: 14 published advisories created
  • 2023: 0 published advisories created
  • 2024: 3 published advisories created
  • 2025: 3 published advisories created

Severity Levels:

  • Critical: 3 (15%)
  • High: 7 (35%)
  • Moderate: 6 (30%)
  • Low: 4 (20%)

What do more advisories actually mean? More reports do not mean NVDA is becoming less secure. Instead, it means:

  • The community is paying closer attention
  • Our responsible disclosure policy is working
  • NVDA is improving its security each year

Security Advisory Data

  • Average (mean) days from report to fix released: 91
  • Median days from report to fix released: 25.5
year created published critical high moderate low
2022 14 3 4 6 1
2023 0 0 0 0 0
2024 3 0 3 0 0
2025 3 0 0 0 3
Total 20 3 7 6 4

Data source: Security Advisories

Making NVDA available to the whole world

NVDA is actively translated to 67 languages. Volunteer translators from across the world translate the NVDA interface, user guide and change log.

In late 2024, NVDA migrated to Crowdin for translations, from a custom legacy system.

In 2025, 1.4 million words were translated by 73 active translators to 67 languages. That’s an average of 19,000 words per translator per year.

Further work to do

This report shows how improving our processes can have a positive effect on the entire NVDA development pipeline. We intend to continue to improve the end-to-end process: from reporting an issue, to triaging it, to the pull request which fixes it. By triaging older issues, we can unblock work that has been requested for over a decade. We also want to continue to train and encourage new contributors, to help grow the community. To do this, we can improve developer documentation, developer tools and direct mentorship. With the PR backlog reduced, we can keep on top of new community code contributions in a responsive manner.

Please consider contributing to NVDA by reading our contributors guide. There are several ways in which you can contribute to the NVDA project: