Kotonoha العربية

Kotonoha — Privacy Policy

Last updated: 5 October 2026

Kotonoha is a Japanese-language learning app. It is built to work without an account: every learning feature runs on your device, and your study progress never leaves it unless you choose to back it up.

You may create an optional account. If you do, a sign-in record is stored by Google Firebase Authentication in a project the developer controls. That record is an identity only — it holds no study data. See "Optional account" below.

This policy describes exactly what the app does. Every statement below corresponds to code in the app.


The short version


What is stored on your device

Everything the app knows about you lives on your phone:

You can erase all of it at any time by uninstalling the app or clearing its data in Android settings.

Optional: creating an account

You never need one. Every learning feature works signed out, and the app does not ask you to sign in to start.

If you choose to create one — with Google, or with an email address and password — the record is held by Google Firebase Authentication in a Cloud project the developer controls. That record contains:

It contains no study data. Your words, kanji, review schedule, reading history and notes are not uploaded with it, are not readable by the developer, and are not affected by signing in or out. Sign-in attaches a name to the app; it does not move your learning anywhere.

If you register with an email address, Firebase sends a confirmation message to it. You are not required to confirm before using the app.

Deleting your account. Profile → Account → Delete account removes the Firebase record permanently, and everything stored against it on our server — your support requests, any gift-code records and the notification tokens registered for your devices. Your study progress stays on the device, because it was never part of the account. You can also write to the address at the bottom of this policy and ask for it to be deleted for you.

If we cannot reach our server at that moment, the deletion is stopped and you are asked to try again rather than half-completed. That is deliberate: your account is the only thing that proves those records are yours, so it must not be removed while they still exist.

Optional: support requests

If you are signed in, you can open a support request from Profile → Contact — a question, a suggestion, or a problem. We reply inside the app, and the conversation stays on the same request rather than becoming a new one.

We store what you write, the app version and language, and the account id it was filed under. We do not store your email address with it, and the request is never shared with anyone else — it reaches our own server and stops there.

Your request is read by the developer through a private support console, which is reachable only with a credential and shows the request without your email address attached.

Without an account, the "Report a bug" option still writes an email in your own mail app, exactly as before. We have no way to reply inside the app to someone we cannot identify.

Optional: notifications when we reply

We can notify you when we answer a support request. On Android 13 and later, Android shows the notification only if you allow it: the app asks in the last step of first-launch setup, after explaining why, and may ask again after you send a request. On earlier versions there is no prompt, and notifications show unless you turn them off in Android settings. If you refuse, everything else still works — the app simply shows the answer the next time you open the conversation.

To send it, we store a notification token for your device against your account. It is issued by Google's Firebase Cloud Messaging and identifies the installation, not you: it cannot be read by other apps, and it tells us nothing about your phone beyond where to deliver a message. With it the app sends a random identifier for this installation — created on your device, not derived from your phone, and separate from the install label above — and your app language, so that a new token replaces the old one rather than adding another.

The token is registered whenever you are signed in, including if you refused the permission. Firebase provides the token to the app on every launch, signed in or not; the app sends it to us as soon as it has an account to attach it to — at launch if you are already signed in, otherwise the moment you sign in — whether or not you have answered the prompt. Refusing stops the notification from being shown, because Android drops it; it does not stop the token from existing. We would rather say so than describe a consent gate the app does not have.

The row is deleted when you delete your account, and in any case automatically sixty days after the app last registered it, which it tries to do each time it starts while you are signed in. When you sign out, the app asks us to delete it too, but only once, with no retry — if it does not reach us, the sixty-day sweep is what guarantees it goes.

The notification says only that a reply arrived, and the subject you gave your own request. It never contains our answer. A notification is read on a lock screen, in public, by whoever is holding the phone — so the reply itself stays inside the app, behind your account.

Uninstalling the app does not reach our server. The token stops working, and its row is removed the next time a notification to it fails, or by the sixty-day sweep, whichever comes first.

Optional: sending crash and error reports

If Kotonoha closes unexpectedly, or recovers from an error such as a failed answer save, it stores a technical report on your device. It records the error, where in the code it happened, the app version and your Android version. Nothing is sent at that moment.

If you have not chosen a standing preference, the next time you open the app we ask whether to send the saved reports. You may send them once, choose Send automatically for future reports, or decline. You can later change that choice at Profile → Error reports. Choosing not to send deletes the saved reports.

Before a report is stored, the app removes Japanese, Chinese, Korean, Arabic, Hebrew and Cyrillic text; values in database statements; file paths; file names ending in a book, deck or archive extension; links; and e-mail addresses. Text in other alphabets, such as a book title in English, can remain. If you choose to send, the report goes to our own server with no account id, no e-mail address, no device identifier and no advertising ID attached.

How long we keep things

WhatHow long
Crash and error reports90 days
Files you attach, over 1 MB7 days
Files you attach, 1 MB or under90 days
Support requests and repliesUntil you delete your account
Notification token for your device60 days after the app last registered it
Purchase and subscription recordsUp to a year after a subscription ends

Deleting your account removes what is stored against it straight away, without waiting for any of these.

Subscription state is the exception, because it is not stored against your account. It is keyed by a one-way hash of the Google Play purchase token — never the token itself, never a payment detail, and with no account id on the row — so deleting your Kotonoha account does not reach it, and does not cancel the subscription. Cancel that in the Play Store.

Optional: backing up to your own Google Drive

If — and only if — you choose to turn on cloud backup, the app asks you to sign in with Google.

Sync between your devices

With cloud backup on, the app also keeps your progress in step across your own devices, using the same hidden folder and nothing else:

The last step of first-launch setup asks you to sign in with Google so that backup and sync are on from the start. It is optional, and the app tells you what you give up by skipping it: without it, your progress is lost with the phone.

You can disconnect at any time from Profile → Cloud backup. Signing out revokes the app's access.

Reporting a bug

If you use Profile → Contact → "Report a bug", the app builds a report — your description, plus your app version, phone model, Android version and the screen you were on — and optionally a screenshot, then opens it as a draft in your own email app, addressed to kotonohajapaneseapp@gmail.com.

The app does not send it. You see the address, the message and the attachment, and you press send. If you cancel, nothing leaves your device. The report contains nothing you cannot read for yourself before sending — it is your own email.

What the app connects to

Kotonoha is offline-first, but some optional features fetch data. As with any app that makes a network request, the service you connect to can see your IP address.

ConnectionWhenWhy
fonts.gstatic.com (Google)On demandSome display typefaces are downloaded rather than bundled, then cached on your device permanently. Google receives your IP address and User-Agent.
Google ML KitIf you use Arabic⇄English gloss translationDownloads a translation model. That translation runs on your device.
jisho.orgWhen a word lookup falls through to the online dictionaryThe word you looked up is sent to jisho.org. Nothing else about you is attached to it.
api.mymemory.translated.netWhen a translation cannot be done on your deviceThe text being translated is sent to MyMemory. Avoid translating anything you would not paste into a public web form.
github.com releasesIf you download a voice pack, image pack, or the manga-OCR modelFetches the optional content packs.
www.edrdg.orgIf you download an optional dictionaryFetches the JMdict / KANJIDIC2 / JMnedict files.
Google Sign-In / Google DriveOnly if you enable cloud backupSee above.
Google AdMobOnly when you tap "watch to earn" for a rewarded adSee Advertising below.
Our own server (a Cloudflare Worker)Each time the app opens; and when you use support, gift codes, a subscription or crash reportsOn opening, the app only asks it for the current time; nothing about you is sent beyond what any connection reveals, such as your IP address. The rest is described above.
Firebase Authentication (Google)Only if you create or use an accountSee Optional: creating an account above.
Firebase Cloud Messaging (Google)Every launch: Google issues the token to the app. We store it only while you are signed in. The permission governs whether a notification is shown, not whether the token existsDelivers "we replied". Google routes the message; it carries the subject you wrote, never our answer.

Advertising

Kotonoha shows rewarded ads on an opt-in basis only, through Google AdMob. An ad appears when — and only when — you tap a "watch to earn" button to receive a bonus (for example, in-app points or an unlock). There are no banner ads, no pop-up ads, and never an ad inside the manga or book readers.

This is the one place the app shares data with a third party for a purpose other than a feature you directly asked for — and it happens only after you choose to watch an ad.

Children

Kotonoha is a language-learning app suitable for general audiences. It does not knowingly collect personal information from anyone, including children.

Changes

If this policy changes, the date at the top changes with it, and the current version is always at this URL.

Contact

Questions about this policy: kotonohajapaneseapp@gmail.com