This website is being built in public and is very much under construction

Accessibility Specialist (home page)

Setting up Windows Screen Readers on a Mac

Posted:

I recently picked up a Mac mini for personal projects and went through the usual process of setting up my development and testing tools. Like most accessibility specialists, I regularly work with multiple screen readers. Macs come with VoiceOver built in, but getting JAWS and NVDA running on a Mac takes a few extra steps.

Why test in multiple screen readers

When testing, experimenting, and building UI components for the web, I test in JAWS, NVDA, macOS VoiceOver and iOS VoiceOver, unless it's something tried and tested, in which case I'll give it a quick pass with VoiceOver.

The latest WebAIM survey shows the top 3 most commonly used screen readers are:

  • NVDA (NonVisual Desktop Access). Windows-only. Free
  • JAWS (Job Access With Speech). Windows-only. Paid
  • VoiceOver. Included with macOS and iOS.

While the basic experience is similar, each screen reader announces things slightly differently, has different browser and ARIA support, and like any software, can have bugs and quirks. Testing in multiple screen readers helps build up a more complete picture of the screen reader experience. Sometimes, with more complex UI components, you can encounter issues specific to a certain screen reader.

Setting up a Windows Virtual Machine

Since neither JAWS nor NVDA supports macOS, we need to set up a Windows virtual machine. In the past, I've used VirtualBox, but since moving to an Apple Silicon Mac, I've found that UTM performs better and has been easier to work with. I had performance issues running Windows in VirtualBox, which meant the audio would cut out, not great when you’re relying on speech output.

Download Windows 11

First, we need to grab Windows 11. I prefer to use CrystalFetch (opens App Store), a free macOS app that makes legally downloading the latest Windows builds really easy.

Open CrystalFetch and:

  1. Select Windows 11.
  2. Select latest under build.
  3. Click Download.

Screenshot of Crystal Fetch UI showing Windows 11 download

Alternatively, you can download directly from Microsoft.

Buy a Windows 11 licence key

I bought a licence key from Product Codes. At the time of writing, a Windows 11 Pro licence key was £9.90.

Set up UTM and install Windows

Download and install UTM.

Screenshot of UTM UI

Once installed:

  1. Click "+ Create a New Virtual Machine".
  2. Click Virtualize.
  3. Click Windows.
  4. Select the memory and CPU cores you'd like to use. I used the minimum spec for Windows 11 Pro - 4GB of memory and 2 CPU cores.
  5. Select the ISO we downloaded with Crystal Fetch, then tick "Install Windows 10 or higher" and "Install drivers and SPICE tools" checkboxes.
  6. Enter the size of the virtual hard drive for the VM. I went with the minimum required 64GB.
  7. Click save and let UTM finish setting up the VM.
  8. When the VM launches, press any key to start the Windows installer when you see the "press any key to boot from disk".

You should then be taken through the Windows installer, where you can enter the product key you bought earlier.

Screenshot of windows installer showing the enter product key page

Once Windows has finished installing, updating and restarting, we can start downloading our browsers and screen readers.

If you hit any issues, check out the Windows set up guide on the UTM site.

Install NVDA

Download NVDA within the newly created VM. Although it's free, I'd recommend making a donation to support the software and future development.

Screenshot of the NVDA website's download page

Once installed, there are two settings worth enabling.

Visual Highlight

This makes it easy to see the element NVDA is currently focused on and announcing as you navigate through the page. It’s slightly different from standard focus indicators provided by the site/browser, as it will also be shown on any non-interactive element, such as text that’s being read out.

  1. Start NVDA.
  2. Right-click the NVDA icon in the system tray.
  3. Click Preferences, then Settings.
  4. Within the Settings dialog, click Vision.
  5. Click Enable Highlighting, under Visual Highlight.

Screenshot of vision settings dialog showing the visual highlight setting ticked

Speech Viewer

Speech viewer displays a text log of the NVDA spoken output. It's useful, but bear in mind that the speech viewer doesn't always match exactly what NVDA has spoken, so it shouldn't be used as a replacement for listening to the spoken output.

  1. Start NVDA.
  2. Right-click the NVDA icon in the system tray.
  3. Click Tools, then Speech Viewer.
  4. The Speech Viewer will then open.

Screenshot of the NVDA speech viewer

Install JAWS

Download JAWS within the VM.

JAWS is a paid product, with prices ranging from the hundreds to the thousands, depending on the licence. It does, however, offer a 40 minute demo mode for evaluation. Keep in mind that the End User License Agreement prohibits using the 40-minute demo mode for accessibility testing.

Screenshot of the JAWS installer

Like NVDA, JAWS also contains a couple of useful features worth knowing about.

Speech History

Similar to NVDA Speech Viewer, JAWS contains a Speech History feature that shows the last 500 lines of speech. You can open the Speech History dialog by pressing Insert + Spacebar + H.

Screenshot of the JAWS speech viewer showing lines of previous speech output

Highlight Virtual PC Cursor

JAWS also contains a visual highlight for tracking the position of the JAWS cursor. In JAWS 2026 it's enabled by default. You can find the setting and related options for changing the appearance of the highlight by:

  1. From the JAWS dialog, click Utilities, then Settings Center.
  2. In the settings center, in the left-hand tree view, click Visual Tracking.
  3. Enable "Highlight Virtual PC Cursor". You can modify the appearance of the highlight here too.

Screenshot of the JAWS showing the visual highlight

Configure the keyboard

By default, both JAWS and NVDA use the Insert key for certain commands, which isn't present on Apple keyboards. There's a couple of options to work around this.

Option 1: external PC keyboard

The easiest option is to plug in a full sized PC keyboard, though if you're working from a laptop and move around a lot, it's not ideal.

Option 2: remap insert key

There are a number of apps that let you remap keys. Not all will work with UTM due to how it receives keyboard input from the host machine. Mac apps like Karabiner-Elements, though often recommended, will not work with UTM. After trying tools like PowerToys and AutoHotKey, I found SharpKeys, which is free and straightforward to set up.

Within the VM:

  1. Download and open SharpKeys.
  2. Click Add, then under "Map this key", select the key you want to trigger Insert (make sure you pick a rarely used key).
  3. Then, under "To this key", select Insert and map it to the Insert key.
  4. Click Write to Registry.
  5. Restart the VM.
  6. You can now use your chosen key as Insert .

Screenshot of SharpKeys showing a remapped insert key

Avoid using Caps Lock

Both JAWS and NVDA have the option to use Caps Lock as a modifier key in addition to Insert. I'd avoid that, as caps lock behaves slightly differently on Apple keyboards and may not pass through to the VM as expected.

Selecting the keyboard layout

Both JAWS and NVDA use slightly different keyboard commands depending on whether you're using a desktop or laptop keyboard. Make sure you have the appropriate keyboard layout selected. For most Apple keyboards you want to use Laptop.

JAWS keyboard layout

  1. Start JAWS.
  2. Click Options, Basics.
  3. Under Use Keyboard Layout, select Laptop.
  4. Click OK to save.

Screenshot showing JAWS keyboard layout set to laptop

NVDA keyboard layout

  1. Start NVDA.
  2. Right-click the NVDA icon in the system tray.
  3. Click Preferences, then Settings.
  4. Under keyboard, change Keyboard layout to Laptop.

Screenshot showing NVDA keyboard layout set to laptop

Using Function (F) keys

Certain NVDA and JAWS commands require the use of a function key. Because Apple keyboards use function keys for things like screen brightness, you'll need to press fn + the relevant function key to trigger the command in the VM.

So for NVDA commands like Insert + F7, you'll need to press Insert + fn + F7 on your Apple keyboard.

Alternatively, you can set F keys to function as standard function keys in macOS settings, which will pass through to your VM

Screenshot the macOS function key settings with use F keys as standard function keys enabled

Browser and screen reader combinations

Screen readers work better when paired with a supported browser. While screen reader support for different browsers has improved over the past few years, I'd recommend the following pairings when testing:

  • JAWS + Chrome or Edge.
  • NVDA + Chrome or Firefox.
  • VoiceOver + Safari.

These also match the most common screen reader browser pairings from the latest WebAIM Screen Reader Survey.

Set up complete

Once everything is set up, switching between macOS VoiceOver and Windows screen readers is just a case of firing up your new VM. You can now cover most real-world combinations without leaving your Mac.