{"id":34251957,"url":"https://github.com/tribixbite/cleverkeys","last_synced_at":"2026-05-04T12:03:02.650Z","repository":{"id":314875333,"uuid":"1057090899","full_name":"tribixbite/CleverKeys","owner":"tribixbite","description":"Privacy-first neural Android keyboard with advanced swipe prediction","archived":false,"fork":false,"pushed_at":"2026-04-26T04:20:01.000Z","size":1003727,"stargazers_count":333,"open_issues_count":41,"forks_count":24,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-05-04T00:37:33.047Z","etag":null,"topics":["android-app","android-keyboard","apk","clipboard-manager","mobile-keyboard","onnx","todolist"],"latest_commit_sha":null,"homepage":"https://cleverkeys.app","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tribixbite.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null},"funding":null},"created_at":"2025-09-15T09:07:00.000Z","updated_at":"2026-05-03T17:43:20.000Z","dependencies_parsed_at":"2025-09-18T15:34:36.284Z","dependency_job_id":null,"html_url":"https://github.com/tribixbite/CleverKeys","commit_stats":null,"previous_names":["tribixbite/cleverkeys"],"tags_count":502,"template":false,"template_full_name":null,"purl":"pkg:github/tribixbite/CleverKeys","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tribixbite%2FCleverKeys","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tribixbite%2FCleverKeys/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tribixbite%2FCleverKeys/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tribixbite%2FCleverKeys/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tribixbite","download_url":"https://codeload.github.com/tribixbite/CleverKeys/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tribixbite%2FCleverKeys/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32606413,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-04T10:08:07.713Z","status":"ssl_error","status_checked_at":"2026-05-04T10:08:02.005Z","response_time":58,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android-app","android-keyboard","apk","clipboard-manager","mobile-keyboard","onnx","todolist"],"created_at":"2025-12-16T10:55:14.151Z","updated_at":"2026-05-04T12:03:02.641Z","avatar_url":"https://github.com/tribixbite.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\u003c/br\u003e\n\u003cimg src=\"./res/mipmap-xxxhdpi/ic_launcher.png\" width=\"200\" /\u003e\n\n# CleverKeys\n\n\u003cimg src=\"./assets/banner/social_preview.jpg\" width=\"100%\" /\u003e\n\n\u003c/div\u003e\n\n\u003c/br\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg alt=\"API\" src=\"https://img.shields.io/badge/Api%2026+-50f270?logo=android\u0026logoColor=black\u0026style=for-the-badge\"/\u003e\u003c/a\u003e\n  \u003cimg alt=\"Kotlin\" src=\"https://img.shields.io/badge/Kotlin-a503fc?logo=kotlin\u0026logoColor=white\u0026style=for-the-badge\"/\u003e\u003c/a\u003e\n  \u003cimg alt=\"ONNX Runtime\" src=\"https://img.shields.io/badge/ONNX-005CED?logo=onnx\u0026logoColor=white\u0026style=for-the-badge\"/\u003e\u003c/a\u003e\n  \u003cimg alt=\"Material 3\" src=\"https://custom-icon-badges.demolab.com/badge/material%20you-lightblue?style=for-the-badge\u0026logoColor=333\u0026logo=material-you\"/\u003e\u003c/a\u003e\n  \u003c/br\u003e\n  \u003c/br\u003e\n\n\u003ca href=\"https://github.com/tribixbite/CleverKeys/releases\"\u003e\n  \u003cimg src=\"https://img.shields.io/github/downloads/tribixbite/CleverKeys/total?color=ff9500\u0026style=for-the-badge\u0026logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHRpdGxlPmRvd25sb2FkPC90aXRsZT48cGF0aCBkPSJNNSwyMEgxOVYxOEg1TTE5LDlIMTVWM0g5VjlINUwxMiwxNkwxOSw5WiIgZmlsbD0id2hpdGUiIC8+PC9zdmc+\u0026labelColor=a6660d\"/\u003e\n\u003c/a\u003e\n\n\u003ca href=\"https://github.com/tribixbite/CleverKeys/stargazers\"\u003e\n  \u003cimg src=\"https://img.shields.io/github/stars/tribixbite/CleverKeys?color=ffff00\u0026style=for-the-badge\u0026labelColor=a1a116\u0026logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHRpdGxlPnN0YXI8L3RpdGxlPjxwYXRoIGQ9Ik0xMiwxNy4yN0wxOC4xOCwyMUwxNi41NCwxMy45N0wyMiw5LjI0TDE0LjgxLDguNjJMMTIsMkw5LjE5LDguNjJMMiw5LjI0TDcuNDUsMTMuOTdMNS44MiwyMUwxMiwxNy4yN1oiIGZpbGw9IndoaXRlIiAvPjwvc3ZnPg==\"/\u003e\n\u003c/a\u003e\n\n\u003c/br\u003e\n\n\u003ca href=\"https://github.com/tribixbite/CleverKeys/releases/latest\"\u003e\n  \u003cimg src=\"https://img.shields.io/github/v/release/tribixbite/CleverKeys?color=9b59b6\u0026include_prereleases\u0026logo=github\u0026style=for-the-badge\u0026labelColor=6b21a8\"/\u003e\n\u003c/a\u003e\n\u003ca href=\"https://f-droid.org/packages/tribixbite.cleverkeys\"\u003e\n  \u003cimg src=\"https://img.shields.io/f-droid/v/tribixbite.cleverkeys?style=for-the-badge\u0026logo=f-droid\u0026logoColor=white\u0026color=1976D2\u0026labelColor=0D47A1\"/\u003e\n\u003c/a\u003e\n\n\u003c/br\u003e\n\u003c/br\u003e\n\n\u003c/p\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n# 🗺️ Project Overview\n\nCleverKeys is a feature-rich open-source keyboard for Android. Neural swipe typing with autocorrect, multi-language hot-swap with per-language dictionaries, unlimited clipboard with pinning/todos/tags/regex search/inline editing, offline GIF packs, 208 customizable short-swipe actions, TrackPoint cursor control, 35+ themes with DIY creator — all running 100% on-device with zero internet permissions.\n\n\u003c/div\u003e\n\n\u003cp align=\"middle\"\u003e\n    \u003cimg src=\"./docs/banners/feature_banner.png\" width=\"99%\" /\u003e\n\u003c/p\u003e\n\n## What Makes CleverKeys Unique\n\n### Open-Source Gesture Keyboard Comparison\n\n| Feature | CleverKeys | HeliBoard | FUTO | FlorisBoard | AnySoftKeyboard | Urik |\n|---------|:----------:|:---------:|:----:|:-----------:|:---------------:|:----:|\n| **Gesture Typing in Termux** | ✅ | ⚠️ Corrupted⁴ | ❌ Broken | ⚠️ Disabled | ⚠️ Experimental | ❓ |\n| **Gesture/Swipe Typing** | ✅ Stable | ✅ Stable | ⚠️ Alpha | ⚠️ Disabled⁵ | ⚠️ Experimental | ✅ Geometric¹⁰ |\n| **Multi-Language Swipe**⁹ | ✅ 11 languages | ⚠️ Single | ⚠️ English only | ❌ | ❌ | ✅ Simultaneous |\n| **Gesture Engine Open Source** | ✅ | ❌¹ | ✅² | ✅ | ✅ | ✅ |\n| **ML Training Code Public** | ✅ | N/A | ✅⁶ | N/A³ | N/A³ | N/A¹⁰ |\n| **Model Size** | 13MB | Proprietary | 62MB | N/A | N/A | N/A |\n| **APK Size** | ~52MB | ~45MB | ~200MB | ~15MB | ~25MB | ~40MB |\n| **Clipboard History** | ✅ Unlimited | ⚠️ 10min default⁷ | ✅ 25 items | ✅ 20-100 items | ❌ 15s hint only | ✅ Encrypted |\n| **Short-Swipe Actions**⁸ | ✅ 208 gestures | ⚠️ Limited | ❌ | ⚠️ Limited | ⚠️ Limited | ⚠️ Space/Del only¹¹ |\n| **Per-Key Customization** | ✅ 204+ commands | ❌ | ❌ | ❌ | ❌ | ✅ |\n| **Custom Layouts** | ✅ XML (8 sublabels) | ✅ JSON | ✅ YAML | ⚠️ JSON (no editor) | ⚠️ Addon packs only | ✅ |\n| **DIY Theme Creator** | ✅ | ✅ | ❌ (16 built-in) | ✅ Snygg v2 | ✅ | ✅ |\n| **Word Suggestions** | ✅ | ✅ | ✅ | ❌ (v0.6 planned) | ✅ | ✅ |\n| **No Internet Access** | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |\n| **License** | GPL-3.0 | GPL-3.0 | Source-First² | Apache-2.0 | Apache-2.0 | GPL-3.0 |\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eFootnotes \u0026 Sources\u003c/b\u003e\u003c/summary\u003e\n\n¹ HeliBoard requires Google's proprietary `libjni_latinimegoogle.so` library for gesture typing ([source](https://github.com/Helium314/HeliBoard#gesture-typing))\n\n² FUTO uses \"Source First License 1.1\" — source-available but restricts commercial use ([source](https://keyboard.futo.org/))\n\n³ FlorisBoard and AnySoftKeyboard use algorithmic approaches (corner matching, template matching) — no ML training involved\n\n⁴ HeliBoard has a [known bug](https://github.com/termux/termux-app/issues/3941) where swipe typing in Termux produces duplicated/corrupted output\n\n⁵ FlorisBoard glide typing is disabled by default and labeled \"alpha quality\" — must be enabled manually in advanced settings\n\n⁶ FUTO swipe training dataset is public on [HuggingFace](https://huggingface.co/datasets/futo-org/swipe.futo.org) with training code in their repo\n\n⁷ HeliBoard clipboard retention defaults to 10 minutes but is configurable; items are not persisted across restarts by default\n\n⁸ Short-swipe actions: 8 directions × 26 keys = 208 one-touch gestures for navigation (arrows, home/end), editing (select all, undo, cut/copy/paste), function keys (F1-F12), and more — no long-press menus needed\n\n⁹ Multi-language swipe typing: CleverKeys uses the same neural network model for all languages — dictionaries provide word candidates, not language-specific models. 6 languages bundled (en, es, fr, pt, it, de), 5 downloadable (nl, id, ms, tl, sw). Primary + secondary language support with automatic best-match selection.\n\n¹⁰ Urik uses a geometric/template path matcher (no ML model, no training code applicable) — German-friendly QWERTZ-native with simultaneous multilingual spell-check. CleverKeys is exploring a complementary geometric pipeline for non-QWERTY layouts and non-Latin scripts (Russian, etc.) — see [ROADMAP.md](./ROADMAP.md#-neural-network--prediction).\n\n¹¹ Urik short-swipe is limited to Space (cursor movement) and Backspace (delete word) — no general short-swipe action mapping system.\n\n\u003c/details\u003e\n\n### Why CleverKeys?\n\nMost keyboard apps do one thing well. CleverKeys does many things well:\n\n- **Swipe + autocorrect + multi-language** — a custom transformer neural network evaluates multiple language dictionaries simultaneously per swipe, with contraction-aware autocorrect\n- **Clipboard as a productivity tool** — not just history, but pinning, todos with status tracking, tags, inline editing, regex search, and media support (images/videos/PDFs)\n- **Deep customization** — 208 short-swipe actions, Android intent launching, custom text macros, per-key gesture mapping, XML layout authoring\n- **Power user essentials** — TrackPoint cursor, selection-delete, backspace undo, terminal key support, offline GIF packs\n- **Auditable ML** — model architecture, training code, and datasets all public at [CleverKeys-ML](https://github.com/tribixbite/CleverKeys-ML)\n\n### 📱 Works Everywhere — Including Termux\nCleverKeys is the **only open-source keyboard with reliable swipe typing in Termux**. Other keyboards either disable gestures in terminals (FlorisBoard), produce corrupted output (HeliBoard), or don't work (FUTO). Commercial keyboards like Gboard and SwiftKey also disable swipe in Termux.\n\n\u003cdiv align=\"center\"\u003e\n\n# 📲 Install Options\n\n\u003cp align=\"middle\"\u003e\n    \u003ca href=\"https://f-droid.org/packages/tribixbite.cleverkeys\"\u003e\u003cimg alt=\"F-Droid\" src=\"https://img.shields.io/badge/F--Droid-1976D2?style=for-the-badge\u0026logo=f-droid\u0026logoColor=white\" height=\"60\"/\u003e\u003c/a\u003e\n    \u003ca href=\"https://apps.obtainium.imranr.dev/redirect?r=obtainium://app/%7B%22id%22%3A%22tribixbite.cleverkeys%22%2C%22url%22%3A%22https%3A%2F%2Fgithub.com%2Ftribixbite%2FCleverKeys%22%2C%22author%22%3A%22tribixbite%22%2C%22name%22%3A%22CleverKeys%22%2C%22preferredApkIndex%22%3A0%2C%22additionalSettings%22%3A%22%7B%5C%22includePrereleases%5C%22%3Afalse%2C%5C%22fallbackToOlderReleases%5C%22%3Atrue%2C%5C%22filterReleaseTitlesByRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22filterReleaseNotesByRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22verifyLatestTag%5C%22%3Afalse%2C%5C%22dontSortReleasesList%5C%22%3Afalse%2C%5C%22useLatestAssetDateAsReleaseDate%5C%22%3Afalse%2C%5C%22trackOnly%5C%22%3Afalse%2C%5C%22versionExtractionRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22matchGroupToUse%5C%22%3A%5C%22%5C%22%2C%5C%22versionDetection%5C%22%3Atrue%2C%5C%22releaseDateAsVersion%5C%22%3Afalse%2C%5C%22useVersionCodeAsOSVersion%5C%22%3Afalse%2C%5C%22apkFilterRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22invertAPKFilter%5C%22%3Afalse%2C%5C%22autoApkFilterByArch%5C%22%3Atrue%2C%5C%22appName%5C%22%3A%5C%22CleverKeys%5C%22%2C%5C%22exemptFromBackgroundUpdates%5C%22%3Afalse%2C%5C%22skipUpdateNotifications%5C%22%3Afalse%2C%5C%22about%5C%22%3A%5C%22Neural%20network%20gesture%20keyboard%20for%20Android%5C%22%7D%22%7D\"\u003e\u003cimg alt=\"Obtainium\" src=\"https://img.shields.io/badge/Obtainium*-0D47A1?style=for-the-badge\u0026logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAACXBIWXMAAAsTAAALEwEAmpwYAAADHklEQVR4nO2ZzWsTQRjGf9GDiOLRkxcPgiehoHjxIHgQPPlx8SJ40NqD4EXwIPgH+Ad4EAQFPQiiB0FRET0IYgtFba3VNmljk93ZnZ3ZeWeyE9I0aZKd2drsh0+ysMO+z/vOzM7uzgYCBAi0fRUHpgE/cFygJrAMfAOuA4teBxDx9Z/5Qgf4ARwCfgHXgL/9CmLQw/OeFR6Ao8AqcBlY6zeCdoIoB5YB94EIcAX4028gmj2AWsBH4CmwF7gIbOy3ALT6Au8ALIDpwJLXIBptFqAK/AbmgCngKrDR6wAyXb7QB8BTYD9wDtjidQCZLl/oI+AZcAC4DGz2OoBMly/0CfAcOABcALZ5HUCmyxf6BHgJHATOA9u9DuD8s+X5wfcJ8Bo4BJwFdngdwP5ny/MX3ifAW+AwcArY7XUA588tz1+4jwE/gaPACeBwvwFYAbR7fgPtBN4Dh4HjwFGvA5gAbPf5GYo7Ae+AI8DxfgMwAFi+0M/QnQJ4DxwBjvUbgAHA8oW+g64dwAfgGHC83wAMAJYv9CN0JwE+AseBE/0GYACwfKGfoTsD8Ak4AZzoNwADgOUL/QLdKYCvwAngRL8BGAAsX+gX6M4CfAFOAif7DcAAYPlCv0N3DuAbcAI42W8ABgDLF/odunMA34GTwMl+AzAAWL7Qn9CdB/gBnAJO9RuAAcDyhf6C7gLAT+AUcKrfAAwAli/0N3QXAX4Bp4HT/QZgALB8ob+huwjwGzgNnO43AAOA5Qv9A90lgD/AaeB0vwEYACxf6F/oLgP8BU4Dp/sNwABg+UL/QXcZ4B9wGjjTbwAGAMsX+h+6KwD/gTPAmX4DMAAYX+hOAqwAZ4Ez/QZgfKE7BbAKnAXO9BuA8YXuNMA6cBY4028AxhfaU4DrAeeAc14HML7Q/Q9o7E8DngecAc55HcD4QjcBeA44B5z3OoDxhe4k4CLwHDgHnPc6gPGF7mTgJeA5cB644HUA4wvdKcArwAvgPHDB6wDGF7pTgdeAF8AF4KLXAYwvdKcBbwAvgQvARa8DGF/oTgfeAl4BF4BLXgcIEGB79Q8cPxXm8tdVtgAAAABJRU5ErkJggg==\u0026logoColor=white\" height=\"60\"/\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/tribixbite/CleverKeys/releases/latest\"\u003e\u003cimg alt=\"GitHub\" src=\"https://img.shields.io/badge/GitHub_APK-238636?style=for-the-badge\u0026logo=github\u0026logoColor=white\" height=\"60\"/\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003csub\u003e*Recommended — Obtainium pulls directly from GitHub releases, avoiding F-Droid's typical 24-48 hour update delay.\u003c/sub\u003e\n\n# 🎨 Extensive Theme Engine\n\n\u003c/div\u003e\n\nCleverKeys features one of the most powerful keyboard theme engines available:\n\n### Built-in Themes (18+)\n- **CleverKeys Dark** — Deep purple with silver accents (default)\n- **CleverKeys Light** — Silver keys with purple accents\n- **Neon Cyan/Magenta** — Vibrant cyberpunk aesthetic\n- **ePaper / ePaper Black** — High contrast e-ink styles\n- **Jungle** — Tropical teal theme\n- **Everforest Light** — Soft green nature theme\n- **Monet (Auto)** — Material You dynamic colors\n- **Dark / Light / Black / Alt Black** — Classic options\n- And many more...\n\n### DIY Theme Creator\nBuild your own themes on-the-fly with full control over:\n- **Key Colors** — Default, Activated, Locked, Modifier, Special\n- **Label Colors** — Primary, Sub-label, Secondary labels\n- **Border Colors** — Full border customization\n- **Trail Effects** — Swipe trail color and style\n\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"./docs/screenshots/theme-manager.png\" width=\"24%\" /\u003e\n    \u003cimg src=\"./docs/screenshots/theme-dark-selected.png\" width=\"24%\" /\u003e\n    \u003cimg src=\"./docs/screenshots/Screenshot_20251205_063059_CleverKeys (Debug).jpg\" width=\"24%\" /\u003e\n    \u003cimg src=\"./docs/screenshots/Screenshot_20251205_032954_Samsung Notes.jpg\" width=\"24%\" /\u003e\n\u003c/p\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n# ✨ Features\n\n\u003c/div\u003e\n\n### 🧠 Neural Swipe \u0026 Autocorrect\n- **Custom transformer model** (encoder-decoder, 13MB) trained on real swipe data\n- **Sub-200ms predictions** with XNNPACK hardware acceleration\n- **Autocorrect with contraction support** — \"dont\" to \"don't\", \"im\" to \"I'm\"\n- **Full inference control** — beam width, length normalization, pruning, early stopping\n- **100% on-device** — works in airplane mode, no cloud anything\n\n### 🌍 Multi-Language with Hot-Swap\n- **11 swipe languages** — 6 bundled, 5 downloadable packs\n- **Primary + secondary language** — neural network evaluates both dictionaries per swipe\n- **Instant language switch** — toggle between languages without reloading\n- **Per-language custom dictionaries** — add words, adjust frequency weights, disable entries\n- **Smart contractions** — language-aware handling across English, French, and more\n\n### 📋 Clipboard System\nAs an IME, CleverKeys has legitimate clipboard access that other apps don't:\n- **Unlimited history** — configurable by count or storage size, persistent across reboots\n- **Pinned entries** — save important clips with drag-and-drop reordering\n- **Built-in todo list** — track items with active/planned/completed status and tags\n- **Inline editing** — edit any clipboard entry directly in the panel\n- **Regex search** — VSCode-style `.*` toggle, glob shorthand, full regex power\n- **Media clipboard** — images, videos, PDFs with thumbnail previews\n- **Tags** — organize pinned and todo entries with custom tag labels\n- **Export/Import** — JSON (text) or ZIP (full backup with media)\n\n### 🎮 Offline GIF Panel\n- **No internet permission** — GIF packs imported via file picker, not downloaded\n- **FTS4 search** — find GIFs by keyword with compound word fallback\n- **Category browsing** — 17 emotion categories + recently used\n- **Community packs** — import ZIP packs from Discord or build your own\n\n### 🎯 208 Short Swipe Actions\nAssign custom actions to any key's 8 swipe directions:\n- **204+ built-in commands** — navigation, editing, clipboard, function keys, special chars\n- **Custom text macros** — email addresses, signatures, code snippets, emoji sequences\n- **Android intents** — launch any app, Termux commands, system settings, maps, browser\n- **Visual feedback** — custom icons displayed as sublabels on keys\n- **Import/Export** — share customizations as JSON profiles\n\n### 🖱️ Cursor \u0026 Text Control\n- **TrackPoint navigation** — IBM/Lenovo-style joystick cursor on nav key (hold to activate)\n- **Selection-Delete** — hold backspace + swipe to highlight text, release to delete\n- **Backspace undo** — press backspace after autocorrect to revert to original word\n- **Arrow keys** — full cursor control with shift-select support\n\n### 🔒 Privacy First\n- **Zero network permissions** — literally cannot phone home\n- **No analytics, telemetry, or cloud sync**\n- **Password manager privacy** — exclude clipboard from 1Password, Bitwarden, KeePassDX, etc.\n- **Open source = auditable**\n\n### ⌨️ 100+ Keyboard Layouts\n- QWERTY, AZERTY, QWERTZ, Dvorak, Colemak, and programming layouts\n- International layouts for 30+ languages\n- Full XML customization with 8 sublabels per key\n- Terminal mode with Ctrl/Meta/Fn for Termux\n\n### 🎨 35+ Themes with DIY Creator\n- Material You (Monet), Rose Pine, Everforest, Cobalt, ePaper, and more\n- Full control: key colors, label colors, borders, swipe trail effects\n- Dark and light variants for every theme\n\n\u003cdiv align=\"center\"\u003e\n\n# 🌍 Multi-Language Swipe Typing\n\n\u003c/div\u003e\n\nCleverKeys supports swipe typing in **11 languages** with intelligent multi-language features:\n\n\u003e ⚠️ **Current swipe-typing scope** — The v1 gesture engine is trained on\n\u003e **English + QWERTY**. It works well for other Latin-script languages that\n\u003e share the QWERTY keyboard (Spanish, French, Portuguese, Italian, German,\n\u003e etc.), but quality degrades for non-QWERTY layouts (AZERTY, QWERTZ, Dvorak,\n\u003e Colemak) and for non-Latin / non-romance scripts, where swipe is\n\u003e automatically disabled on keyboards whose row shape diverges from QWERTY\n\u003e (see [#9](https://github.com/tribixbite/CleverKeys/issues/9)). A new\n\u003e multi-layout / multi-script gesture model with layout-aware decoding is on\n\u003e the roadmap for **Q2–Q3 2026**; in the interim, tap typing + autocorrect\n\u003e works across every supported layout and language.\n\n### Bundled Languages (6)\nIncluded in the APK — no additional download required:\n\n| Language | Code | Dictionary Size |\n|----------|:----:|---------------:|\n| English | en | 52,000 words |\n| Spanish | es | 50,000 words |\n| French | fr | 25,000 words |\n| Portuguese | pt | 25,000 words |\n| Italian | it | 25,000 words |\n| German | de | 25,000 words |\n\n### Downloadable Language Packs (5)\nAvailable via **Settings → Languages → Download Language Packs**:\n\n| Language | Code | Dictionary Size | Source |\n|----------|:----:|---------------:|--------|\n| Dutch | nl | 20,000 words | wordfreq |\n| Indonesian | id | 20,000 words | wordfreq |\n| Malay | ms | 20,000 words | wordfreq |\n| Tagalog | tl | 20,000 words | wordfreq |\n| Swahili | sw | 20,000 words | Wikipedia corpus |\n\n### Multi-Language Features\n\n**Primary + Secondary Language**\n- Set your primary language for main typing\n- Add a secondary language for automatic detection\n- Neural network evaluates both dictionaries simultaneously\n- Best prediction selected automatically per swipe\n\n**Smart Accent \u0026 Punctuation Insertion**\n- Automatic accent marks for languages that need them (café, naïve, señor)\n- Language-aware punctuation (Spanish ¿¡, French « », German „\")\n- Proper handling of contractions across languages\n\n**Per-Language Dictionary Manager**\n- Separate tabs for each active language\n- View word frequencies and dictionary statistics\n- Add custom words per language\n- Import/export language-specific word lists\n\n### Creating Custom Language Packs\n\nYou can create dictionaries for any language using the included Python scripts:\n\n```bash\n# Navigate to scripts directory\ncd scripts/\n\n# Install prerequisite\npip install wordfreq\n\n# Option 1: Two-step build from wordfreq (any language wordfreq supports)\npython get_wordlist.py --lang fr --output fr_words.txt --count 50000\npython build_langpack.py --lang fr --name \"French\" --input fr_words.txt --use-wordfreq --output langpack-fr.zip\n\n# Option 2: Build from pre-existing binary dictionary (.bin file)\npython build_langpack.py --lang sv --name \"Swedish\" --dict ../src/main/assets/dictionaries/sv_enhanced.bin --output langpack-sv.zip\n\n# Option 3: Build from custom word frequency CSV (format: word,frequency per line)\npython build_dictionary.py --input my_words.csv --output my_lang.bin\npython build_langpack.py --lang xx --name \"MyLang\" --dict my_lang.bin --output langpack-xx.zip\n\n# Option 4: Batch build all bundled languages (en, es, fr, de, it, pt, nl, id, ms, tl, sw)\npython build_all_languages.py\n```\n\n**Script Details:**\n- `build_langpack.py` — Creates complete .zip language packs from wordfreq\n- `build_dictionary.py` — Builds binary dictionary from CSV word lists\n- `build_all_languages.py` — Batch builds all supported languages\n- `get_wordlist.py` — Extracts top N words from wordfreq for a language\n\nLanguage packs are simple .zip files containing:\n- `{lang}_enhanced.bin` — Binary dictionary with frequency data\n- `{lang}_enhanced.json` — Human-readable word list with frequencies\n- `manifest.json` — Metadata (language code, version, word count)\n\n**Pre-built Language Packs:**\nAvailable in [`scripts/dictionaries/`](./scripts/dictionaries/) for testing, or download directly from the app.\n\n\u003cdiv align=\"center\"\u003e\n\n#\n\n\u003cimg src=\"./docs/banners/social_preview.png\" width=\"99%\" /\u003e\n\n# 📖 Documentation\n\n\u003c/div\u003e\n\n- **[User Guide Wiki](https://tribixbite.github.io/CleverKeys/wiki/)** — 38-page comprehensive documentation\n- **[Feature Specifications](./docs/specs/)** — Technical documentation for developers\n- **[Changelog](./CHANGELOG.md)** — Version history and release notes\n- **[Roadmap](./ROADMAP.md)** — Planned features and development path\n\n\u003cdiv align=\"center\"\u003e\n\n# 📚 Tech Stack \u0026 Open-source Libraries\n\n\u003c/div\u003e\n\n- Minimum SDK level 26 (Android 8.0+)\n- [Kotlin](https://kotlinlang.org/) based — 100% Kotlin, zero Java\n- [ONNX Runtime](https://onnxruntime.ai/) — Microsoft's cross-platform inference engine\n- [Kotlin Coroutines](https://github.com/Kotlin/kotlinx.coroutines) — Asynchronous processing\n- [Flow](https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.flow/) — Reactive data streams\n- [Material 3](https://m3.material.io/) — Google's latest design system\n\n\u003cdiv align=\"center\"\u003e\n\n# 🔧 Building from Source\n\n\u003c/div\u003e\n\n### Requirements\n- Android SDK (API 26+)\n- Gradle 8.6+\n- Kotlin 1.9.20\n- JDK 17\n\n### Commands\n```bash\n# Clone repository\ngit clone https://github.com/tribixbite/CleverKeys.git\ncd CleverKeys\n\n# Debug build\n./gradlew assembleDebug\n\n# Run tests\n./gradlew test\n\n# APK location\n# build/outputs/apk/debug/cleverkeys.apk\n```\n\n### Termux Users\nUse the included build script which handles ARM64-specific AAPT2:\n```bash\n./build-on-termux.sh\n```\n\n\u003cdiv align=\"center\"\u003e\n\n# 🧠 The ML Model\n\n\u003c/div\u003e\n\nCleverKeys uses a custom transformer neural network model for gesture recognition:\n\n| Component | Details |\n|-----------|---------|\n| Architecture | Encoder-Decoder Transformer |\n| Encoder | Processes swipe trajectories (x, y, velocity, acceleration, nearest keys) |\n| Decoder | Generates word predictions from encoded features |\n| Format | ONNX (cross-platform, optimized inference) |\n| Runtime | ONNX Runtime 1.20.0 with XNNPACK acceleration |\n| Total Size | ~13MB (encoder + decoder) |\n\nTraining code, model architecture, and datasets: **[CleverKeys-ML](https://github.com/tribixbite/CleverKeys-ML)**\n\n\u003cdiv align=\"center\"\u003e\n\n# ☕ Buy me a coffee\n\nThis application is completely free and open source. If you want to support continued development, you can send a donation via the methods below:\n\n| \u003c/br\u003e ![Solana](https://img.shields.io/badge/Solana-9945FF?style=for-the-badge\u0026logo=solana\u0026logoColor=white) \u003cbr/\u003e \u003cbr/\u003e `triQem2gDXHXweNceTKWGfDfN6AnpCHmjR745LXcbix` \u003cbr/\u003e \u003cbr/\u003e |\n|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|\n\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n# ❤️ Credits \u0026 Acknowledgments\n\n\u003c/div\u003e\n\n### Unexpected Keyboard\nCleverKeys began as a fork of [Unexpected Keyboard](https://github.com/Julow/Unexpected-Keyboard) by Jules Aguillon ([@Julow](https://github.com/Julow)). The original is an excellent, highly customizable keyboard with support for 100+ layouts.\n\nOur projects have since diverged significantly (~900 commits apart):\n- Complete rewrite from Java to Kotlin with coroutines and Flow\n- Neural network gesture typing (ONNX transformer model)\n- Full clipboard system (unlimited history, pinning, todos, tags, inline editing, regex search, media)\n- Offline GIF panel with FTS4 search\n- Multi-language simultaneous prediction with per-language dictionary management\n- Autocorrect with contraction support\n- 1000+ automated tests (JVM + instrumented)\n\nIf you want a lightweight keyboard without gesture typing, we recommend the original Unexpected Keyboard.\n\n### Neural Network Model Research\n- **[Neural Swipe Typing](https://github.com/proshian/neural-swipe-typing)** by [@proshian](https://github.com/proshian) — Initial architecture inspiration\n- **[How We Swipe](https://github.com/nicosio2/how-we-swipe)** — Research paper and dataset on swipe behavior\n- **[FUTO Swipe Dataset](https://huggingface.co/datasets/nicosio2/FUTO-swipe-dataset)** — Hugging Face dataset\n\n\u003cdiv align=\"center\"\u003e\n\n# ⭐ Star History\n\n\u003ca href=\"https://star-history.com/#tribixbite/CleverKeys\u0026Date\"\u003e\n \u003cpicture\u003e\n   \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://api.star-history.com/svg?repos=tribixbite/CleverKeys\u0026type=Date\u0026theme=dark\" /\u003e\n   \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://api.star-history.com/svg?repos=tribixbite/CleverKeys\u0026type=Date\" /\u003e\n   \u003cimg alt=\"Star History Chart\" src=\"https://api.star-history.com/svg?repos=tribixbite/CleverKeys\u0026type=Date\" /\u003e\n \u003c/picture\u003e\n\u003c/a\u003e\n\n# 📢 Support\n\n\u003c/div\u003e\n\n- **Issues**: [GitHub Issues](https://github.com/tribixbite/CleverKeys/issues)\n- **Discussions**: [GitHub Discussions](https://github.com/tribixbite/CleverKeys/discussions)\n- **Security**: See [SECURITY.md](SECURITY.md)\n\n\u003cdiv align=\"center\"\u003e\n\n# ⚖️ License\n\n```\nCleverKeys - Neural Gesture Keyboard for Android\nCopyright (C) 2024-2026 tribixbite\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation, either version 3 of the License, or\n(at your option) any later version.\n```\n\n\u003c/br\u003e\n\u003c/br\u003e\n\n\u003cem\u003eBuilt with Kotlin, ONNX, and a commitment to privacy.\u003c/em\u003e\u003cbr/\u003e\n\u003cem\u003eDeveloped in Termux on Android.\u003c/em\u003e\u003cbr/\u003e\u003cbr/\u003e\n🦝✨\n\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftribixbite%2Fcleverkeys","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftribixbite%2Fcleverkeys","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftribixbite%2Fcleverkeys/lists"}