Skip to content

tray-only · pure Rust · open-source · zero telemetry

Hola, España! PolterType is an automatic keyboard layout switcher: it notices when you type in the wrong keyboard layout, switches the layout, and retypes the word.

PolterType lives in your system tray, notices the instant a word comes out in the wrong keyboard layout, switches the layout, and retypes the word for you. A friendly poltergeist for anyone whose keyboard juggles more than one language.

v0.21.0 · free & open source · MIT

Ships with dictionaries for English, Ukrainian, Russian, German, Spanish, French, Polish, Czech, Greek, Hebrew, Turkish, Bulgarian, Italian and Portuguese in both the European and Brazilian orthographies. Any other layout can be added with a TOML file.

How it works

From gibberish to fixed, in the space of one word

1 · Hears keys, not words

Key events are buffered in memory for the word you're typing — and only that word. Nothing is written to disk, nothing is logged.

2 · Scores both readings

The same keystrokes are read through each active layout and scored against bundled dictionaries and heuristics — which language did you actually mean?

3 · Flips and retypes

The layout switches, the garbled word is erased and retyped correctly, and you keep typing like nothing happened. Enter and Tab are never re-pressed — no phantom submits.

Features

Haunts your typos, respects your code

Stays out of your code

Identifier-looking tokens are never touched, URLs and hostnames like games.just-code.net are read one segment at a time instead of being mistaken for a wrong-layout word, and a plausibility check keeps real-but-rare words — kubectl, terraform, surnames — from being "fixed" into noise. The guards work in every app; nothing is muted behind your back.

Two hotkeys, rebindable

Pause auto-switching, or force-fix the last word — even inside an IDE, ignoring every filter. That's the whole cheat sheet.

Smart commands

Short typed triggers expand snippets, switch layouts or open files — a pocket text expander, scoped per app if you like.

Your vocabulary

Teach it project names and slang in the Wordlists pane — one word per line, with per-app profiles* when kubectl is a word in VS Code but not in chat.

Per-app rules

Name any app and PolterType stays silent there* — the skip list starts empty, so it only ever holds what you put in it. Commands and wordlists can be scoped the same way.

Quiet, native, light on your machine

One ~10–15 MB binary in pure Rust — no WebView, no Node, no background chatter. A real settings window when you need it, a tray icon when you don't. Autostart, sound themes and per-language toggles included. The download itself is bigger — most of an installer is the fifteen bundled dictionaries — but only the languages your system actually has enabled are ever loaded.

* Per-app features need to see which app is in front, and not every desktop lets an app ask. They work on Windows, Hyprland and X11. On macOS and on GNOME / KDE Wayland there is no compositor-agnostic way to read the focused window, so the skip list, per-app wordlist profiles and app-scoped commands quietly do nothing — everything else on this page works everywhere. We'd rather tell you now than have you wonder why the list you wrote is being ignored.

Privacy

Nothing you type ever leaves your machine.

A keyboard listener earns trust with constraints, not promises. These four are engineering rules of the codebase — break one, and the build doesn't ship.

Zero telemetry
There is no analytics to opt out of — the code simply contains none.
One network call, and you can name it
PolterType asks GitHub whether a newer version exists, and downloads it if so. No account, no identifier, no request body — nothing about you or what you type. Switch it off in one checkbox. The optional AI layer is off by default, and remote AI needs a second explicit switch.
RAM-only word buffer
The word being checked lives in memory just long enough to be scored, and is never logged or written to disk.
MIT open source
Read the code, build it yourself, or watch the release workflow build it for you.
audit the source →

Download

Adopt your poltergeist

v0.21.0, free under MIT. Builds are produced by the repository's release workflow and published on GitHub Releases.

Windows 10 / 11

.msi installer

Works end-to-end.

Per-user install: no admin rights, no UAC prompt. Since v0.8.0 it can also hold your keystrokes back during a correction, and v0.11.0 is the first release that ran it on real hardware — it works, and stays off by default because the hold adds a delay you can feel.

First launch: SmartScreen may say "Windows protected your PC" — click More info, then Run anyway.

Get the .msi

macOS 11+

.dmg · universal

Working — tuned on real hardware (macOS 15, Intel). On Intel take v0.14.4 or newer: earlier builds shipped an unsigned Intel slice, and macOS gives unsigned code no Accessibility, so the app ran and corrected nothing.

Drag to /Applications, then grant Accessibility and Input Monitoring — again after each update, since without a Developer ID macOS reads a new version as different software.

First launch: First launch: right-click the app and pick Open (unverified-developer warning).

Get the .dmg

Linux

.AppImage · x86_64 or ARM64

X11: working, with zero setup. Wayland best-effort: Hyprland, KDE, Cinnamon, GNOME family, IBus, Fcitx5.

chmod +x and run. On X11 that’s it; Wayland needs a one-time setup script for evdev permissions. ARM64 builds (Raspberry Pi 5, Asahi, ARM laptops) ship since v0.7.0.

First launch: No installer, no signature dialogs — it’s just an executable file.

Get the .AppImage

The installers are unsigned

That's why Windows SmartScreen and macOS Gatekeeper show a warning on first launch — the workarounds above get you past it once, and code signing is planned for a later phase. If you'd rather not trust an unsigned binary (fair!), the build-from-source path is documented, or grab the exact release & changelog on GitHub.

FAQ

Questions people actually ask

Why does my keyboard type in the wrong language?

Because the keyboard layout your operating system has active does not match the language you meant to type. The keys send the same scancodes either way, so the OS happily prints “Hola, Espa;a” instead of “Hola, España” — the text only looks like gibberish; it is your words, mapped through the wrong layout. Nothing is broken, and the word can be recovered exactly.

How do I fix a word I typed in the wrong keyboard layout?

Normally you delete it, switch the layout by hand, and type it again. PolterType removes those three steps: it watches the word you are typing, notices the moment it only makes sense under a different layout, switches the layout for you and retypes the word. You keep typing and the correction happens behind you.

Does PolterType run on Windows, macOS and Linux?

Yes, with honest differences. Windows 10 and 11 works end to end. On Linux, X11 works with zero setup, while Wayland is best-effort: layout switching is supported on Hyprland, KDE Plasma, Cinnamon, the GNOME family, IBus and Fcitx5, and it needs a one-time setup script for evdev permissions. macOS 11+ needs both Accessibility and Input Monitoring permission, and is now tuned on real hardware too, though only on Intel so far. Intel Macs need v0.14.4 or newer: earlier builds shipped an unsigned Intel slice, and macOS grants Accessibility only to signed code, so the app ran and corrected nothing.

Is PolterType free?

Yes. PolterType is free and open source under the MIT licence, with no paid tier, no account and no subscription. Builds are published on the GitHub releases page, and you can compile it from source yourself.

Does PolterType log or upload what I type?

No. It never logs typed text. The word being examined lives in memory only and is discarded as soon as it is done with, and there is no telemetry of any kind. PolterType makes exactly one network call, and it is not about you: once a day it asks GitHub whether a newer version has been released, and downloads it if so. That request carries no account, no identifier and no data — GitHub sees an IP address, the same as any website you visit. You can turn it off with a single checkbox. The optional AI subsystem is off by default, and sending anything to a remote model takes a second, separate opt-in.

How does PolterType update itself?

Automatically, but never while you are typing. PolterType checks GitHub for new releases once a day, downloads the installer for your platform in the background and verifies its checksum — then waits. The new version is installed when you quit the app, or when you click "Restart to update" in the tray menu. If you would rather do it by hand, one checkbox on the General settings pane turns the whole thing off.

Which keyboard layouts and languages does it support?

PolterType ships with dictionaries for fifteen languages: English, Ukrainian, Russian, German, Spanish, French, Polish, Czech, Greek, Hebrew, Turkish, Bulgarian, Italian and Portuguese in both the European and Brazilian orthographies. Only the layouts your OS actually has enabled are loaded, so bundling fifteen costs a two-keyboard user nothing at runtime. Layouts live in data rather than in code, so any other language can be added with a single TOML file and a wordlist — no rebuild of the app required.

Does it use AI? Does my typing go to a server?

Only if you set that up yourself, and nothing is configured out of the box. PolterType ships the interface for a language model but no model, no vendor client and no default address — so with the default settings there is no AI in it at all and nothing to send anywhere. If you want one, you point it at a model you run on your own machine or an API you hold the key to. A model running locally needs no network permission, because nothing leaves your computer; anything else needs a separate switch turned on deliberately, and PolterType then sends only the word in question — not the sentence, not the document, and not which languages you have installed.

Will it interfere with my code while I am programming?

No, that case is designed for — and the protection does not depend on PolterType recognising your editor. The engine refuses to auto-switch on anything that looks like an identifier: snake_case, camelCase, or a token mixing letters and digits. A plausibility check then leaves real-but-rare words alone, so kubectl and terraform survive. Both run in every application, on every operating system. If you would still rather PolterType kept out of a particular app entirely, name it in the exception list — that list starts empty and holds only what you put in it. One caveat: the exception list has to know which app is in front. That is exact on Windows, Hyprland and X11. On GNOME and KDE PolterType asks the accessibility bus instead, which answers for most graphical applications but not for terminals, and on macOS it cannot ask at all. The identifier guard and the plausibility check protect your code either way.

Can I pause it, or switch a word back by hand?

Yes. Ctrl+Shift+Space pauses and resumes auto-switching, and Ctrl+Shift+Backspace force-switches the most recent word, ignoring every filter. Two defaults differ by platform. On macOS the pause default is Ctrl+Shift+P, because Ctrl+Space and Ctrl+Shift+Space are the system input-source switching shortcuts there, and claiming them would take your layout switching away. On Wayland the force-switch default is Ctrl+Shift+F9, because there the key combination also reaches the app you are typing in, and Ctrl+Backspace would delete the very word you asked to fix. Both hotkeys are rebindable in Settings.

Why does Windows or macOS warn me when I install it?

Because the installers are not code-signed yet. Windows SmartScreen and macOS Gatekeeper warn about any unsigned app, regardless of what it does. On Windows choose “More info” and then “Run anyway”; on macOS right-click the app and choose “Open”. Code signing is planned for a later release.