NonVisual Desktop Access
|This article relies on references to primary sources. (January 2012)|
NVDA is programmed in Python. It currently works exclusively with accessibility APIs such as Microsoft Active Accessibility, IAccessible2 and the Java Access Bridge, rather than using specialized video drivers to "intercept" and interpret visual information. It is licensed under the GNU General Public License.
In April 2006, concerned with high cost of existing screen readers, Michael Curran began writing a Python-based screen reader with Microsoft SAPI as its speech engine. It provided support for Microsoft Windows 2000 onwards, and provided screen reading capabilities such as basic support for some third-party software and web browsing. Towards the end of 2006, Curran named his project Nonvisual Desktop Access (NVDA) and released version 0.5 the following year. Throughout 2008 and 2009, several versions of 0.6 appeared, featuring enhanced web browsing, support for more programs, braille display output, and improved support for more languages. To manage continued development of NVDA, Curran, along with James Teh, founded NV access in 2007.
NvDA's features and popularity continued to grow. 2009 saw support for 64-bit versions of Windows as well as greater program stability in 2010. Major code restructuring to support third-party modules, coupled with basic support for Windows 8, became available in 2011. Throughout 2012, NVDA gained improved support for Windows 8, ability to perform automatic updates, included add-ons manager to manage third-party add-ons, gained improved support for entering CJK characters and introduced touchscreen support, the first of its kind for third-party screen readers for Windows. NVDA gained support for Microsoft Powerpoint in 2013 and was updated in 2014 to support Powerpoint 2013; NVDA also added enhanced ARIA support that same year. Also in 2013, NV Access introduced a restructured way for reviewing screen text, and introduced a facility to manage profiles for applications.
Features and accessibility API support
Besides general Windows functionality, NVDA works with software such as Microsoft office applications, WordPad, Notepad, Internet Explorer, google chrome, etc. It supports the basic functions of Outlook Express, Microsoft Word, Microsoft PowerPoint and Microsoft Excel. The free office suites LibreOffice and OpenOffice.org are supported by way of the Java Access Bridge package. NVDA also supports Mozilla Firefox (version 3 or higher).
NVDA is organized into various subsystems, including the core loop, add-ons manager, app modules, event handler and input and output handlers, along with modules to support accessibility API's such as Microsoft Active Accessibility. NvDA also features various graphical user interfaces of its own, such as various preference dialogs, and setup and update management dialogs.
NVDA uses objects to represent elements in an application such as menu bars, status bars and various foreground windows. Various information about an object such as its name, value and screen coordinates are gathered by NVDA through accessibility API's exposed by an object, such as through UIA (User Interface Automation). The gathered information is passed through various subsystems, such as speech handler and presented to the user in speech, braille and via on-screen window. NvDA also provides facilities to handle events such as key presses, name changes and when an application gains or loses focus.
NVDA provides facilities to examine an application's object hierarchy and implement ways to enhance accessibility of a program. It provides dedicated commands to move through object hierarchy within an application, as well as an interactive python console to perform focus manipulation, monitoring objects for events and test code for improving accessibility of an application to be packaged in an app module.
From 2006 to 2013, NVDA's source code was managed via Bazaar, with NV Access switching to Git in 2013, citing development progress with Bazaar. The developers also took the opportunity to modify the release schedule to happen at regular intervals to prevent delay in releasing an official release and to make the release time frame predictable.
In addition to official releases, nightly snapshot builds are also available for testing. Similar to the release process for the Linux kernel, NVDA snapshots are available in master and next branches, with special topic branches created from time to time. NV Access describes the master branch as a live beta, next branch as bleeding-edge code for possible inclusion in the upcoming release, and topic branches for developing a major feature or to prepare for official release (rc branch). Some third-party developers also maintain specific branches, including language-specific versions of NVDA or to offer public preview for a feature under active development.
The current lead developers are Michael "Mick" Curran and James "Jamie" Teh with code and translation contributions from users and other developers around the world.