# Privacy policy (Google Play edition)

> The formal policy for the Google Play and GitHub builds: what WM Keyboard collects (nothing, beyond a name a tipper asks to have listed), what stays on your device, what optional tools send where, and what Google's own libraries report.

URL: https://wmkeyboard.pages.dev/privacy/policy/
Section: Privacy & security

**Effective 20 October 2026.** This policy covers the WM Keyboard Android app
(`com.wasimaster.wmkeyboard`) and this documentation site. WM Keyboard is
written and published by Wasi Master, an individual developer.

The F-Droid build and the others are not the same app underneath, so they get
one policy each rather than one policy with a page of footnotes.

This page is every build but F-Droid's: the one on Google Play, and the
standard and offline APKs on the GitHub releases page. It includes handwriting, OCR, QR and document
scanning, sticker background removal, grammar checking, offline Whisper
dictation and on-device AI. The handwriting, scanning and background-removal
features run on Google's ML Kit, which reports its own diagnostics to Google.

If you installed from F-Droid, you have a build that ships none of the ML
Kit features, and no ML Kit, Play library or Google sign-in code at all. Read
[Privacy policy (F-Droid edition)](https://wmkeyboard.pages.dev/privacy/policy-fdroid/) instead. The app
tells you which one you have under About: the version line says F-Droid on
that one.

The rest of this section explains the same subject in more depth and with
screenshots. This page is the short, formal version, the one the Play listing
links to.

## The summary

WM Keyboard collects nothing. There is no account, no advertising, no
tracking, and no analytics or crash reporting that this project receives. What
you type is processed on your device and stays there. The one thing the app
ever sends to a server of this project is a name you typed yourself, after you
chose to tip and asked to be listed, with a message if you wrote one; see
[Tips](#tips).

One caveat: some features are built on
Google's ML Kit and on Google Play services, and those libraries send their
own diagnostics to Google when you use the features they power. That is
Google's collection, not this project's, and it is spelled out in full under
[Google components inside the app](#google-components-inside-the-app).

The app does not sell, rent or share personal information. Apart from a
tipper's chosen name, it does not receive any in the first place.

## What stays on your device

The keyboard writes several things to its own private app storage. None of it
is transmitted anywhere by the app.

- **Learned words and word pairs.** Words you use that were not already in a
  dictionary, plus the bigrams, trigrams and skip-grams (the word two or three back paired with the one that followed) used to predict and rank the next word.
- **Clipboard history**, if you have the clipboard tool enabled, along with
  anything you pinned.
- **Typing statistics**, such as counts of keystrokes and words, if you have
  statistics enabled.
- **Your settings**, themes, layouts, snippets and personal dictionary
  entries.
- **Downloaded data**, such as dictionaries, emoji keyword packs and voice
  models.

You can delete all of it. Learned data is one confirmed tap on the app's
Privacy screen, and clipboard history and typing statistics each have a clear
action of their own on the storage screen under About. Uninstalling removes
everything the app ever wrote.

Password fields, and any field an app marks as sensitive, are excluded from
learning, suggestions and clipboard capture automatically. Incognito mode
pauses learning and clipboard history everywhere for as long as it is on.
Suggestions keep working, because they are read out of data that is already
there rather than written to it.

## What leaves your device, and only when you ask

Typing itself never uses the network. A set of optional tools do, each one
only while you are actively using it:

| Tool | What it sends | To |
|---|---|---|
| Translate | the text in the panel. Nothing, when the engine is set to On device | Google Cloud Translation |
| Web and image search | your query | Brave Search, or Tavily if you add a Tavily key |
| GIF and sticker search | your query | KLIPY, GIPHY, and the Internet Archive's GifCities if you turn it on |
| Dictionary | one word | `kaikki.org`, `en.wiktionary.org`, `api.dictionaryapi.dev`, `api.urbandictionary.com` if you turn it on, in the order you set |
| Synonyms, from the word menu | one word | `api.datamuse.com`, `kaikki.org`, `api.dictionaryapi.dev`, in the order you set |
| Encyclopedia | your query | Wikipedia |
| Weather | a location you entered | Open-Meteo |
| Currency and crypto rates | nothing identifying | `open.er-api.com`, `api.coinbase.com` and their fallbacks |
| Photo backgrounds | your search terms | Unsplash, Pexels |
| AI writing tools | the text you ran an action on | the provider you chose, using your own API key |
| AI chat's Deep research and Summarize | the search queries the model planned, and an ordinary request for each page read; the pages' text then goes to your AI provider with your question | your web search provider, and the websites of the pages read |
| Grammar check, with LanguageTool switched on | the text in the field, its language, and your LanguageTool username and key if you set them. Never a password field or text typed in incognito. Nothing at all with Harper, the default | `api.languagetool.org` (LanguageTool's public server), `api.languagetoolplus.com` with a Premium account, or a LanguageTool server you run yourself |
| Sticker generator, with an online engine switched on | your prompt in English with the style's words, the seed, the picture size and count, and your key for that service. Nothing at all with On this phone, the default | the engine you picked: `image.pollinations.ai` or `gen.pollinations.ai`, `aihorde.net`, `api.openai.com`, `generativelanguage.googleapis.com`, `api.x.ai`, `api.stability.ai`, `api.bfl.ai`, `external.api.recraft.ai`, `api.replicate.com`, `fal.run`, `api.together.ai`, `router.huggingface.co`, `api.cloudflare.com`, or a Stable Diffusion, ComfyUI or OpenAI-compatible server you entered; the pictures are fetched back from that service's storage |
| Voice typing | your speech audio | Android's own speech service, unless you use the offline Whisper option |
| Language and model downloads | nothing about you, except that a gated on-device AI model (the two Gemma 3 builds) is fetched with the Hugging Face token you entered for it | GitHub, Hugging Face, and Mozilla for the Firefox Translations models |

Four of these can fire without you opening a tool under default settings.
They are the weather smart chip, the currency smart chip, automatic language
data downloads, and the dictionary tool's look-up-at-cursor. Each has its own
switch. [Network policy](https://wmkeyboard.pages.dev/privacy/network/)
documents every one of these in full, including what is cached and for how
long, and [Permissions](https://wmkeyboard.pages.dev/privacy/permissions/) covers what each Android
permission is for.

When you use one of these tools, your data is handled by that service under
its own privacy policy, not this one. The app ships no key for the AI
providers: those only work if you supply your own.

## Tips

The Google Play build can take a tip through Google Play billing, under
About › Supporters. Google Play handles the payment, under
[Google's privacy policy](https://policies.google.com/privacy). This project
never sees your card, your Google account or your email address.

If you type a name to be listed, then once Google Play confirms the payment
the app sends that name, the message you typed (if any) and the purchase
receipt (the product and Google Play's purchase token) to
`wmkeyboard.pages.dev/api/play-tip`. The site asks Google whether the receipt
is a real, paid order and, if it is, adds the name, the message, the word
"Tip", the tier's list price in US dollars and the date to the public
[Supporters](https://wmkeyboard.pages.dev/start/supporters/) page. The app's own list shows the name only.
With **Stay anonymous** on, or the name left empty, nothing is sent.
Until the site has answered, the app keeps the name and receipt on your device
and tries again when you next open Supporters, for up to 30 days. To have a
name removed, email the address under [Contact](#contact).

## Backups

Backups are optional and written to the destination you choose. That can be
local storage, a cloud drive you connect, a WebDAV server, an S3-compatible
bucket, an SFTP, SMB or FTP server you run, a Git repository you own, or a
folder in your own mail account. By default the file is plain JSON. Turn on
a backup passphrase and it is encrypted with AES-GCM under a PBKDF2-HMAC-SHA512
key. Nothing is uploaded anywhere by default and no copy is sent to the
developer. See [Backup and restore](https://wmkeyboard.pages.dev/privacy/backup/).

## Children

WM Keyboard is not directed at children and collects no data from anyone,
including children. The only thing ever received is the name and message a
tipper chose to have listed, described under [Tips](#tips), and both are
removed on request.

## Google components inside the app

Three Google components the app uses report to Google on their own,
without going through any code here. They cannot see what you type, and this
project receives nothing from them. None of them can be switched off from
inside the app either, so your only choice is whether to use the feature.

- **ML Kit** powers handwriting input, OCR, QR and barcode scanning, the
  document scanner, sticker background removal and on-device translation, in
  every build but F-Droid's.
  Google
  [states](https://developers.google.com/ml-kit/android-data-disclosure) that
  its SDK sends device information (make, model, OS build, available ML
  accelerators), this app's package name and version, a per-installation
  identifier, timing and error information, and the size and settings of what
  was processed. That happens whenever you use one of those features. Google
  describes it as diagnostics and usage analytics, encrypted in transit and
  not passed to third parties. The content of the image, ink or document is
  not part of it.
- **Downloadable fonts.** Some scripts' default keyboard font, and every
  Google font in the theme editor, are fetched by Google Play services' font
  provider. It receives the font name and this app's package name.
- **Google Play libraries** in the Play Store build check for app updates,
  fetch the on-device AI runtime when you first use it, and take a tip
  through Google Play billing if you choose to leave one.

Connecting Google Drive as a backup destination adds a Google sign-in and
ordinary Drive API calls, and only if you connect it.

The first and the third are specific to this edition: the F-Droid build has no
ML Kit, no Play libraries and no Google sign-in compiled into it at all.
Downloadable fonts are the exception, since that request goes to a system
provider rather than to code the app bundles, so the F-Droid build makes it too.
See [Privacy policy (F-Droid edition)](https://wmkeyboard.pages.dev/privacy/policy-fdroid/).

## Other third-party components

The app bundles open-source libraries and data (dictionaries, emoji
annotations, fonts). None of them phone home. The full list, with licences,
is in the app under About, Licences and attributions.

## Changes

If this policy changes, the effective date at the top changes with it, and the
history of every edit is public in the
[repository](https://github.com/wasi-master/wmkeyboard/commits/main/docs/src/content/docs/privacy/policy.mdx).

## Contact

Questions about this policy: `arianmollik323@gmail.com`, or open an issue at
[github.com/wasi-master/wmkeyboard/issues](https://github.com/wasi-master/wmkeyboard/issues).
