Add missing physical keyboard layouts to Android.
Lightweight • Offline • No Root • No Permissions • Open Source
Android supports external keyboards, but many useful physical keyboard layouts are missing.
KeymapKit fills that gap by adding system-level physical keyboard layouts such as:
- 🇹🇷 Turkish F
- 🇹🇷 Turkish Q
- and many more in future releases.
Unlike traditional keyboard apps:
- ✅ No on-screen keyboard
- ✅ No IME
- ✅ No root
- ✅ No Accessibility Service
- ✅ No permissions
- ✅ Works completely offline
KeymapKit simply provides additional hardware keyboard layouts that Android can use.
Current screens include:
- Home dashboard
- First-time setup
- Layout Manager
- Typing Test
- Diagnostics
- Material You interface
KeymapKit now installs only the keyboard layouts you actually need.
Choose your preferred layouts during the first launch.
For example:
- Turkish Q
- Turkish F
- English US
- German
- French
Only selected layouts become available inside Android.
Manage installed layouts anytime.
- Add layouts
- Remove layouts
- Search layouts
- View installed layouts
- Update selections instantly
No reinstall required.
KeymapKit automatically recommends layouts based on your current device language.
Examples:
- Turkish device → Turkish Q + Turkish F
- English device → English US
Verify your selected layout immediately.
No third-party app is required.
Built-in diagnostics help verify:
- Physical keyboard detection
- Active layouts
- Provider status
- Connected keyboards
- ✅ System-level physical keyboard layouts
- ✅ Works in every application
- ✅ Dynamic layout installation
- ✅ Layout Manager
- ✅ Typing Test
- ✅ Diagnostics
- ✅ Material 3 / Material You
- ✅ Dark Mode
- ✅ Android 8.0+
- ✅ Lightweight
- ✅ Offline
- ✅ Open Source
Android supports physical keyboard layouts through .kcm (Key Character Map) files.
KeymapKit registers itself as a Keyboard Layout Provider and exposes these layouts directly to Android.
Unlike an IME:
- No text input service
- No keyboard replacement
- No accessibility service
- No background process
Android itself performs all key mapping.
- Install KeymapKit
- Connect a USB or Bluetooth keyboard
- Launch KeymapKit
- Select the layouts you want
- Open:
Settings
→ Physical Keyboard
→ Choose KeymapKit layout
- Open the built-in Typing Test
- Verify everything works
Samsung devices may require tapping the language entry (for example, "Turkish (Türkiye)") before the available layouts become visible.
KeymapKit follows a strict privacy-first philosophy.
Keyboard layouts, selected-layout preferences and typing-test content stay on the device. The app does not create accounts or transmit keyboard input. The official Google Play build uses Google AdMob, UMP, Firebase Analytics and Remote Config for advertising, consent, aggregate traffic-quality measurement and safety controls. See PRIVACY.md for the complete disclosure.
Current:
- 🇹🇷 Turkish F
- 🇹🇷 Turkish Q
Planned:
- 🇺🇸 English (US)
- 🇬🇧 English (UK)
- 🇩🇪 German
- 🇫🇷 French
- 🇪🇸 Spanish
- 🇮🇹 Italian
- More community layouts
- Kotlin
- Jetpack Compose
- Material 3
- Material You
- Android Keyboard Layout API
- Kotlin Coroutines
No XML UI.
KeymapKit includes:
- Typing Test
- Diagnostics
- Keyboard detection
- Layout verification
These tools make it easier to validate different USB and Bluetooth keyboards.
Some keyboard layout definitions (.kcm) are derived from:
More Physical Keyboard Layouts / extra-keyboard-layouts
Licensed under the MIT License.
See:
THIRD_PARTY_NOTICES.md
for attribution details.
Download KeymapKit from Google Play:
https://play.google.com/store/apps/details?id=com.alpware.keymapkit
Contributions are always welcome.
Especially:
- New keyboard layouts
- Documentation
- Generator improvements
- Bug fixes
- Device compatibility reports
Please open an Issue or Pull Request.
Apache License 2.0
AlpWare Studio
KeymapKit — because physical keyboards deserve proper layouts.
## Google Play experienceKeymapKit uses the official Google Play In-App Review and In-App Updates APIs. Automatic review requests are intentionally conservative and are evaluated only after repeated successful use: multiple layout changes, opening physical keyboard settings, multiple sessions, and at least two days since first use. Google Play always decides whether the review card is shown.
Review eligibility counters remain on the device in SharedPreferences. Advertising operations use
the aggregate Firebase telemetry described below; review eligibility data and typing-test content are
not sent to Analytics.
The official Google Play release is supported by Google AdMob. Debug builds use Google's sample ad identifiers, while release builds use the maintainer's production identifiers. Forks should replace or disable the release identifiers before publishing their own builds.
A fixed 320x50 banner slot is reserved at the bottom and centered horizontally, so content never jumps when an ad loads. Banner and interstitial loads use lifecycle-aware bounded exponential backoff and a device-local circuit breaker. Interstitials default to seven completed keyboard-layout changes, a two-minute minimum session age, a fifteen-minute cooldown, at most one display per session, and at most two per day. Remote Config can disable formats or make these rules stricter, but cannot cross the immutable safety limits compiled into the app.
Firebase Analytics records aggregate ad operations for traffic-quality monitoring. Country, app
version and acquisition source are supplied by Firebase's standard reporting dimensions; custom
events add ad format, placement, operation, load errors and local safety alerts. See
docs/ADMOB_OPERATIONS.md for the required console setup.





