Skip to content

Repository files navigation

KeymapKit logo

Get it on Google Play

KeymapKit

Add missing physical keyboard layouts to Android.
Lightweight • Offline • No Root • No Permissions • Open Source


✨ Why KeymapKit?

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.


📸 Screenshots

Current screens include:

  • Home dashboard
  • First-time setup
  • Layout Manager
  • Typing Test
  • Diagnostics
  • Material You interface

🚀 What's New in KeymapKit 2.0

KeymapKit now installs only the keyboard layouts you actually need.

New First-Time Setup

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.


New Layout Manager

Manage installed layouts anytime.

  • Add layouts
  • Remove layouts
  • Search layouts
  • View installed layouts
  • Update selections instantly

No reinstall required.


Recommended Layouts

KeymapKit automatically recommends layouts based on your current device language.

Examples:

  • Turkish device → Turkish Q + Turkish F
  • English device → English US

Typing Test

Verify your selected layout immediately.

No third-party app is required.


Diagnostics

Built-in diagnostics help verify:

  • Physical keyboard detection
  • Active layouts
  • Provider status
  • Connected keyboards

✨ Features

  • ✅ 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

🧠 How It Works

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.


📱 Setup

  1. Install KeymapKit
  2. Connect a USB or Bluetooth keyboard
  3. Launch KeymapKit
  4. Select the layouts you want
  5. Open:
Settings
→ Physical Keyboard
→ Choose KeymapKit layout
  1. Open the built-in Typing Test
  2. Verify everything works

Samsung devices may require tapping the language entry (for example, "Turkish (Türkiye)") before the available layouts become visible.


🔒 Privacy

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.


🧩 Supported Layouts

Current:

  • 🇹🇷 Turkish F
  • 🇹🇷 Turkish Q

Planned:

  • 🇺🇸 English (US)
  • 🇬🇧 English (UK)
  • 🇩🇪 German
  • 🇫🇷 French
  • 🇪🇸 Spanish
  • 🇮🇹 Italian
  • More community layouts

🛠 Tech Stack

  • Kotlin
  • Jetpack Compose
  • Material 3
  • Material You
  • Android Keyboard Layout API
  • Kotlin Coroutines

No XML UI.


🧪 Testing

KeymapKit includes:

  • Typing Test
  • Diagnostics
  • Keyboard detection
  • Layout verification

These tools make it easier to validate different USB and Bluetooth keyboards.


📄 Third-Party Notice

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.


📦 Google Play

Download KeymapKit from Google Play:

https://play.google.com/store/apps/details?id=com.alpware.keymapkit


🤝 Contributing

Contributions are always welcome.

Especially:

  • New keyboard layouts
  • Documentation
  • Generator improvements
  • Bug fixes
  • Device compatibility reports

Please open an Issue or Pull Request.


📜 License

Apache License 2.0


👨‍💻 Developed by

AlpWare Studio


KeymapKit — because physical keyboards deserve proper layouts.

## Google Play experience

KeymapKit 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.

Advertising in official builds

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.

Releases

Packages

Contributors

Languages