Claims against code · 15 September 2026
Audit
We took every claim on this site and in the App Store and checked it against the code that is supposed to keep it. Below: what holds, what we fixed the same day, and what we do not do.
This audit is internal. Tysha has never had an external audit, and we put that in the first line rather than in small print at the bottom. An internal review is worth less than an external one - but saying «we passed an audit» without naming an auditor would be worth nothing at all.
Why bother
A messenger sells trust, and trust cannot be shown in a screenshot. The only honest way is to name the claim, show the place that keeps it, and say how to check it without us. Where you cannot check it without us, we say so plainly instead of pretending otherwise.
Claim against code
Three possible outcomes and no fourth: holds - the claim is kept; reworded - the wording was stronger than the truth, so we changed it; fixed - the claim was not being kept, and the bug is gone.
What we do not do
This list is deliberately the longer one. What is missing is usually learned later, and from someone else.
- No external audit. The biggest open item, and it can only be closed with money and someone else's name on the report.
- We do hold metadata. The username is stored in the clear, and the time and size of every envelope are visible. A group message goes as one envelope per member - so the size of a group shows in the count. The queue address is random now, but the server keeps it next to the username in one row: it is not hidden from the server itself, and could not be while delivery runs through it.
- The passcode locks the app, not the conversation. Messages are encrypted with a key from the iPhone Keychain - tied to this device and readable only while the phone is unlocked. That key is not derived from your passcode, and you can see it plainly: the text of a new message appears in a notification before you have entered the passcode. So the passcode and Face ID close Tysha screens, not the bytes themselves.
- We do not prevent screenshots. iOS cannot. We only tell the other side - and it is reciprocal: turn the notice off and you stop receiving it too.
- Attachments on disk rely on iOS file protection, not on our own key - unlike the conversation itself.
- The server is closed. The client code is available on request (AGPL); everything server-side has to be taken on trust - or verified by running your own, which we set up on request.
- The hosting platform sees what our server sees (it terminates the secure connection), and Apple sees the timing of every notification. That is the price of hosting and the price of iOS, and we cannot route around it.
- A report is the one place where text reaches the server in the clear. Only the messages you picked, and for 90 days.
How to check this without us
- Ask for the app's code. We hand it over on request - including the tests described here. It is AGPL; write to support and we will send it.
- Compare the safety code. Sixty digits or a QR code in the contact card: if they match, there is nobody in between. If a key changes, the app says so.
- Open Diagnostics. The call trace shows which path the audio takes and whether bytes are actually moving.
- Run your own server. For a team or an organisation we deploy Tysha on your hardware - then nothing has to be taken on trust.
Earlier reviews: 12 September 2026 (25 findings, 19 closed the same day), 13 September 2026 (a review of our own fixes), 15 September 2026 - this report.