TurnOver - the OG alternative screenreader for mac is now opensource

By Oliver Kennett, 20 October, 2026

Forum
Developer Announcements

Hello everyone!

So, after much soul searching, thinking about what I want for the future and whether I could make this a sustainable concern, I've decided TurnOver is now free and open source, under the GPL. Anyone can use it, read the code, check it, change it and build it themselves.

I started out with this on a whim. Safari and Word were unusable for me, so I set about fixing them for myself, and discovering it was possible to fix not only those two apps but improve the logic and layout of others, I realised there might be something here. It was exciting. It was wild! I was doing something many of us had hoped for for so long. Of course, it's a big undertaking. As pointed out by several commenters, maintaining the code base, keeping up with apps as they change and generally keeping the whole thing ticking along takes a significant amount of time, as it has. So, to make it sustainable, I thought, rightly or wrongly, I'd keep it closed and charge a small subscription to cover my time.

From speaking to others, I came to understand that most people won't pay for a screen reader when a free one is built in, so I wouldn't get enough to make it worthwhile. Also, I admit, other ventures on here did make me realise that even a half-baked free screen reader that's open source might be preferable to a fully functional, notarised one with a plan for sustained development. *mutter mutter mutter*

As it stands, I'm happy. I've got a screen reader that rocks. All I really wanted. I just thought others might want it more.

What this all means:

- TurnOver is free for everyone. No tester keys, no waiting list, no price.
- The code is on GitHub: https://github.com/TurnOver-For-Mac/turnover. Yes, it was written with an AI, and tested by hand, with a hundred-odd unit tests. It's all there to judge, and I'm hoping there's something useful in it for people to build out from.
- It's a spare-time project. I'll keep working on it a few hours a week, on what I can. No support or roadmap promises. I'm going to do what I should have done before: get on with finishing my book. It's amazing what procrastination can look like! This is still a project I care deeply about. There are areas of the Mac I still want to reach and fix. I'm a tinkerer and a maker, coding and 3D printing are my jam. It's just not going to be viable as a larger commitment.
- Bug reports and ideas go through GitHub's issue form now, not email.
- Fixes, plugins, guides and testing are all very welcome. Plugins are the easiest way in, no Swift needed.
- The released builds are still signed and notarised by me, and update themselves. Nobody else can ship an update to your copy.

If it's useful to you and you'd like to help with running costs, there's Ko-fi, no account needed: https://ko-fi.com/oliverkennett. It's in TurnOver's menu too, under Support TurnOver. GitHub Sponsors is coming.

Download and guides, as before: https://doll-eye.github.io/turnover-updates/

A massive thank you to the testers, who sent hundreds of careful reports and made TurnOver what it is. You are heroes, rocket men and women willing to climb onboard a wild ride. You rock.

Stay frosty

O

Options

Comments

By Dominic on Tuesday, October 27, 2026 - 15:05

In reply to by Aleksandr

yea but who would wonna do that.

By Choom on Tuesday, October 27, 2026 - 17:24

In reply to by Aleksandr

I don't see how AI can help in this situation, especially considering that it's what got us here in the first place. Writing code is by far what takes the least amount of time, and deterministic tools like macros and Perl can help with the repetitive bits. What takes time is coming up with a proper architecture, and AI sucks at that, so it's optimizing the wrong aspect of development.

In Vosh I put some effort into separating things, but stopped short of deciding how high level the core should go. For example should the core recognize the different kinds of controls and provide them to the add-ons already classified, or should that work be left to the add-ons? Should there be an intermediate level of add-ons that work more closely to the core to do the classification, or should all add-ons work at the same level? In my opinion the core should be responsible for classifying things and abstracting away from the lower levels of Apple's accessibility, like attributes, parameterized attributes, actions, custom rotors, and accessibility graphs. Another question that needs to be answered very early is whether the navigation model should be flat, as is the default on iOS, or should it continue to be a hierarchy, as is the case on macOS? I think that it should be flat, with a browse mode like NVDA's that works everywhere not just in browsers. I'm also against adding too many features too early. I think that we should focus into moving slowly but steadily, and not rush to implement new features until the existing ones are polished.

I don't mind to do the refactoring, but it will be heavily based on what I wrote for Vosh, since I consider it well designed and it's already battle tested as I used the same code to write a context collector for an AI assistant in my last job. Vosh is written in ergonomic Swift, it avoids all the concurrency problems with the accessibility API by relegating all calls to that API to a global actor backed by a dedicated thread, it is organized such that it doesn't need input monitoring permissions, its output module is ready to replace some utterances with audio icons, but it isn't customizable yet. My work can focus mostly on providing a library that can be used both for screen-readers and AI agents, and then people can implement the high level screen-reader on top.

I'm also considering abandoning GitHub and adopting a custom distributed solution that is more in tune with the distributed nature of git. This solution, which I've been working on recently, will be entirely based on public git repositories in the cloud and E-mail exchanges to discuss issues. Pull requests will preferably be based on sending an E-mail with a summary of the commits, the branch, and the location to pull from, as output by the `git request-pull` command. People wanting to use GitHub can continue to do so since it already provides public git repositories. This solution isn't ready yet since I'm waiting for my cloud provider to implement a feature so initial work will remain on GitHub, but I think that the project should have a self-hosted home that's more cognitively accessible to the common user than GitHub.

If people agree with this then I'll make a shallow fork of Vosh and work towards making it a library, with a screen-reader demo notarized by Apple and published once I think it's ready for early testing.

I use Markdown a lot to format my text, and in that particular comment I used it to express all the commands in code voice, which essentially translates to monospaced characters to the sighted. While I understand that most people here are totally blind like me, I'm used to writing to a sighted audience so I cannot stop myself from formatting things with them in mind.

By Choom on Tuesday, October 27, 2026 - 17:45

The private CoreAccessibility framework needs to be investigated. It currently powers the public accessibility framework but might be more versatile, since the public accessibility framework suffers from some questionable design decisions such as blocking calls, lack of thread safety, and lack of features like the custom rotors. I'd like to reverse-engineer VoiceOver in order to learn more about this, but with my Mac Studio currently seized, there's no way I'm gonna be running virtual machines to do that on this 16GB MacBook Air.

By Uğur Gürbüz on Tuesday, October 27, 2026 - 17:55

In reply to by Choom

I completely agree with you on managing scope and avoiding feature creep—moving at a steady pace to build a rock-solid foundation is definitely the right path.

To share how I’ve structured this architectural split in Armoni—which I’m planning to make publicly available on Git very soon—here is how the responsibilities and extended capabilities are organized:

Core (Host & OS Integration): Handles low-level AX ingestion, macOS shell interfaces (Desktop, Dock, Menu Bar), system notifications (volume/brightness OSD), and the screen reader’s own UI/settings.

Shared (The Common Engine & Domain Layer):

Multi-Provider Ingestion & Unified Interpretation: We ingest accessibility data from multiple providers (AX API, AppleScript, PDFKit, Chromium CDP, WebKit, Office APIs). Rather than passing raw, fragmented data around, a single Object Resolver/Interpreter unifies and normalizes all incoming data into a single, cohesive semantic representation.

Data-Driven Component Catalogs: Both Native and Web components are defined declaratively via catalogs. This handles roles, states, and navigation semantics cleanly, ensuring outputs (like Speech or Braille cell mappings) stay decoupled from raw AX quirks.

Data-Driven Keymaps & Localization: Key bindings and key labels are fully data-driven, allowing dynamic remapping and localization tailored to different keyboard layouts and languages.

Cursors & Contracts: Manages virtual/flat navigation states, reading snapshots, and strict data protocols.

Utilities & AI Integration (Armoni Intelligence):

Incorporates specialized tools alongside Armoni Intelligence, powered by a locally running AFM3 advanced model.

Provides on-device video audio description, real-time meeting presentation descriptions, advanced OCR, and vision-based contextual analysis.

When native or web applications fail to expose AX attributes, vision analysis programmatically infers and constructs missing accessible names, roles, and states directly into the navigation tree.

App Modules (Extensibility Infrastructure): To ensure app-specific fixes and commands never pollute the Core, every application support package (e.g., modules/whatsapp/) lives independently with its own manifest, documentation, localization files, and src directory. Extensions interface with Armoni via dedicated SDKs in three tiers:

JSON Profiles: Declarative overrides, labels, regions, and keyboard remappings.

JavaScript (via JavaScriptCore): Dynamic scripts for custom app navigation and commands.

Native Swift (.framework): Signed, compiled modules for complex edge cases requiring C-ABI performance.

Both core and module-level localization support are deeply baked into this design. I find that this separation gives us the best of both worlds: a clean, high-performance core alongside a sandboxed, data-driven extensibility model that scales gracefully.

I look forward to opening up the Armoni repository soon so we can explore these architectural ideas and potential synergies on open ground!

By Jimmy V on Tuesday, October 27, 2026 - 22:20

First, I wanna say, turnover is so awesome! I use it for safari some times, and it's very snappy! However, the command control comma to bring up the turnover menu from everyware, doesn't seem to work. I have it in my menu bar. I hope this can be fixed in a future build!
Keep up the wonderful work

By Ashley on Wednesday, October 28, 2026 - 18:02

TUrnover's contributor guidelines have now been updated to reflect the need for larger refactors. "Moving app logic into app modules is welcome, and is the direction the code is going: less special-casing in the core, more in Sources/TurnOverCore/Modules/. That work doesn't need to come as a string of tiny pull requests. Open an issue or a Discussion with the plan first, so two people don't move the same thing, then send it in a few larger pieces, an app or a mechanism at a time."

see here

Hopefully this makes things easier, and will encourage more people to contribute to a larger refactoring effort.

By Maldalain on Wednesday, October 28, 2026 - 18:20

Ashly, to be honest, I didn’t understand much of your comment above. The technical terminology can be difficult to follow for someone like me who has no background in app development.
I used to send bug reports to Oliver regularly, but since the move to GitHub, I’ve barely submitted any. The terminology and reporting process there feel confusing and intimidating for everyday users.
Would it be possible to add a built-in bug reporting feature to TurnOver? A simple form with clear questions could help us describe the issue directly in the app, then automatically submit it to GitHub in a format that gives the information it needs. That would make it much easier for users like me to keep contributing feedback.

hmmmm i didn't think of that when i said i didn't like github. but i wouldn't be apposed to that change as a normy myself. no i am not the dev i was just aggreeing with you but my point from my last comment still stands.

By CATIS#2026 on Monday, November 9, 2026 - 17:20

Hi, I was wondering if you have plans to make your software support braille device connections to Macbooks since I believe braille devices are connected to Macs within VoiceOver settings. I am appreciative to have an alternative to VoiceOver with VoiceOver's known bugs. I like what NVDA does by allowing for donations, but making the software free.

My only question is, I know Apple to be locked down in terms of modifications. Is your software, something you see Apple trying to block in the future?

Thank you for your software development!

By Wahid Raza on Monday, November 9, 2026 - 20:10

Hi, first of all let me thank and congratulate for this tremendous project and contribution to bring alternative screen reader solution, to fill the gap where mac’s VO got failed until apple fix it in future update.
I request to turn over’s developer to share its demonstration of the same, would be appreciated if possible to give 5 minutes or more. If any one else can do so would much help those who are not tech savvy to install and run from github.
Thanks

download here.
https://doll-eye.github.io/turnover-updates/
Download the zip at the top. It should be about 36 MB. If you don't want to use it, and if you use Discord, once you have, TurnOver downloaded, you can join the server by going to help menu and going to the Discord link. Alternatively, you can find it on the first page here. Apologies if this isn't helpful for you.

There's a pretty low chance Apple can block this. It's been notarized, not that that doesn't mean anything, but it's not on the App Store either. Not saying it won't happen, but I'm pretty sure it won't. I'm pretty sure TurnOver also has support for braille devices, not sure how extensively though.

By mr grieves on Wednesday, November 11, 2026 - 17:40

OK I admit I've not really been using Turnover much, but I finally had my moment when I thought "there really might be something in this!".

WhatsApp on the Mac is a horrible little app with VoiceOver. It just doesn't work properly, the navigation is all over the place and although it's just about doable, it is a miserable experience.

But, not with Turnover. I had to go to the Turnover menu, select the current app, then tell it to use Turnover not VoiceOver. (For some reason, I had to do this twice). But now, WhatsApp is just tab, shift tab and arrows and suddenly just makes perfect sense.

They have been getting very excited about this on Double Tap, which is where I got the idea to try with WhatsApp.

For some reason I thought it only worked on apps that had been programmed specifically into it, but I wonder now if it is working more broadly than that.

Anyway, very impressed with this and I will try to remember to try it out next time I get frustrated.

By Oliver Kennett on Wednesday, November 11, 2026 - 19:54

Apple can’t block TurnOver in particular without breaking every app that uses the Mac’s accessibility interface, because that public interface is what TurnOver reads the screen through. It asks only for the two permissions you grant in System Settings, and it needs no special access to the system. A few extras, braille above all, lean on parts of macOS that Apple doesn’t document, so a future update could break those but there are ways to fix that pretty quickly and the core of TurnOver doesn't depend on them.

also, if Apple tried, well... It wouldn't look great. What I'd really like is for this project to inspire Apple to improve VoiceOver. We've proofed that there are ways of making many apps easier to use and this is working without the deeper privileges that VoiceOver has. I have requested that Apple allow access to such hooks but... It's Apple, who knows if they are interested.

This is still a small project. I keep an eye on the number of downloads. I do hope that we can continue to develop this to a point where it's the NVDA of Mac. At the moment, we're just trying to get the foundations in place, feeling out various styles of app and broadening compatibility and reliability. I must be clear though, this is often finding ways around obstacles rather than having the direct route to solutions. Design decisions can end up being compromises and, I might not always get that right. I've tried hard to make sure that there is always the fallback of VoiceOver, but there are only a few of us working on this in our free time. Reporting issues and contributing is really the only way this can continue to work.

By bryant walker on Thursday, November 12, 2026 - 02:47

Hello.
First of all, this sounds like a very promising project, and I hope people can keep it sustainable.
I do, however, have a suggestion.
One of the things I really like about voiceover is that it has no concept of focus or browse mode. This enables you to just go to an a website like youtube and use the keys that were meant to be used specificly with that website or ap, without navigation quick keys interfering. From what I have observed, Turnover does not have this integrated. Instead, it relies on focus and browse mode, much like NVDA. For those of us who like the voiceover behavior, could this be something we can change?

By JC on Thursday, November 12, 2026 - 03:05

Hi,

I know I have not posted to this thread in a while, so I would like to make a few comments and cheer my thoughts on the latest built. First off, whoever had the idea of adding the natural voices, thank you so much! We have been waiting for these natural voices to arrive and now that they're here I now get to enjoy the natural voices in addition to the voices that we have already on macOS. second, I continue to check if there have been ferther improvements throughout each update, and I've saw some improvements to the screen reader. Ferthermore, navigating with the screen reader overall is very snappy compared to using VoiceOver. thanks again for making this opensource. I'm glad I was able to give feedback and suggestions throughout the build cycle. I especially enjoyed the various keyboard layouts such as NVDA and jaws. I'm a user of both screen readers, and I'm happy that both keyboard layouts have been added as an option.

By Oliver Kennett on Thursday, November 12, 2026 - 05:11

Thank you for your feedback on this. As I'm trying to keep everything organise---the whole thing is more of an effort of manageent than actual coding now--I'd love if it you can send your suggestions or bug reports to github at:

https://github.com/TurnOver-For-Mac/turnover/issues

Then I'll be able to process it with everyhting else. I don't check these forums for feedback anymore as it just adds to the workload. I hope you understand.