Last updated 2 September 2026
What Cairn reads, what it keeps and what it sends.
Cairn reads the text on your screen. That deserves a plain answer rather than a page of hedging, so this one is written to be read.
The short version. Cairn reads on-screen text only while tap mode is on, and only to work out which word you touched. Dictionary lookups, readings, audio and offline translation all happen on your phone and send nothing. When you ask for an explanation, the word and the sentence around it go to our server and on to Google’s Gemini API, and nothing else does. There are no ads, no advertising identifiers and no third-party analytics in the app.
Who this is from
Cairn is an Android app published as fyi.cairnapp. In this policy, “we” means the
people who make it and “you” means the person using it. For anything here, write to
[email protected].
The accessibility permission
Cairn uses Android’s accessibility service to read the text your screen is already drawing. This is what lets it work in any app rather than only in apps that offer a translation. Android requires you to grant it by hand in Settings, and you can revoke it there at any time.
- The service reads screen text only while tap mode is armed. When tap mode is off, Cairn is not reading anything.
- What it reads is used to find the word under your finger and the sentence it sits in. It is not written to a log and not sent anywhere except as described below.
- Cairn does not read what you type. The service does not request the key-event capability at all, so it cannot see keystrokes, and it cannot tap, swipe or act on your behalf either: the gesture capability is declared off.
- Cairn takes no screenshots and records no video. Reading text inside images will one day need Android’s screen-capture permission, which asks you separately every session; that feature is not in the app yet.
What stays on your phone
Most of Cairn never touches the network. All of the following run entirely on the device, work with the phone in aeroplane mode, and send nothing anywhere:
- Splitting a line of text into words
- Dictionary lookups, from the language pack you downloaded
- Pinyin, furigana and pronunciation
- Spoken audio, through Android’s own text-to-speech
- Offline translation, through Google ML Kit, after the model has downloaded once
- Your saved words and history, held in a database on the phone
What leaves your phone
When you ask for an explanation
Cairn sends the word you tapped, the sentence it appeared in, the language you are learning and your explanation-length preference to our server. Our server forwards the word and the sentence to Google’s Gemini API, which writes the explanation. Your account identifier is not sent to Google.
Explanations are cached and shared between everyone using Cairn. The cache is keyed by a hash of the word, the sentence and the language, and carries no account identifier, so a cached answer cannot be traced back to whoever first asked for it. If your question has already been asked, the answer comes back from the cache and never reaches Google at all.
When your words sync
Saved words and history are copied to your account so they survive a new phone. Each row holds the word, its dictionary form, its reading, its meaning, the sentence you found it in, the language, the package name of the app you were in, and the time. The app name is what lets you look back through your words by where you saw them.
Your settings sync too: your target language, immersion mode and which parts of a card you show.
Your account
Cairn creates an anonymous account the first time you open it, so that nobody has to sign up to look up a word. That account is a random identifier and holds no personal detail.
Signing in is optional. It raises the weekly allowance and gets your words onto a second device. If you sign in with email we store the address. If you sign in with Google we receive the account identifier and address Google gives us. Authentication is handled by Supabase, which runs our database and account system on our behalf.
If you subscribe
Payment goes through Google Play. We never see your card, and Google tells us only whether a subscription is active. Google’s handling of the payment is covered by their own privacy policy.
Who else touches it
- Supabase hosts the database, the accounts and the server functions, on infrastructure in Singapore.
- Google (Gemini API) writes the explanations, from the word and the sentence.
- Google (ML Kit) serves the offline translation models, which are downloaded once and then used on the device.
- Google Play handles distribution and, if you subscribe, billing.
That is the entire list. There is no advertising network, no analytics service, no crash reporter and no attribution provider in the app, and no data is sold or shared for advertising.
How long anything is kept
- History is deleted after seven days, automatically.
- Saved words stay until you unsave them or delete your account.
- The shared explanation cache holds no account identifier and is evicted when an entry stops being used.
- Your account stays until you ask us to delete it.
Deleting your data
Unsaving a word removes it from the phone and from the server. Clearing history removes it from both. To delete the account and everything attached to it, write to [email protected] from the address you signed in with, or from within the app if you have not signed in, and we will remove it within thirty days.
Uninstalling the app removes everything held on the phone. If you never signed in, the anonymous account is unreachable after that and is deleted on our normal cleanup.
Your rights
Depending on where you live you may have the right to see the data we hold about you, correct it, have it deleted, or object to how it is used. Write to [email protected] and we will answer within thirty days. We rely on your consent for the accessibility permission, which Android makes you grant explicitly, and on the necessity of running the service for everything else.
Children
Cairn is not directed at children under 13 and we do not knowingly collect anything from them. If you believe a child has given us data, write to us and we will remove it.
Security
Everything travels over HTTPS. Rows in the database are readable only by the account they belong to, enforced by the database itself rather than by the app asking nicely. The API key for the explanation model exists only as a secret on the server and is never inside the app.
Changes
If this policy changes in a way that affects what we collect or who receives it, we will say so in the app before the change takes effect. The date at the top of this page is when it was last revised.