Hello,
I asked the editorial team before posting this, and Michael kindly pointed me here.
I make Legato, a browser for macOS. It repairs a page's accessibility before VoiceOver reads it: unlabelled buttons get names, headings become real headings, focus order stops jumping, dialogs stop trapping you. It does not replace VoiceOver — it works with it, and you can keep your own screen reader and your own voice.
I am not here to announce it. I am here because I do not trust my own testing.
Almost all of it has been done by sighted people, including me, with VoiceOver switched on — and that is not the same thing as using it. I know we are missing the failures that only show up when the screen reader is the only way you have of knowing what happened. I would rather hear those from you than find out from a review.
What is free, forever, with no account and no key: everything the browser does on your own machine — button names, real headings, focus order, escapes from dialogs, plus a built-in voice if you would rather not use the system one. The interface speaks 24 languages, and the bundled voices cover 21 languages in 27 voices, so it is not an English-only tool.
What is paid: only the AI, and only for pages the rules could not fix by themselves — reading a page out in plain words, telling you what a form wants before you start filling it, describing images. Everything is switched on for 30 days from first launch, no card and no account, and it ends by itself.
One thing worth knowing: answers are shared. When the AI describes an image, that answer is kept and handed to the next person free, with nothing stored about who asked.
Requirements: macOS, Apple Silicon and Intel. Signed and notarised, so no unidentified-developer dance. There is no iPhone version yet, and I would rather say that plainly than let the wording imply one.
Download and the full list of what it does: https://qiksy.app/legato/
A five-minute captioned video, if that is easier than reading: https://youtu.be/3iEj8dHdjCs
About that page: I built it to be read, not looked at. The demos are audio, the controls are keyboard-reachable end to end, and it passes an automated audit clean. But an automated audit is a low bar and I know it. If the page does not read the way I think it does, that is my first bug and I want it.
For anyone who does test it — I will give the paid tier free for life to anyone who sends a real bug. No review expected, nothing to publish, not a word in public. Just the report.
I would rather hear what is broken than what is good.
Dmytro Liesniak
Comments
will this come to iOS
I want to get a mac. Unfortunately that is several month down the line. Will this come to iOS?
iOS no, Windows yes today — with one caveat
Dennis, thank you — three honest answers.
iOS: no, and not because we ran out of time. Apple does not allow a third-party browser engine, so anything called a browser in the App Store is a shell around WebKit. Repairing a page before your screen reader reads it needs the layer Apple keeps closed. An iOS version would be a weaker thing wearing the same name, and you would find that out on the first badly built page. If the rules change, I will build it — until then I would rather say plainly that it is not coming than let you wait for it.
Windows: yes, today. There is a build, and it works with NVDA and JAWS as well as with its own voice. One caveat I would rather you heard from me than discovered: the installer is not signed yet. Windows will show a blue window headed "Windows protected your PC", and the only button you will find at first says "Don't run". Press "More info" and a second button appears, "Run anyway" — that is the one. Where it names the publisher it will say "Unknown publisher". Our certificate is bought and going through the authority's identity checks; until it is issued there is nothing to sign the file with. Because the name cannot vouch for the file, the download page publishes the checksum of the exact file we released, so you can verify the file itself instead of trusting a label.
Mac: no rush. That build is signed and notarised, and it is not going anywhere. Everything the browser does without the AI is free forever, whenever you get there.
If you do try the Windows one, the report I would most like is the boring one: what it said, what you expected it to say, and where you got stuck.
Lost me on the AI
Was feeling quite curious about this as I've been thinking about contributing to WebKit myself, but I don't like the security implications, the lack of sustainability, and the possibility of hallucinating, all resulting from your use of AI. Leave AI out of screen-reading, or at least only use it to augment rather than replace screen-readers. The right way to do this is to fix WebKit, not to make an AI model interpret and regurgitate web pages.
Already optional — and you are right about WebKit
João, this is the comment I most wanted, so thank you for writing it rather than closing the tab.
On augmenting rather than replacing: that is what it does. Legato does not replace VoiceOver and cannot — you keep your screen reader, your voice and your settings, and it reads the page after the repairs rather than instead of them.
On leaving AI out of screen-reading: mostly it is out. The repairs that fix the majority of pages are rules, not a model — a button gets its name from the markup around it, a heading that was styled text becomes a real heading, focus order stops jumping, a dialog stops trapping you. That part runs on your machine, needs no account and no key, and is free forever. No model is involved and none is asked.
The AI is a separate, paid thing that never runs by itself. It is called when you ask, on the page you are on, for the pages the rules could not fix: describe this image, tell me what this form wants, say this in plain words.
And it is optional at a finer grain than "on or off". There are three separate switches in Settings, one per skill, and under each one the interface states exactly what leaves your machine — the picture itself for describing images, the shape of the form and never your answers for the form summary. Each asks once, the first time you use it. Say no and it says "Not sent", and it does not ask again. Never touch them and no model is ever called; the browser keeps doing the rule-based repairs exactly as before.
On security: on a cache lookup what leaves the machine is a hash and the page language. Not the markup, not the URL, not your licence key — and a hash cannot be read back into content. Sending an actual fragment is a different act with its own consent dialog.
On hallucination: you are right and I am not going to argue it away. A model can invent a plausible name for a button, and a confident wrong name is worse than silence. That is why it is asked for a name or a description — the smallest possible answer — and never for the page's meaning, and why the plain-words rewrite is something you request per page rather than something applied to your reading.
On WebKit: you are right, and I would rather concede it than dress it up. Fixing the engine is the better fix where the engine is what is broken. But most of what I am repairing is not a WebKit bug — it is a site that never gave its button a name. No engine can invent that name, because the information was never there. WebKit patches and this are not competing; they fix different halves of the same misery, and yours is the half that lasts.
And one thing I would genuinely ask of you, not as a turn of phrase. If, after all that, you still think the AI part should not exist in this shape — even switched off by default and asked for by hand — I would rather learn it properly than from one exchange. Ask the people here whose judgement you trust, and let them say it in their own words. If it comes back that this is the wrong thing to have built, tell me plainly and I will change it rather than defend it. I would much rather hear that now, from you, than after people have paid for it. I am not asking you to approve of it; I am asking you to tell me if I am wrong, and I will take the answer.
If you do go and contribute to WebKit, that helps more people than I will.
link for the windows one?
Link for the windows one?
Windows link — and why it will call me an unknown publisher
Dennis, here it is.
Download page, Windows button is the first one: https://qiksy.app/legato/
Straight to the file, if you would rather skip the page: https://api.qiksy.app/legato/download?os=win&v=0.3.58
File name: Qiksy-Legato-Setup-0.3.58.exe, about 162 MB.
SHA-256: 51be29b0c9865bca382fd0fccc687a7e3b647e2b1c54d82fec355766f5e7ec87
Now the part I would rather you heard from me than found out on your own screen.
The file is not signed yet, so Windows will make a scene about it. You will get a blue window headed "Windows protected your PC", and the only button on it says "Don't run". Press "More info" and a second button appears, "Run anyway" — that is the one. Where it names the publisher it will say "Unknown publisher". Nothing is wrong with the file; Windows simply has no name to read off it.
The reason is dull, and I am in the third week of it. The certificate that puts my name on the file is bought and paid for — that part took a card and five minutes. What it takes to actually get it issued is a documents queue: a state register extract, an identity check, a phone line they have to verify by calling it, and, at one point, a postcard sent to my physical address so somebody can confirm a human being lives there. Every round trip is days, and each one is answered by a different person who asks for the thing the last one already had. It is not something I can pay to skip, and I am not going to pretend it is anything more interesting than paperwork.
So: a couple more weeks and this warning disappears — the same installer, signed, with my name where it currently says "Unknown". If you would rather wait for that, wait, and I will say here when it is done. If you would rather have it today, it is the same build either way.
Meanwhile, since the name cannot vouch for the file, you can check the file itself. In Command Prompt:
certutil -hashfile "%USERPROFILE%\Downloads\Qiksy-Legato-Setup-0.3.58.exe" SHA256
If that number matches the one above, the file is the one I released, byte for byte.
It works with NVDA and JAWS, and with its own voice if you prefer. The report I would most like is the boring one: what it said, what you expected it to say, and where you got stuck.
bug on first site.
The following is my first expirience with this project.
Open app.
Get stuck in introduction window
Manage to get unstuck
type forum.audiogames.net
press enter
Get stuck in cloudflare.
Quit app
Open safari instead.
personal distain for web controls.
I forgot this in my last post, but using web controls for your ui is a bad idea. Makes it feel more messy than it has to be.
An example of this is the browser controls group. Look how safari does this.
Reproduced, one fix already in — and the Pro tier is yours
Soren, thank you. That is the most useful thing anyone has sent me about this browser, and I would rather have it stated flatly like that than dressed up.
First, the promise I made in the opening post applies to you: the paid tier, free for life. You do not have to do anything for it — no email, no form, no address to hand over. The key is already issued and it comes to you here, through AppleVis, within the next couple of hours.
Now what I actually did with your report, because "thanks, we'll look into it" is worth nothing.
Cloudflare. Reproduced, and it is ours. I loaded forum.audiogames.net in a clean profile and sat on "Just a moment... / Performing security verification" for thirty seconds with no sign it would ever finish. You did nothing wrong and you were not being impatient; the page does not complete. I do not yet know why, and I am not going to invent a reason. Cloudflare's check is deliberately opaque, and I would rather tell you it is unsolved than tell you a story about it.
While chasing it I found something else and fixed it today. The browser was announcing itself to every site as "QiksyLegato/0.3.59". It was never supposed to — there is code specifically to strip that — but the code looked for the name with a space in it and the engine writes it without one, so it never matched and never stripped anything. That is a browser wearing a name no site has ever heard of, on every request. It may or may not be what Cloudflare objected to; it was certainly wrong, and it is out now.
And a second one, found because of you in a way you could not have predicted. Handing you the key is what made me put a real licence into a real copy of the browser for the first time in a while — and it did not activate. A licence with no end date was being thrown away as if it were forged. Anyone I had rewarded this way would have been told "your key is fine, try again in a minute" for ever. That is fixed too. Your bug report cost me two defects I did not know I had, and neither of them was the one you reported.
The introduction window. Not reproduced yet, and this is where I need one more sentence from you. "Get stuck" can mean several different failures and they have different causes: did the focus refuse to move off something, did you reach a control that would not activate, or did you reach the end and find nothing that moved you forward? And what did VoiceOver say at the point where you stopped — even roughly? The screen is a language list and a Next button, so if it trapped you there, something is wrong that I cannot see from a machine with sight.
Web controls. You are not wrong, and I am not going to argue it into a feature. The interface is web, and against Safari's native controls it reads as messier — more stops, more noise, fewer things behaving the way the system taught you to expect. That is a real cost and I picked it knowingly, because it buys 24 interface languages and one codebase across macOS and Windows. Knowing why it happened does not make it sound better in your ears. The browser controls group is the concrete example you gave, and it is where I will start; if you have the patience for one more detail, tell me what Safari's version does that ours does not, and I will take that as the specification.
I would rather keep hearing this than not. If you gave the thing five minutes and it lost you twice, that is five minutes more than most people give, and both failures were mine.