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
Comments
Pro tip for using GitHub
An option to avoid GitHub's web interface is to install its command-line tool called
gh. I do so using MacPorts, but HomeBrew should have it too.To install
ghusing MacPorts, type:And then enter your password when prompted.
Next, generate an
sshkey for authentication to GitHub if you don't have one already by typing:And answer all the questions, making sure to remember both the name of the private key file and the passphrase.
Next, append the following to your
~/.ssh/configto makesshauthenticate using the new key:Replacing
id_ed25519with the file-name containing your private key.Next, add the authentication key to the
ssh-agentfor automatic remote authentication as follows:Replacing
id_ed25519with the file-name with your private key, and entering the passphrase.Next, authenticate
ghto GitHub by typing:And following the on-screen instructions.
The following is optional, and will make the
mateutility from TextMate the default editor and pager, which are used by bothgitandgh, so install TextMate if you haven't already and install themateutility from its preferences.First, create a
bindirectory in your home directory by typing:Next, create a file in
~/bin/lesserwith the following content that removes all terminal control sequences from the output and pipes it to TextMate:Next, give executable permissions to the file that you've just created as follows:
Next, edit your
~/.zprofileand append the following two lines:All done. Now you can interact with GitHub almost entirely from the command-line and get the output sent to TextMate.
The following command clones Turnover to a subdirectory in the current directory:
The following command lists all the issues in Turnover using TextMate as the pager, if you configured it as instructed earlier:
Or you can avoid TextMate and print directly to the console as follows:
For example the following are the issues currently open for Turnover at the time of this comment:
Issue #1, for example, contains the following:
All
ghcommands have dedicated manual pages, so for example if you type:That will display the manual page for the
viewsubcommand of theissuecommand, and the same works forgitcommands too.Since the
mancommand uses the configured pager, you will also get the manual pages displayed in TextMate, if you configured it earlier.Re: Buffering
Buffering has two problems:
Plus it's solving a non-existent problem which is the assumption that just querying the application as the single source of truth when needed is slow. VoiceOver does that and in my experience it's not slow unless applications themselves are slow to respond to queries. Therefore to me buffering only adds unnecessary complexity to the code.
Re: Pro tip for using GitHub
lovely thanks for this
Very keen for people with experience to join in
Regarding the buffer, it is the NVDA virtual buffer idea and only applies to webpages to keep the behaviour of the screenreader predictable.
I'll be the first to say, I'm not experienced at this. All I've done is vibe coded a screenreader to my specifications that by and large achieves what I want, to be better than voiceover. It's not complete by any means, it's more of a beginning, a proof of concept, an idea and, yes, a challenge.
I do agree that skils are needed for this beyond pushing money into a slot and asking for wishes which is why I want people to join in. It is also far further than anyone else has got in creating something that is a viable alternative to VoiceOver. It works. I'd like people onboard who push back, who critique, who have views counter to my own. I'm learning as I go but, I don't think that is enough. Please hop on board if you have value to add.
My ultimate (longterm) hope for this project
Personally, one of the things that has prevented me from fully embracing TurnOver, even in apps where it's currently supported, is the fact that it runs alongside, rather than in place of, VoiceOver. Even if the two screen readers function similarly, it's still two separate screen readers running side by side, increasing the potential for bugs, conflicts, and user friction.
NVDA, on the other hand, is a full-featured screen reader, meaning that I can acclimate to one set of commands and concepts when using Windows, and apply them across the operating system. I don't need to think about what screen reader will work in one app versus another, unless I, for example, purposefully quit NVDA and turn on Narrator.
I think if TurnOver could eventually function as a full-featured screen reader, I could see myself using it full time. I know development is only beginning, but I think the ultimate, long-term goal of making it as full-featured as possible across apps could really move the Mac accessibility landscape forward in ways not thought possible a short time ago.
Completely agree with Tyler
completely aggree, this is the type of things i'd want apple to use.
Buggy?
Is it me, or is this ? buggy as hell? It gets stuck all the time for me, loses focus in apps, fails to interact, fails to announce windows in alt tab and so on.
Re: Buffering
The intent is to provide a virtural cursor, similar to NVDA or JAWS (or pretty much any windows screenreader) whereby the page is read like a document. They all achieve it by reading the content into a buffer and them browse / focus mode moves you in and out of that buffer for reading. However, if it's possible to reliably facilitate the same navigation without building a buffer first, then it would be something worth exploring as it would mean faster load times and better support for dynamic content..
Couple of things
If you have bugs, please report them.
Turnover can be used exclusively, I've just set it up so there is a backup if an app isn't working as well as you like. Go into settings down to expirimental and turn off coexist. You can then turn off voiceover. You do need to make sure the option is set to turnover everywhere which is toggle by doing the turnover layer command control comma and then a.
the reasoning was to let people switch easily back and forth rather than simply giving up on turnover.
I feel I'm repeating myself. It's a beta. It has bugs. don't expect perfection. We'll get there, hopefully, but we're doing this in our free time. tell us what is going wrong, file a bug report and we can iron the issues out.
thanks
O