A keyboard sees your passwords, your messages, and the questions you would not ask out loud. Suspicion of one is reasonable, and a privacy page is not evidence. Checking is. Every claim below names the file it rests on.
Obadh is on iPhone, iPad and Mac today; Linux, Android, Windows and ChromeOS are coming. A platform is named below only where a file path or a permission differs from one to the next. The answer does not.
It collects nothing about you
There is no account, no sign-in, no email address, no advertising identifier, no analytics SDK, no crash reporter, and no telemetry of any kind. Obadh does not know how many people use it, which is a cost the project accepts.
Apple makes every developer declare what an app collects and what it links to your identity. Every line of that form says none, and it will say none on the next platform that asks.
Everything happens on your device
None of it could send anything if it wanted to. The engine is the same Rust on every platform, and its whole dependency list is a serialization library, a finite-state transducer library, memory mapping and a hash function. The layer above it adds no networking either: not the iOS keyboard extension, not the iOS app, not the macOS input method. No URLSession, no sockets, no third-party SDK that might carry its own, and no HTTP client anywhere in any of it.
Transliteration, autocorrect, next-word suggestions and emoji search all run inside the app on your device, against data files bundled in it: an autocorrect lexicon of 8.8 MB and a next-word model of another 29 MB, both shipped with the download. That is most of why the app is the size it is, and it is why all of it still works in airplane mode.
It reads the word you are typing, then forgets it
Rewriting a word in place as you type it, and correcting one you have moved the cursor back into, both need the text immediately around the cursor; any keyboard that can edit a word reads it. That text is used for the keystroke and then gone. What stays behind is the two things listed below, and neither of them holds a sentence.
One thing iOS handles for you whichever keyboard you use: a custom keyboard is not allowed into a secure text field. Tap a password field and the system keyboard takes over.
Everything it keeps on your iPhone, in one list
The personal suggestion snapshot is a compact binary the engine exports, holding what it has learned about which words tend to follow which: counts over short runs (up to three words of context and the word that came next), plus the spelling of any word the shipped word list has no token for. It sits in the container the app and the keyboard share, at Library/Application Support/ObadhKeyboard/personal-autosuggest.snapshot. It is bounded in size, and it is validated on load against a fingerprint of the shipped model, so a snapshot built from a different generation of the data is discarded instead of imported.
The learned-word store holds words you have typed that the built-in lexicon does not know (names, slang, brands) and any word at all, known or not, whose correction you refused by tapping your own spelling. It is there to stop autocorrect fixing a word you have shown it you mean.
It does not believe you the first time. Each word accumulates evidence and is protected only once that evidence crosses a threshold, so a one-off typo cannot immunize itself. Refusing a correction protects the word at once; ordinary use takes three commits. Evidence halves after thirty days without use, so a word you have stopped typing fades out on its own. The store lives in the shared preferences under the key keyboard.learnedWords, holds at most 500 words, and keeps a score and a timestamp for each one.
Your settings sit in the same shared preferences: haptics on or off, which language emoji search opens in, whether corrections may be inserted automatically, and when the keyboard last confirmed it had Full Access. The emoji panel remembers which skin tone you picked for a given emoji, and up to 32 recents, each with a timestamp and a use count that fades, which is how it decides what to drop.
That is the complete list: no record of sentences, no history of what you typed in which app, and no timestamp anywhere except the ones named above.
On a Mac it sees every keystroke you type
That is what an input method is, on every platform and from every vendor: while it is the selected input source, everything you type goes through it. Obadh’s input method also runs outside the App Sandbox, because Text Input Services will not register a sandboxed input source. What differs between one input method and the next is what happens after the keystroke, and here that is a transliteration, a lookup in a local lexicon, and forgetting.
Everything it keeps on your Mac
The macOS input method stores its settings in its own preferences domain, com.nsssayom.inputmethod.obadh: whether the candidate bar is shown, how many suggestions it offers, whether auto-insert is on. It keeps the same kind of learned-word store as iOS, under the key learnedWords in the same domain, for the same reason. Auto-insert is off by default on both platforms. It does not bundle the next-word suggestion model, so there is no personal snapshot on a Mac at all.
Erase what it has learned
On iPhone and iPad, open the Obadh app, go to Privacy, and choose Clear Learned Words. That deletes the personal snapshot and empties the learned-word store in one action. Suggestions from the built-in lexicon are unaffected, because they were never yours in the first place.
Two things it does not reach. A keyboard still running holds its own copy of the snapshot and writes it back after the next word you commit, so switch away from the Obadh keyboard before you clear. And it leaves the emoji recents alone. Deleting the app removes its container, which takes those and everything else above with it.
On a Mac, open Settings from the input source’s menu in the menu bar. Under Autocorrect a row says how many words are currently protected from correction, with a Reset button beside it that empties the whole store. That row is the only place the learning is visible or undoable, which is why the count is shown at all. It counts protected words only, and the button is greyed out when that count is zero, so a store holding nothing but words below the threshold has to be cleared from a terminal: defaults delete com.nsssayom.inputmethod.obadh learnedWords does it.
Full Access gets you haptics and your own settings
iOS asks you to allow Full Access before a keyboard extension may do two things Obadh needs: play haptic feedback, and read and write the container it shares with its own app. The switch is step three of turning the keyboard on, and it can be turned back off in the same place.
Without it the keyboard still types. Transliteration, autocorrect and suggestions all work, because the data they need is bundled inside the extension. What you lose is the haptics, and everything in the shared container the extension cannot reach without it: the settings you chose in the app, and the words the keyboard would otherwise have learned to leave alone.
Being wary of the prompt is fair, because Full Access is exactly the permission a keyboard would need in order to collect what you type and ship it somewhere. What it does not do is give Obadh something to send: the keyboard’s entitlements file lists exactly one entitlement, which is the shared container, and neither target contains code that opens a connection. Do not take a toggle’s word for that. Checking it takes about a minute, and the next section says how.
Check every line of this yourself
Clone obadh-ios and search it for URLSession, for http, for any networking symbol you can think of. The http hits are the DTD line at the top of every plist, a handful of URLs in comments, and scripts/generate-emoji-data.py, which downloads Unicode and CLDR data on a developer’s machine when the emoji tables are rebuilt. That script and the one under obadh_engine/tools/ that fetches lexicon data are build tools, compiled into nothing.
Open Config/ObadhKeyboard.entitlements and count the entitlements: there is one, and it is the app group. Shared/Sources/Engine/PersonalAutosuggestStore.swift is the whole of what gets written to disk, in seventy-three lines, and Shared/Sources/Settings/LearnedWordStore.swift holds the storage format, which is a dictionary of word to score and timestamp.
The same holds for obadh-macos and for the engine. If you find something this page does not describe, that is a bug in this page, and reporting it as one is welcome.
This site has no analytics either
These pages are static files. They run no analytics, set no cookies, embed nothing from another domain, and load no third-party fonts or scripts; the typefaces come from this site like everything else. The one thing kept is the light or dark theme you chose, in your browser’s local storage under obadh-theme, read by this site and nothing else.
The box you can type Bangla into runs the engine as WebAssembly inside your browser tab. It makes no request while you type and it sends nothing anywhere. What you type there stays in the tab and is gone when you close it.
The pages sit on someone else’s server, and that server keeps the ordinary request log any web server keeps: an IP address, a timestamp, the page requested, the browser string. Obadh adds nothing on top of that, reads none of it, and has no way to connect any of it to anything you typed.
Your writing stays here, even if suggestions learn from everyone
Autocorrect and next-word suggestions would get better if they could learn from how people actually write, and the only version of that worth building is one where nobody’s text leaves their device. Federated learning is the approach the project intends to take: models improve from updates computed on the device, and the writing itself stays where it was written.
None of it is built. There is no such code in any of the repositories today, nothing on your device is participating in anything, and there is no date. It is on this page because a plan that affects privacy should be visible before it exists, and because it comes with a condition: if it cannot be built so that no text, and nothing reconstructible into text, ever leaves the device, it does not ship. This page will describe it before the code is released.
Where to ask, and where to correct this page
Questions about anything on this page, and corrections to it, belong in an issue on the repository they concern: obadh_engine, obadh-ios, or obadh-macos. Issues are public, which is the point: a privacy answer given in private helps one person. The FAQ answers the shorter versions of these questions, and the contribute page says what else the project needs.
Last updated