# Upyr

Private English ↔ Ukrainian keyboard-layout correction in Rust — local n-gram inference, zero telemetry, installable via Homebrew.

[Open in the WASM portfolio](https://yemelianov.dev/?project=upyr&detail=1)

Tags: rust, nlp, privacy, macos
Source: public
Repository: https://github.com/dmytro-yemelianov/upyr
Project: https://upyr.org

Typing on the wrong physical keyboard layout turns `привіт` into `ghbdsn`; Upyr is a native English-Ukrainian keyboard-layout corrector built to fix exactly that. It runs as a macOS menu-bar app (Windows and Linux previews also exist), triggered by a shortcut to fix selected text or the word before the caret, with an opt-in automatic-correction mode for confidently mistyped words.

Upyr doesn't translate — it remaps the physical keys of the typed text onto the other layout's positions, builds both the as-typed and remapped candidates, and picks between them. Trigger rules and technical-token guards (protecting strings like `FAANG` or a URL) catch high-certainty short words that statistics handle poorly; everything else is scored by an embedded signed character n-gram index: 173,964 packed 2-5-character records in about 2.8 MiB, each a sequence key plus one confidence byte (negative for English, positive for Ukrainian), built from pinned, checksum-verified Leipzig Corpora news snapshots and searched by binary lookup. The shared `upyr-core` crate has no OS or network dependency; platform adapters own permissions, clipboard snapshot/restore, and input-source switching.

There is no telemetry, no remote inference, and no logged typing history by design — the project ships a privacy-check script and CI-run dependency and security audits as inspectable evidence rather than a bare claim.

Status: v0.3.0 public preview, source public under MIT, installable via Homebrew or `cargo install`. The macOS build is ad-hoc signed, not yet Apple-notarized, so Gatekeeper warns on the downloaded app; package-manager installs sidestep that by building from source.
