Skip to content
WM KeyboardWM Keyboard
Accessibility

Network policy

Every feature that can touch the network, what it sends, and how to keep it off.

The core typing engine (prediction, autocorrect, gesture typing, layouts) has no network code anywhere in it; it works the same with the radio off. A set of optional tools do reach the internet, each one only while you’re actively using it, plus automatic backup on a timer if you set that up. This page is the complete list of what goes where.

The Tools screen: every tool has its own Enabled switch, on by default.

The Tools screen: every tool has its own Enabled switch, on by default.

Every network-touching tool makes a plain HttpURLConnection request: there’s no analytics SDK, no ad network, and no background sync sitting underneath any of this.

ToolEndpointSendsFires when
Translatetranslate.googleapis.com (no key) or translation.googleapis.com (with a key)the text in the panel, up to 2,500 characters, plus the target languageas you type, about 400ms after you stop, only while the panel is open
GIF searchapi.klipy.com, api.giphy.comyour search text, or nothing for the trending feedimmediately when you open the panel (trending), then live as you type
Sticker searchsame clients as GIF searchsamesame
GIF/sticker — reporting a resultnone of the app’s ownnothing: it builds a mail draft naming the provider, your search term, and the result’s id and URLonly when you tap Report in the long-press menu, and only your mail app sends it
Web searchapi.search.brave.comyour search queryonly when you submit a search, never as you type
Image searchapi.search.brave.comyour search querysame (submit only)
Dictionaryapi.dictionaryapi.devone English word: your selection, or the word at the cursoron panel open, if “Look up the word at the cursor” is on (the default); also on manual search
Wikipediawikipedia.orgyour search text or an article titleonly when you search or open an article, never on panel open
Currency converteropen.er-api.com, falling back to frankfurter.app; the source is yours to pick, and cdn.jsdelivr.net and api.coinbase.com are the other twonothing identifying: it fetches the whole rate table, converted locallyon panel open, or the first time a smart chip sees an amount; cached for hours, not fetched per conversion
Cryptocurrency pricesapi.coinbase.com, falling back to cdn.jsdelivr.net; api.coingecko.com is the other choicenothing identifying: it fetches prices for the coins you have turned on, converted locallyonly when you type a coin amount or select a coin on the panel, never on a plain panel open; cached for a few minutes
Weatherapi.open-meteo.com, geocoding-api.open-meteo.comthe location you typed or searched, or nothing beyond a saved lat/longon panel open, cached for a while; geocoding only fires while you’re editing the location
AI — cloud providerthe provider you picked, on its own API: Anthropic, OpenAI, Gemini, Grok (xAI) or DeepSeekthe text you ran the action on, plus a system promptonly when you tap an action, never in the background
AI — any other OpenAI-compatible servicewhatever address you type in, for instance OpenRouter, Groq, Together or Mistralsamesame
AI — self-hosted (Ollama/LM Studio)a server address you enter on your own networksamesame, over plain HTTP
AI — on-device Full edition onlynonenothing leaves the phonenever: this provider has no network path at all
AI — reporting a resultnone of the app’s ownnothing: it builds a mail draft and hands it to your mail apponly when you tap Report, and only your mail app sends it
Clipboard link previewswhatever URL you copieda GET request to that pageoff by default; when on, right after you copy a new link
QR scan link previews Full edition onlywhatever URL a scanned code containsa GET request to that pageoff by default; when on, right after a QR code decodes to a URL
Voice typing (system recognizer)Android’s platform speech service (not WM Keyboard’s own code)your speech audiowhenever the on-device model for that language isn’t installed: always, below Android 12
Voice typing (Whisper) Full edition onlynonenothing leaves the phone during dictationnever: fully offline once the model is downloaded

The AI panel’s Report button is the one row that quotes your own text without any network of its own: it opens a draft in your mail app holding the generation and the text it ran on, and you read and send it (or don’t). See Reporting a result.

A few of these are worth calling out specifically. GIF and sticker search fetch a trending feed the instant you open the panel, before you’ve typed anything; see GIFs for that behavior in full. Currency and weather are the two tools that touch the network without you typing a query first, but neither sends anything you typed: currency pulls a public rate table and converts locally, and weather sends only the location you already saved or searched. Voice typing’s network path isn’t literally WM Keyboard’s own HTTP code (it’s Android’s SpeechRecognizer, used transparently as a fallback), but audio still leaves the device that way; see Voice typing for the full breakdown, or Offline voice (Whisper) for the fully on-device alternative.

Photo backgrounds are not a toolbox tool but they do reach the network, so they belong in this list. Opening the picker and typing a word sends that word, plus the subject, color and orientation filters, to Unsplash and Pexels; nothing else about you goes with it. Thumbnails load from each service’s own servers rather than being copied through anything of ours, which is how a photographer is credited with the view. Choosing a photo downloads that one file at keyboard size, and tells Unsplash once that it was taken, which is how its download counts stay honest. A rotating background is the one part that fetches without you watching: it tops up a small set of photos as the keyboard closes, never while you type, and skips that entirely while the device is locked, under power saving, on mobile data unless you allow it, and when High contrast keys is on. See Online photos and rotation.

Everything else in the toolbox is offline by design: OCR, QR/barcode scanning, document scanning, the calculator, unit converter, symbols picker, password generator, QR code generation, grammar and spell-check, the camera tool, and every calendar/alt-calendar/qibla/moon-phase/solar-time feature. See Scanner and Utility tools for their own confirmations of that.

AI tool settings: a self-hosted Ollama or LM Studio server address, with the plain-HTTP disclosure below it.

AI tool settings: a self-hosted Ollama or LM Studio server address, with the plain-HTTP disclosure below it.

“Google Translate” is really two different endpoints, and it’s worth being precise about which one you’re using: with no key, WM Keyboard calls translate.googleapis.com, the same unofficial public endpoint browser translate extensions use: fine for personal volumes, but rate-limited and with no uptime guarantee. Add a Cloud Translation API key and it switches to translation.googleapis.com, the official, billed Google Cloud API instead. See Translate for that switch in detail.

The full set of third-party hosts a WM Keyboard install can reach, beyond what’s already in the table above:

  • raw.githubusercontent.com/wasi-master/wmkeyboard-data — the project’s own data repository, source for downloadable dictionaries, emoji keyword packs, and CJK conversion tables. See Downloads below.
  • huggingface.co — source for offline Whisper speech models and on-device AI models. Most are public; a couple of gated on-device models need your own Hugging Face account token.
  • fonts.gstatic.com — Google’s Noto animated emoji. Long-pressing an emoji that has an animated version fetches a small WebP to loop in the popup, and tapping Send fetches the full GIF. Nothing about you goes with either request, and it only happens when Animated emoji is on and you’re in a field that accepts images. See Animated emoji.
  • Your backup destination, if you set one up — Google Drive (www.googleapis.com), Dropbox (www.dropbox.com to sign in, then api.dropbox.com, api.dropboxapi.com and content.dropboxapi.com), OneDrive (login.microsoftonline.com to sign in, then graph.microsoft.com), or the S3, WebDAV or FTP server whose address you typed in yourself. Backups are off until you pick a destination, so none of these are contacted on a fresh install. What travels is your settings file and nothing else; see Backup & restore.
  • Whatever addon repository you add — one is pre-added to the Addons screen on first run (github.com/wasi-master/wmkeyboard-addon-repository), but adding that reference doesn’t fetch anything by itself; see Installing addons for when a repo actually gets contacted.
  • Ollama and LM Studio are whatever address you point them at: there’s no fixed host. Traffic to a self-hosted server is plain HTTP, and the app allows cleartext traffic app-wide to support it, so keep that server on a network you trust. See AI tools for the full setup.

None of these services receive anything from WM Keyboard beyond the single request described for that tool, and there’s no shared analytics identifier tying them together. Automatic backup is the one thing here that fires without you, and only to the destination you chose yourself.

WM KeyboardToolsTranslate

Each tool that needs a key has its own field, all blank by default: Translate’s Cloud Translation key, GIF search’s Klipy and GIPHY keys, Web and Image search’s Brave key, photo backgrounds’ Unsplash and Pexels keys, and the AI tool’s per-provider keys (Anthropic, OpenAI, Gemini, Grok, DeepSeek, and whatever key the OpenAI-compatible service you pointed it at wants) plus its Hugging Face token for gated on-device models. Leave any of them blank and that tool either falls back to a free endpoint (Translate) or shows a “needs an API key” state (GIF, search, AI); see each tool’s own page under Tools for exactly where its field lives.

Every key you enter lives in the same place as the rest of your settings: a plain, unencrypted Android DataStore preferences file, protected by Android’s normal app-sandboxed storage rather than by any extra encryption WM Keyboard adds on top.

Keys are excluded from a manual backup export unless you turn on Include API keys, and from Android’s own device backup path they’re excluded unconditionally; see Secrets stay out by default for the full export mechanics, including the exact warning text the app shows you.

Downloads: dictionaries, models, and addons

Section titled “Downloads: dictionaries, models, and addons”

Every downloadable asset comes over HTTPS, but the integrity check behind it isn’t uniform: don’t assume every download is checksummed just because some are.

DownloadSourceIntegrity checkConfirms before using mobile data?
Dictionaries and wordliststhe project’s GitHub data repositorynone beyond the gzip stream’s own format checkNo
Emoji keyword packssame data repositorynone beyond decode successNo
CJK conversion tables (pinyin, kana, stroke, cangjie, jyutping)same data repositorySHA-256 verified before the file is usedNo
Offline Whisper speech modelsHugging Facenone — a file-size floor onlyYes, around 150 MB — see Offline voice (Whisper)
On-device AI modelsHugging Face, per modelnone — a file-size floor onlyYes, at 500 MB — see AI tools
Addons (themes, icon packs, plugins, sounds, layouts, sticker packs)whichever repository you addedSHA-256 verified when the manifest supplies one — mandatory for plugins specifically, since they run codeNo
Addon repository manifests themselvesthe repository URL you addednone — it’s the trust root, so there’s nothing to check it against; capped at a fixed size insteadNo

Only CJK packs and addons with a declared hash get cryptographic verification. Wordlists, emoji packs, Whisper models, and on-device AI models rely on HTTPS transport integrity plus a basic size check, not a checksum, which is worth knowing if you’re deciding how much to trust a third-party addon repository versus the project’s own data feed. See Installing addons for how that mandatory plugin checksum is enforced.

WM KeyboardTools
  • Per-tool Enabled switch — default on for every tool, including the networked ones. Turning a tool off here (or from the “Enabled” toggle at the top of that tool’s own settings screen) removes it from the toolbar, the toolbox, and its hardware leader-key letter all at once: a disabled tool can’t be opened, so it can’t reach the network.
WM KeyboardToolsPower saving
  • Background network — on by default whenever Power Saving itself is active (Power Saving is off by default). It stops the fetches that happen without you asking for them (clipboard link previews, QR scan link previews, and the dictionary’s look-up-on-selection) while leaving every tool you open by hand, including translate, search, and AI, working normally. See Power saving for the complete list of what else it drops.

There’s no single “airplane mode for the keyboard” switch beyond those two: turning off every networked tool individually, plus Background network for the unsolicited fetches, is the closest equivalent. The typing engine itself needs no switch at all: prediction, autocorrect, gesture typing, and layouts have no network code to disable in the first place.

  • The in-app Privacy screen lists the tools, not the fetches. Its note names translate, weather, web search, image search, GIFs, stickers, dictionary lookup and the AI tools, and says the network is used only at the moment you press one. That covers the deliberate half. It leaves out the things that fetch on their own (currency chips, language data, link previews) and the download screens, which is what this page adds. See Data collection for the same note read from the storage side.
  • AI’s default provider needs a key before it does anything. Claude (Anthropic) is the pre-selected provider chip, but with a blank key, so the tool shows a “needs an API key” state out of the box rather than silently trying a provider that isn’t configured.
  • Currency and weather cache their results rather than fetching on every open (currency for a few hours, coin prices for a few minutes, weather for about fifteen minutes), so most opens after the first don’t touch the network at all.
  • Coin prices are fetched lazily. Cryptocurrency is on by default, but the coin source is only asked when you actually type a coin amount or pick a coin on the panel. If you never do, your keyboard never talks to it.
  • Dictionary and Wikipedia never read your field the way Translate does. Wikipedia and both search tools only ever send what you type into the panel’s own search bar; Dictionary is the one exception, reading the selected or cursor word when auto-lookup is on.
  • Addon repository manifests aren’t fetched proactively. Adding the pre-seeded repository reference on first run doesn’t contact it: a manifest only downloads when you actually open or refresh the Addons screen.
  • Cleartext traffic is allowed app-wide, not scoped to Ollama and LM Studio specifically, which is what makes plain-HTTP requests to a self-hosted AI server possible at all. It doesn’t weaken HTTPS to the services above; every one of them is contacted over HTTPS.

See Data collection for what the keyboard learns from you locally, and Backup & restore for how API keys and the rest of your settings move between devices.