Privacy
The principle: what you type never leaves your Mac and is never written to disk, except in one case you start yourself (a typing trace for a bug report, described below). The only automatic network traffic is the update check.
Last updated: 13 Nov 2026. This page is kept with the source code; any new network connection must be added here before it ships.
Summary
- No telemetry, no analytics service, no crash-reporting SDK, no remotely loaded configuration or rules.
- No web view that loads remote content. Release notes are shown without loading external resources.
- Password fields and the macOS secure input mode are always skipped. This is not a setting.
- One permission is needed: Accessibility (macOS 12 to 26) or Device Control and Data Access (macOS 27). If macOS asks for more, the app says why. There is no Screen Recording, Automation or Full Disk Access.
- When permission is missing, your keyboard keeps typing normally (the app lets keys through and holds nothing back).
What the app stores on your Mac
| Data | Location | Notes |
|---|---|---|
| Settings, per-app rules, per-app Vietnamese/English memory, macros | ~/Library/Application Support/KeyVi/ | Only the choices you made yourself. The folder is readable only by you. Macros are text you wrote and may contain private text. |
| Settings backups | ~/Library/Application Support/KeyVi/backups/ | The newest 5 are kept so a damaged file can be recovered. |
| App health log | ~/Library/Logs/KeyVi/ | Content-free events only (key class, result codes, timings). At most 5 files of 1 MB, kept 14 days. |
| Typing trace (only when you press start) | ~/Library/Logs/KeyVi/captures/ | See the section below. Deleted after 24 hours and excluded from Time Machine backups. |
| Update state (Sparkle) | ~/Library/Preferences/vn.kal.keyvi.plist and ~/Library/Caches/vn.kal.keyvi/ | Managed by the system by default. |
Files are written atomically (write a temporary file, then rename) so an update or power loss does not corrupt your settings. The full list of paths to delete is in "Delete your data" below.
What the app sends
One thing only: the update check, every 24 hours (you can turn it off in Settings).
- The app fetches
https://keyvi.kal.vn/appcast.xmlover HTTPS, then downloads the update from the same server when you agree or when automatic updates are on. VERIFY If update archives are also hosted on GitHub Releases, this page will say so. - As with any web request, the server sees your IP address and the app name and version. The app does not send a system profile (that Sparkle feature is disabled).
- An update must carry a valid EdDSA signature or the app refuses to install it.
- There is no other network request. The release pipeline includes an automated check that the shipped binary contains only the declared server addresses.
What diagnostics contain and do not contain
When you press Report a problem..., the app builds a text report and shows you exactly what would be sent before you copy or save it. A report is never sent automatically.
In the report
- App version, build and update channel.
- macOS version, hardware class (Apple silicon or Intel), keyboard layout, enabled input sources (IDs only).
- Permission states, Secure Input state and the app that is likely holding it.
- The app you were typing in (identifier and version) and the compatibility rule that applied.
- Non-content settings (typing method, toggles), timing statistics, the last 50 health events, other input apps that are running.
- Recent key classes (letter, digit, backspace, modifier), never the key value.
Never in the report
- What you typed, words, field values, clipboard contents.
- Window titles, web addresses, file paths in your home folder (other than KeyVi's own folders).
- Macro contents (only the count).
- Your per-app memory list, except the entry for the app you are reporting.
Typing trace (optional, started by you)
This is the only case where what you type touches the disk, and you can see it happening. It helps reproduce hard bugs that a report alone cannot explain.
- It starts only when you press the button in the Diagnostics window and confirm.
- Default 60 seconds, at most 180 seconds, then it stops by itself. A different menu bar icon and a countdown panel with a Stop button stay visible the whole time.
- Nothing is recorded while macOS secure input is on or a password field is focused.
- Stored locally, excluded from backups, deleted after 24 hours or as soon as you export or discard it. You can read a human-friendly version before sharing. It is never uploaded automatically.
Clipboard
The app writes to your clipboard only when you press Open GitHub in the report sheet (so you can paste the report into GitHub), and the sheet says so before it does. The only other case is the "paste" compatibility mode that you turn on yourself for one specific app; it saves and restores the clipboard around each paste and is explained when you enable it.
This website
- Visitor analytics: Umami, self-hosted by the project. The pages of this website (not the app, not the release-notes pages) load Umami's script from
https://stats.kal.vn, a server the project runs itself, and send it page views: the page address, the page title, the referring page, the screen size and the browser language. Umami uses no cookies and nothing is stored in your browser; it collects no personal data and keeps no user profiles. To count visitors, the server derives a visit identifier from a one-way hash of your IP address and browser with a value that changes every month; the IP address is not stored, only the approximate country and city derived from it and the browser, operating system and device type. If your browser sends Do Not Track, nothing is sent at all. Only aggregated page views are looked at (per page, referrer and country); the data is not shared with anyone and there is no advertising. - No cookies and no tracking storage. Fonts are the ones already on your device; code, images, updates and the installer (DMG) are all served from this site's own server.
- The web server logs each request with only the time, method, path (without the query part), result code and size; it does not log IP addresses, browsers or referring pages. From this log we count, each day, the requests to
appcast.xmlto estimate how many Macs run the app, and the downloads of each file; only the daily totals are kept. - Connections pass through Cloudflare and the server's router before they reach the web server; like on any website, these layers see your IP address while they handle the request. VERIFY Check how long these two layers keep their logs before publishing.
- Homebrew install counts come from Homebrew's public counter.
Bug reports and support
When you open a GitHub issue or send an email, what you write is your choice and is covered by the policy of GitHub or your email provider. KeyVi never sends what you typed on its own.
Donations
The app does not store or send donor information. The money moves between you and your bank or GitHub, under their own policies.
Delete your data
Quit KeyVi, drag the app to the Trash, then delete the folders listed in the table above. If you installed with Homebrew, one command does it all:
brew uninstall --cask --zap keyvi