ctrl8 / PolyType
PolyType icon

PolyType

Type without thinking about the layout.

Alpha · v0.16.1 macOS menu-bar utility PolyType Lang local-only

Web version available now: polytype.app — fix wrong-layout text, convert Cyrillic ⇄ Latin and restore diacritics, free in your browser.

Mac App Store & GitHub — coming soon. The PolyType app is proprietary; provided “as is”, without warranty.

Typed ghbdtn instead of привет again? PolyType converts it instantly, then lets you keep typing — руддщ in Russian becomes hello the same way. No more retyping a sentence because you forgot to switch.

What it does

ghbdtn→привет
руддщ→hello
ujhjl→город

One shortcut per language pair

Instead of cycling through every installed layout with one shortcut, each customizable hotkey maps to a language pair — RU↔EN, SR↔EN, UK↔EN, and so on. Bind it to CapsLock, Right ⌘ / ⌥ / ⌃, or an F-key. Single tap switches layouts; double tap converts the last word you typed.

PolyType Lang — transform text as you type

PolyType now ships PolyType Lang (PTL) — the world's first inline keyboard transformation language. Where a text expander just swaps a trigger for stored text, PTL evaluates small expressions inside the typing stream as you type: functions, instant cycles, diacritics, conditional blocks, composable rules — and now PolyType's own text engines as inline commands. No editor, no dialog, fully local.

Instant cycles — long-press, but inline & keyboard-only

;;s→š
;;ss→ş
;;sss→ß
;;<3 · ;;<33 · ;;<333→❤️ · 🩷 · 🧡
  • Three run modes — a {function} fires on its }; a ;rule fires on a space (the longest ;… wins, so ;s and ;sig never collide); a ;;cycle fires the instant it's typed and steps through alternatives on its last key — like phone long-press, keyboard-only.
  • Functions — {date}, {time}, {clipboard}, {selection}, {username}, {uuid} and symbols ({copyright}, {emdash}…) insert live values inline.
  • Any diacritic — any named Unicode mark composes onto any letter (;caron, ;acute, ;ogonek, ;macron, ;stroke…): s → š, a → ą, o → ō. Built-in Cycle · Diacritics, Accents and Hebrew Nikud sets; the short ;s / ;c triggers are just preconfigured Serbo-Croatian conveniences.
  • Optional blocks & operators — ?{ … } inserts only when everything inside resolves; < << eat characters and <? eats the previous word. Escape literals with \.
  • Your engines as commands new in 0.16 — PTL now also invokes PolyType's own text engines inline: Serbian Cyrillic ↔ Latin (;cyr / ;lat, or {translit}), one-key diacritics restore for Bosnian / Croatian / Serbian (cetiri ;fix → četiri) and clipboard transforms — with an on-device {ocr} planned. Every engine PolyType adds shows up here as a tag, so the language never has to change.
  • Fully local — rules stored as JSON, import/export, managed from Settings → Rules.

PTL is going open source. The PolyType Lang specification, its documentation and a reference library will be published under the MIT license as part of the PolyType project — so anyone can build on the language. The PolyType app itself stays proprietary.

Explainable, not ML

  • The engine is transparent statistics — frequency words plus trigrams — so its decisions are predictable, not a black box.
  • Runs entirely on-device. No inference server, no network, no telemetry.
  • Built-in diacritics restoration for Bosnian, Croatian and Serbian via the ioDiacritics library — invoke it inline on the last word with ;fix.

Smart, not literal

  • Leaves acronyms and ALL-CAPS tokens alone — PDF and HTML stay themselves, not cross-layout gibberish.
  • Recognizes file names, extensions, URLs and paths — .md, .app, http://, file.md, a/b are left untouched, with a one-click toggle if you want them converted too.

Stays out of the way

  • Skips password fields (secure input), Terminal, IDEs, 1Password and virtual machines.
  • Lives quietly in the menu bar — configure pairs and hotkeys, then forget it's there.