Where it came from
The question behind Tratto was asked in 2020, as a university data science project: keep a food and bowel diary for 68 days, then work out which foods were doing the damage. The answer that came back was that the diary could not tell, and the reason was in the data rather than in the arithmetic. Most days were only half recorded, and the foods worth examining had never been eaten often enough or separately enough to be told apart.
That is the idea Tratto is built on. A diary is worth keeping, and it is worth keeping well, and the moment it starts naming culprits it is making things up. So this one records properly and says what it can and cannot see.
What it does
Three taps, and you are done
Open, pick the form from seven drawings, save. No typing, no scrolling through a form, no login screen between you and the thing you came to record. It is designed for one hand in a bathroom, because that is where it gets used.
Meals in plain language
Type or dictate what you ate the way you would say it out loud. Tratto matches it against a vocabulary of 142 ingredients, in English or Italian, and shows you what it recognised so you can correct it. Nothing is guessed silently.
It notices what you did not write down
A bathroom visit is memorable. A breakfast identical to every other breakfast is not, and that is exactly the gap that ruins a diary. Tratto asks about the slots you skipped and takes "nothing" for an answer, so an empty morning means empty rather than unknown.
It shows you your own numbers
How complete your diary is. How your forms are distributed. How your pain has moved. How much your numbers wander on their own, and how far apart two days have to be before they stop resembling each other. Counts and summaries, on your data.
A document to bring to an appointment
One page: the period covered, how many bowel movements, how the forms fell out, how pain went, and a note saying which scale was used. Raw record, no conclusions, nothing for a clinician to have to unpick.
When you want an answer, it runs a real test
Phase two stops observing and starts arranging: one ingredient against one comparison, alternating blocks of days, the order randomised, and the plan frozen before you begin. It is the only setup that can produce evidence rather than a hunch.
And it tells you when it is not worth it
Before you commit two months to a comparison, Tratto shows you the one number that decides whether the experiment can work at all.
With six pairs of blocks and a two-sided hypothesis, the test needs six agreements out of six. So even for a food that genuinely affects you in eight pairs out of ten, the chance of reaching a significant result is 26%. With five pairs or fewer, nothing can be significant. Nine is the first size that tolerates one disagreement.
Most apps in this category would not show you that, because it talks you out of using the feature. It is here because a two month experiment that could not have succeeded is worse than no experiment.
What Tratto never shows is a ranking of foods. No shortlist, no suspects tab, no p-value beside an ingredient. On the numbers a personal diary produces, that answer cannot be told apart from chance, and an app that names a culprit anyway is confidently wrong.
Who it is for
Before a gastroenterology appointment, where the clinician needs what happened rather than what you remember. Inside an elimination and reintroduction plan run with a dietitian, where the diary is the record of the protocol. When the trigger is already known and what matters is adherence. Before and after a treatment, where the point is the change.
In all of those a faithful record is the whole job, and the value is the timestamp: Stone et al., BMJ 2002 compared a paper diary against an electronic one that stamped every entry, and found reported adherence to paper at 90% against actual adherence of 11%. The electronic version reached 94%.
The details that decide it
Everything below is checkable in the source, and the parts that come from someone else's rules are cited on the notes page.
Privacy: it is a local app, in the strict sense
- Your diary lives in a store on your device. There is no server, because there is nothing on the other end to have one.
- No account. Nothing to sign up for, nothing to sign in to, no email address collected.
- No telemetry, no analytics, no crash reporting, no advertising identifier. The app makes no network request of its own.
- No iCloud sync, and that is deliberate twice over: App Store rules forbid keeping personal health data in iCloud, and syncing is the step where a local app stops being one. Moving your diary between your Mac and your phone is an explicit file that you send yourself.
- Meal text is matched on your device. Where the system's on-device model helps, it is a suggester whose output is checked by deterministic code, and it never leaves the machine.
- This website sets no cookie, loads no font, embeds no analytics and makes no third-party request.
- The app is not published as a web page on this domain, on purpose. A health diary in browser storage on an origin shared with other projects is readable by any other page on that origin. That was a real option and it was rejected.
Integrations: files that anyone can open, and honesty about the rest
Export gives you a FHIR R4 bundle, three CSV files, the complete JSON, and on macOS and iOS a one-page PDF. Import takes the JSON back. Coding for interoperability is on a switch: a local coding is always present, and the external ones (SNOMED CT, LOINC) are optional and off by default, because SNOMED is not free in Italy and an archive should not become unexportable because of a licence.
What Tratto does not do is claim to write into Apple Health or Health Connect, because neither of them will take this. Verified against each platform's own list of types:
| What | Apple Health | Health Connect |
|---|---|---|
| Bowel movements and stool form | no type | no type |
| Bloating, abdominal pain | severity only | no type |
| Diarrhea and constipation flags | presence only | no type |
| A custom type of our own | not allowed | not allowed |
Health Connect has 42 record types and the set is closed. Apple Health has seven gastrointestinal symptom types, all on a four-level severity enum, so a 0 to 10 score projects onto it and never comes back. Reading sleep and activity from those platforms is the direction that would work, and it is not in this version.
Scales: which ones, and why they are ours
- Stool form, seven levels, with drawings and labels written from scratch. The best known seven-level scale is a copyrighted work whose ownership is genuinely disputed between three organisations, so no proprietary instrument is used and none is named in the interface.
- Pain, 0 to 10, worst in the last 24 hours, asked once a day. This is the primary outcome, it is the endpoint clinical trials use, and it carries a free public code, LOINC 72514-3.
- Meal slots rather than free timestamps, so a missing breakfast is a question the app can ask instead of a hole nobody notices.
- Every export states which scale produced the numbers, so nobody reading it later mistakes it for a scale it is not.
- No published clinical index is computed. Calculating one would push the app across the line drawn by MDCG 2019-11, where recording, storing, searching, exporting and charting stay below the medical device threshold.
Price: free, and here is what that costs you
| Platform | Price | What you should know |
|---|---|---|
| Windows | Free | Portable executable, no installer. Unsigned, so SmartScreen will warn you once. |
| Android | Free | APK. You will need to allow installation from whichever app you download it with. |
| macOS and iOS | Free | Built from source. Not on the App Store, and on iOS without a paid Apple developer account a self-built app must be reinstalled every seven days. |
| Subscription | None | There is no paid tier, no trial and no feature behind a purchase. |
| Your data | Yours | It is not the product. There is no one to sell it to and no channel to sell it through. |
Windows is unsigned because signing would buy nothing: since 2024 an EV certificate no longer skips SmartScreen, and the managed signing service is closed to individual developers outside the United States and Canada. Saying so is cheaper than pretending.
The same numbers on every platform
The Apple version is written in Swift, the Windows and Android versions share a TypeScript core, and the same exact statistics therefore exist twice. Two implementations drift apart quietly, so neither is trusted alone: the Swift test suite writes a file of golden numbers and the TypeScript suite has to reproduce it digit for digit, tied ranks and the 64-bit block shuffle included. A number computed on your phone is the number computed on your laptop.
Get it
Windows
Portable build and a zip.
Android
APK, signed with a stable key so updates install over the old version.
macOS & iOS
SwiftUI and SwiftData. Build it from source.