KOI · Privacy

Privacy Policy

This policy describes what KOI Keyboard actually does with data. Every point matches the implementation in the app and the backend; none of it is filled-in boilerplate.

Effective date: 5 August 2026

The one-minute version

Each point is set out in full below.

What we do not collect

This section matters more than “what we collect”, so it comes first. None of the following can be found anywhere in KOI's code:

What you type

KOI's input engine runs entirely on your device. Decomposition, candidate generation, ranking, learning — all of it is computed locally, and that part of the code has no networking capability whatsoever.

The characters you choose teach KOI your habits, so the same code ranks them higher next time. This learning history is stored in the app's shared container group.com.rainsday.koikeyboard, which only KOI can read.

Deleting KOI removes this local data along with it.

The “Full Access” permission

iOS rules: a keyboard extension without “Allow Full Access” has no networking capability at all. KOI needs the permission for three things:

Without the permission, KOI's five input methods, candidates, learning, handwriting, symbols and cursor controls all keep working. The three items above are the only things you lose.

Granting the permission does not itself send any data. Data is sent only when you use the relevant feature.

What KOI Agent actually sends

When you open KOI Agent and send a request, the following goes to KOI's servers (Google Cloud Functions, in asia-east1):

Not sent: screenshots (KOI cannot take them), your clipboard contents (unless you press Paste yourself), your contacts, or content from other apps.

Server logs keep request-level data only: request id, path, status code, duration, which model handled it, and processing stage. The instruction text and the surrounding text are never written to logs.

Third-party services

These are the third parties KOI actually touches. Note the difference between “on the device” and “over the network”.

How these providers retain and process data on their own systems is governed by their respective privacy policies.
ServicePurposeWhere data goes
Google ML Kit Digital InkHandwriting recognitionRuns on the device; the model is built into the app and no ink is sent out
Firebase App Check (via Apple DeviceCheck)Preventing abuse of the serversA device attestation token
Firebase AuthenticationOptional Sign in with AppleSee “Accounts and identifiers”
Firebase Cloud Functions / FirestoreAI request handling, Credit accountingSee “KOI Agent” and “Purchases”
RevenueCatSubscription and purchase stateSee “Purchases”
OpenRouterRouting AI requests to model providersYour instruction and the surrounding text
AnthropicText models (Claude)Your instruction and the surrounding text
OpenAIImage generation modelsYour image instruction
Brave SearchReference lookups during image generationSearch terms produced by the server
AppleApp Store, Sign in with Apple, DeviceCheck, iCloudGoverned by Apple's privacy policy

iCloud sync

Cross-device sync is off by default. Before it is turned on, KOI asks you to confirm the iCloud account you are currently signed in to.

Synced data is written to your own private iCloud database (container iCloud.com.rainsday.koikeyboard) using CloudKit encrypted fields — the key is tied to your iCloud Keychain, so neither Apple nor the KOI developer can read the contents.

Sync is triggered manually and never runs in the background. Two settings never sync at all: the sync switch itself, and the input diagnostics switch.

Accounts and identifiers

Installation identifier: KOI generates a random UUID to identify an installation. It is not a device identifier, it does not track you across apps, and reinstalling the app replaces it. On arrival the server hashes it with SHA-256 and a secret pepper, and only the hash is used, for rate limiting and for tying purchases to an installation.

Sign in with Apple: optional, and needed only if you want purchase records to carry across devices. The only scope KOI requests from Apple is your name; it does not request an email address. The account record on the server holds a random scoped hash and a timestamp — no name, no email.

The backend database (Firestore) rejects all direct client reads and writes; every write goes through server code.

Purchases

All payments are handled by Apple. KOI never sees your card, your payment method or your billing address.

Purchase state is managed through RevenueCat, which sends purchase events to KOI's servers containing: the purchaser identifier, product id, transaction id, original transaction id, purchase time, expiry time, period type, cancellation reason, store, and environment (production or sandbox).

This data is used to determine whether you have Plus and to work out your Credit balance. It is not used for anything else.

Retention

Children

KOI is not designed for children under 13 and does not knowingly collect their personal data. If you believe a child has given us personal data, contact us and we will delete it.

Your choices and rights

Changes to this policy

If the way KOI handles data changes, this page is updated and the effective date at the top changes with it. For significant changes we will tell you in the app.

Contact