A modern, lightweight Android keyboard inspired by SwiftKey. Features glide typing, intelligent word prediction, theme customization, and clipboard management.
- Glide Typing — Swipe continuously across keys for fast text entry; path-aware word decoding using Damerau-Levenshtein distance
- Animated Feedback — Ripple effect on key tap, gradient fade on glide trail (v0.2+)
- Suggestion Pills — Rounded pill-shaped suggestions with preview text (v0.2+)
- Word Prediction — Context-aware next-word suggestions with bigram learning; fuzzy matching + frequency weighting
- Auto-Correct — Edit-distance-based error recovery with adaptive edit budget (handles transpositions like "teh" → "the")
- Multi-Layout — QWERTY, QWERTZ, AZERTY with long-press accent popups (á, à, â, ä, etc.)
- 10 Themes — AMOLED Black, Catppuccin Mocha, GitHub Dark, Swift Dark, Material Light, Pixel, Nord, Dracula, Tokyo Night, High Contrast WCAG AAA (dark-first default)
- Custom Themes — Create and edit themes with full color customization
- Emoji Grid — 60 tappable emoji (expandable in v0.4+)
- Clipboard Manager — Swipeable history of 25 recent items with delete-on-swipe
- Snippets/Text Expansion — Create custom trigger→expansion pairs for instant text insertion
- Learning Dictionary — Persistent per-word frequency tracking and bigram learning (local-only)
- Voice Input — Speech recognition with partial result streaming (v0.2+)
- Number Row — Dedicated digit row for quick number entry (v0.2+)
- Usage Analytics — Local-only keystroke, word, and correction tracking (no data leaves device)
- Accessibility — Full TalkBack support, key announcements, navigation support, reduced motion mode (v0.3+)
- Privacy Dashboard — View clipboard history, dictionary stats, and delete all data (v0.3+)
- Per-App Settings — Customize behavior per application (disable glide in games, adjust key height for email, etc.)
- Haptic & Sound Feedback — Customizable vibration (20ms default) and optional audio cues
OpenSwiftIME— Main InputMethodService; coordinates layout, prediction, and input flowKeyboardView— Custom View rendering keys, suggestions, and glide trail detectionPredictor— Scoring engine for next-word and auto-correct suggestionsGlideDecoder— Polyline-to-word decoding using anchored key subsequence matchingWordList+UserDictionary— Frequency-based word store + per-user bigram learningSettings+ClipboardHistory— Persistent user preferences and clipboard stateThemes+Layouts— 6 built-in themes and 3 keyboard layouts
./gradlew assembleReleaseOutput: app/build/outputs/apk/release/app-release.apk
- Download the APK from Releases
- Enable installation from unknown sources (Settings > Security)
- Install the APK
- Go to Settings > Languages & input > On-screen keyboard > Manage on-screen keyboards
- Enable OpenSwift
- Set OpenSwift as default input method
- Open any text field and start typing!
See SETUP.md for detailed setup, first-use tips, and troubleshooting.
- SETUP.md — Installation, first use, common tasks, troubleshooting
- GUIDE.md — Power-user reference (glide tips, snippets, custom themes, accents)
- CONTRIBUTING.md — For developers (dev setup, architecture, contributing features)
- ROADMAP.md — Planned features (v0.2–v1.0) and future ideas
- EXAMPLES.md — Snippet packs, theme palettes, per-app configs, accessibility setup
- Theme — 6 built-in themes + custom theme editor
- Keyboard Layout — QWERTY, QWERTZ, AZERTY
- Glide Typing — Enable/disable swipe-to-type
- Auto-Correct — Toggle fuzzy correction
- Auto-Capitalize — Auto-capitalize after punctuation
- Haptic Feedback — Vibration on keypress (20ms default)
- Sound Feedback — Optional audio cues
- Key Height — Adjust keyboard size (48–72 dp)
- User swipes across keys; samples collected at each keypress
- Anchor keys identified at gesture turning points
- Dictionary words scored by:
- Starting key match (required)
- Ending key match (required)
- Subsequence coverage (all anchors present in order)
- Word frequency + user history bonus
- Top result committed
For the current incomplete word:
- Prefix match wins (if word starts with typed prefix)
- Fuzzy match (Damerau-Levenshtein ≤ edit budget)
- Frequency weighting: log10(frequency + user-count + 1)
- Bigram boost: +1.5× if word likely follows previous word (user learns)
Applied on space/enter:
- If word length ≥ 3 and not in dictionary, find closest match
- Bounded edit distance; frequency-weighted
- Learns user's correction pattern
- Dictionary: 3500+ common English words in raw resource
- Prediction: O(n) scan with early exit (edit distance budget)
- Glide decoding: O(m·n) (m anchors, n dictionary words)
- Memory: ~8 MB (word list + user dictionary)
- Language: Kotlin
- UI: Custom View (KeyboardView) + Jetpack Compose (Settings)
- Persistence: SharedPreferences (settings, clipboard, user dictionary)
- Dictionary: 3500-word frequency-weighted English word list
- Targeting: minSdk 26 (Android 8), targetSdk 35
- Build System: Gradle 8+, ProGuard minification (R8)
- Zero cloud dependency — No network requests, no account required
- Local-only — All data stored in app's private SharedPreferences
- Open source — MIT licensed; code is auditable
- No telemetry — No analytics, no crash reporting, no ads
- Device learns — User bigrams and word frequencies stay on-device
- Clipboard history — Cleared on uninstall
See ROADMAP.md for detailed v0.2, v0.3, v0.4, v1.0 milestones.
v0.2 (Next): UI polish (ripple effects, animated suggestions), clipboard panel, number row toggle, onboarding wizard
v0.3: Multilingual support (German, French, Spanish), advanced input methods, language detection
v0.4: Cloud sync (optional), plugin system, custom input engines
v1.0: Stable release, performance optimization, expanded emoji pack
OpenSwift is open to community contributions. See CONTRIBUTING.md for:
- Development setup
- Code style guidelines
- How to add new features (example: adding a Dvorak layout)
- Pull request workflow
Ideas for contributions:
- New keyboard layouts (Dvorak, Colemak, Bépo, etc.)
- Language packs (German, French, Spanish word lists)
- Additional themes
- Accessibility improvements
- Performance optimizations
MIT — see LICENSE