Interslavic Keyboards
Interslavic is a zonal constructed language — built so speakers of any Slavic language can read it without learning it. It had almost no first-class keyboard support. This project builds that support for five platforms from a single character table, and submitted the language to Keyman's official catalogue for the first time.
The problem
Written in standard orthography, Interslavic needs exactly four letters that a Polish or US keyboard cannot produce:
č š ž ě
Four characters is a small problem that becomes a large one across six platforms, because every platform solves it with a different spare modifier — and a phone has none at all. Before this project there was one aging third-party Windows layout, no phone support to speak of, and no swipe-typing dictionary in any Slavic conlang. Typing the language meant copy-paste or character maps.
How it is built
One canonical character table is the source of truth. Generator scripts in Python
read it and emit each platform's artefact — the Windows .klc, the
macOS .keylayout, the Keyman .kmn plus its touch layout,
the lexical model, and a Windows autocorrect map. The layouts cannot drift apart,
because nobody hand-edits them.
The scope is deliberately narrow. Interslavic also has an extended alphabet (ų ė ȯ ŕ ť ď ľ đ); it is cut from every shipped layout on purpose, because those letters are not written in new text. The testing checklist asserts this as a positive check — pressing the modifier with T / D / L must produce nothing. A layout that offers letters people should not type is a worse layout, not a more complete one.
Platform coverage
| Platform | What ships | How the letters are reached | Status |
|---|---|---|---|
| Windows | Latin, Cyrillic and runic layouts (.klc → compiled DLLs, PowerShell installer) | AltGr + letter | Available |
| Android — layout | Three XML layouts for Unexpected Keyboard (Latin / Cyrillic / runic) | Swipe to the top-right of a key | Available |
| Android — swipe typing | main_isv.dict for HeliBoard — 253,273 inflected forms | Glide typing with suggestions | Available |
| iOS / iPadOS | Keyman package isv_latin.kmp + a companion lexical model | Flick up from the key; long-press as a fallback | Available — verified on a real iPad |
| macOS | KBDMSSTD.keylayout, generated from the same table | Option + letter | Generated; hardware check still open |
| Linux | Points at the upstream packages rather than duplicating them | AltGr + letter | Upstream |
Everything is a plain file download — no registration, no account, no e-mail. MIT licensed.
The dictionary
Swipe typing needs more than a layout: it needs a wordlist, and in a heavily inflected language it needs forms, not lemmas. You drag your finger across slovami, not slovo, so a lemma-only dictionary predicts almost nothing useful.
The Android dictionary carries 253,273 inflected forms, generated from an Interslavic dictionary database. The iOS lexical model is the same source trimmed: the full list compiles to a 33 MB trie, well past what an iOS keyboard extension is allowed to hold, so it is cut to forms at frequency ≥ 100 — about 5 MB, 39,777 forms. The interesting part is the exception: the corpus scores the word medžuslovjansky itself at f=26, so a plain frequency cut-off would have dropped precisely the vocabulary the keyboard's users type most. Project-specific stems are kept regardless of frequency.
Upstream: submitted to the Keyman catalogue
Keyman is the standard cross-platform keyboarding project, and its catalogue is how a keyboard reaches users who will never find a GitHub repository. Its API returns no keyboards and no lexical models for the language code isv. These two pull requests are the first submissions of Interslavic to either catalogue.
isv_latin — Interslavic (Latin), standard orthography
Open, submitted 2026-08-08, awaiting maintainer review
radoslove.isv-latn.wordlist — 39,777 inflected forms
Open, in review — maintainer feedback addressed, back with them since 2026-08-09
Both are open, not merged — status as reported by the GitHub API on 2026-08-10. Review on the lexical model produced a useful correction: the model was originally submitted as isv, which claims the whole language when it only covers the Latin script. It was renamed to isv-latn and returned for review.
In development
Two native keyboard apps are underway. Neither is downloadable yet, and both are listed here as work in progress rather than as shipped platforms.
- iOS — Swift keyboard extension. Builds and runs in the simulator; not yet verified on a physical device. It exists mainly because the Keyman route requires "Allow Full Access" on iOS 16+ — a permission that by design lets a keyboard transmit what you type. A native extension declaring RequestsOpenAccess: false technically cannot send anything anywhere, which makes the project's "no account, no e-mail" claim true without an asterisk.
- Android — Kotlin InputMethodService. An early-stage standalone IME, structured as a milestone plan and treated as a laboratory for the iOS app: no signing ceremony, no review queue, minutes per iteration. Android already has a good Interslavic keyboard via the shipped XML layout, so this app has to earn its place before it replaces anything.
Why this one is on the portfolio
It is a small, complete piece of engineering with a real user at the end of it: one source of truth, generated artefacts across five platforms, a documented scope decision, a testing checklist written for a stranger on a clean device, and contributions filed with an upstream project rather than kept private. The constraints — a 33 MB model against a keyboard-extension memory budget, a frequency cut-off that would have deleted the vocabulary that matters, four platforms with four different modifiers — are the kind that only show up once you ship to actual devices.