SwiftFloris is a privacy-first Android keyboard app inspired by Microsoft SwiftKey, built on FlorisBoard's proven IME architecture with modern Material Design 3, offline gesture typing, and secure voice input.
Zero cloud processing. Zero telemetry. All features work offline.
| Feature | Capability | Privacy |
|---|---|---|
| Gesture Typing | Drag to type entire words | 100% offline |
| Voice Input | Speech-to-text with FUTO | 100% offline, no cloud |
| Spell Check | Multi-language corrections | Local dictionary only |
| Clipboard | Encrypted history (50 items) | AES-256 GCM, on-device only |
| Themes | 4 professional color schemes | No telemetry |
Powered by FUTO Voice Input — a privacy-respecting, on-device speech recognizer:
- ✅ 100% Offline — No internet required, no audio uploaded
- ✅ 16+ Languages — EN, DE, FR, ES, IT, PT, JP, KR, ZH, RU, PL, SV, NL, TR, and more
- ✅ Based on Whisper — OpenAI's open-source speech model
- ✅ Works on Debloated ROMs — Independent of Google Play Services
- ✅ Lightweight — Efficient local processing on any Android device
Setup: FUTO Voice Input Guide
Type entire words by dragging your finger across the keyboard:
- ✅ Live word prediction during gesture motion
- ✅ Configurable sensitivity (0-100% adjustment)
- ✅ Visual trail with fade animation
- ✅ Fully offline — no API calls, completely private
- ✅ Intelligent corrections with automatic backspace handling
Guide: Gesture Typing Best Practices
- Auto-Capitalization — Intelligent sentence-aware capitalization after
.,!,? - Spell Checking — Edit-distance algorithm (Levenshtein distance ≤2)
- Word Suggestions — Context-aware predictions with bigram analysis
- Multiple Layouts — QWERTY, QWERTZ, AZERTY, and locale-specific
- Haptic Feedback — Enhanced vibration with user adjustment
- Multi-Language — Full support for 100+ languages via FlorisBoard
Encrypted, secure clipboard with quick-access:
- AES-256 GCM encryption — Military-grade protection
- Per-app tracking — See which app each clip came from
- Max 50 items — Auto-cleanup of old entries
- One-tap insert — Quickly paste recent clips
- Local storage only — No cloud sync, no network access
- Nord — Arctic, north-bluish palette
- Tokyo Night — Neon-inspired vibrant colors
- Dracula — Dark, elegant purple and pink
- Catppuccin Mocha — Warm, modern aesthetic
All themes support:
- Dark/light mode auto-switching
- Material Design 3 adaptive colors
- Custom accent colors
- Full theme editor for fine-tuning
Keyboard Settings
- Keyboard layouts and subtypes
- Key size and spacing
- Sound and vibration feedback
- Gesture detection sensitivity
- Dictionary management
Display & Appearance
- 4 theme packs with variants
- Light/dark mode toggle
- Adaptive icon system
- Custom gesture trail duration
Advanced
- Clipboard history encryption
- Physical keyboard support
- Theme editor (create custom themes)
- Language pack manager
- Backup and restore (full settings export)
Obtainium tracks GitHub Releases directly and notifies you the moment a new SwiftFloris APK ships — no Play Store, no F-Droid mirror lag, no manual polling.
One-tap subscribe:
obtainium://app/{"id":"dev.patrickgold.florisboard","url":"https://github.com/SysAdminDoc/SwiftFloris","author":"SysAdminDoc","name":"SwiftFloris","preferredApkIndex":0,"additionalSettings":"{\"includePrereleases\":false,\"fallbackToOlderReleases\":true,\"trackOnly\":false,\"versionDetection\":true,\"apkFilterRegEx\":\"app-release.*\\\\.apk\"}"}
Open the link above on a device with Obtainium installed (or paste it into Obtainium's "Add app from URL" field). Obtainium will subscribe to this repository's GitHub Releases feed and auto-prompt for installs on each new tag.
- Download the latest APK from Releases
- Install on your Android device (Android 8.0+)
- Also install FUTO Voice Input for voice input feature:
git clone https://github.com/SysAdminDoc/SwiftFloris.git
cd SwiftFloris
./gradlew assembleDebug
adb install app/build/outputs/apk/debug/app-debug.apk- Open Settings → System → Languages & input
- Tap Virtual keyboard (or On-screen keyboard)
- Select SwiftFloris
- Grant permissions as prompted
Tip: Grant RECORD_AUDIO permission to use voice input with FUTO Voice Input
- FUTO Voice Input Setup — Complete voice input guide with troubleshooting
- Gesture Typing Guide — Swipe typing tips, best practices, FAQ
- Complete Features — Detailed feature inventory and implementation status
- Multilingual Support — Multi-language spell checking guide
- Changelog — Release notes for all versions
Technology
- Jetpack Compose — Declarative, reactive UI
- Material Design 3 — Modern Android design system
- Kotlin + Coroutines — Async operations, type-safe
- Room Database — Settings and preferences persistence
- Encrypted SharedPreferences — Secure storage for sensitive data
Minimum Requirements
- Android 8.0+ (SDK 26)
- Min Target: Android 15 (SDK 36)
- Gradle 8.x, Java 17+, Kotlin 2.0+
# Install Android SDK 26+ (Android Studio)
# Install Java 17 or later
# Install Gradle 8.x (included with Android Studio)# Debug build (for testing)
./gradlew assembleDebug
# Release build (unsigned)
./gradlew assembleRelease
# Clean build
./gradlew clean
# Run tests
./gradlew testSigned Release Build
# Requires keystore.jks with proper alias and password
./gradlew assembleRelease -Pandroid.injected.signing.store.file=keystore.jks \
-Pandroid.injected.signing.store.password=$STORE_PASS \
-Pandroid.injected.signing.key.alias=$KEY_ALIAS \
-Pandroid.injected.signing.key.password=$KEY_PASSSwiftFloris requests these Android permissions:
| Permission | Purpose | Required? |
|---|---|---|
INPUT_METHOD |
IME functionality | ✅ Yes |
VIBRATE |
Haptic feedback | Optional |
RECORD_AUDIO |
Voice input with FUTO | Optional (needed for voice) |
BIND_NOTIFICATION_LISTENER |
App-aware features | Optional |
Privacy note: SwiftFloris never connects to the internet. All permissions are used locally on your device.
- ✅ No cloud sync — Everything stays on your device
- ✅ No telemetry — No usage tracking or analytics
- ✅ No ads — Open-source, no advertising
- ✅ No accounts — No login or registration needed
- ✅ Offline-first — Works without internet connection
- Clipboard history — AES-256 GCM encryption
- Settings — Encrypted SharedPreferences
- Voice input — Handled entirely by FUTO (offline processing)
- GitHub — Full source code available
- Apache License 2.0 — Permissive, community-friendly license
- Auditable — Security researchers can review the code
Typical latencies on mid-range Android device:
| Operation | Latency | Notes |
|---|---|---|
| Auto-capitalization | <5ms | No I/O required |
| Spell check suggestion | <100ms | Dictionary cache |
| Word prediction | <50ms | LRU + bigram cache |
| Gesture recognition | <200ms | End-to-end |
| Voice transcription | 2-10s | Depends on FUTO model |
| Clipboard paste | <200ms | Depends on text size |
- ✅ Auto-capitalization (sentence-aware)
- ✅ Spell checking and suggestions
- ✅ Gesture typing (all directions)
- ✅ Voice input (with FUTO)
- ✅ Clipboard encryption/decryption
- ✅ Theme switching (all 4 themes)
- ✅ Haptic feedback
- Android 16 (Samsung device, debloated ROM)
- Google Pixel (recommended for full compatibility)
SwiftFloris/
├── app/
│ ├── src/main/
│ │ ├── kotlin/dev/patrickgold/florisboard/
│ │ │ ├── FlorisApplication.kt (App entry point)
│ │ │ ├── FlorisImeService.kt (IME service)
│ │ │ ├── ime/
│ │ │ │ ├── keyboard/ (Layout & rendering)
│ │ │ │ ├── input/ (Input processing)
│ │ │ │ ├── clipboard/ (History feature)
│ │ │ │ ├── voice/ (Voice input)
│ │ │ │ ├── nlp/ (Spell check, predictions)
│ │ │ │ └── theme/ (Theming system)
│ │ │ └── app/
│ │ │ ├── FlorisAppActivity.kt (Settings activity)
│ │ │ └── settings/ (Settings screens)
│ │ └── res/
│ │ ├── drawable/ (Icons, logos)
│ │ └── values/ (Colors, strings, themes)
│ └── build.gradle.kts
├── settings.gradle.kts
├── CHANGELOG.md (Release notes)
├── FEATURES.md (Detailed features)
├── FUTO_VOICE_INPUT.md (Voice input guide)
├── GESTURE_TYPING.md (Gesture typing guide)
└── README.md (This file)
We welcome contributions! Areas for enhancement:
- 🎨 Additional themes and color schemes
- 🌍 New language support for spell checking
- 🔧 Performance optimizations
- 🐛 Bug fixes and stability improvements
- 📚 Documentation and guides
- ♿ Accessibility improvements
How to contribute:
- Fork the repository
- Create a feature branch (
git checkout -b feature/my-feature) - Make your changes
- Test on a real device
- Submit a pull request with a clear description
See CONTRIBUTING.md for detailed guidelines.
→ See Gesture Typing Guide
→ See FUTO Voice Input Guide
- Ensure FUTO Voice Input is installed from Play Store or F-Droid
- Check microphone permissions in Settings
- Verify your ROM hasn't removed the speech recognizer
- Clear app cache: Settings → Apps → SwiftFloris → Storage → Clear Cache
- Reinstall the app
- Check device storage (need ~100MB free)
- Ensure dictionary is loaded: Settings → Languages → Dictionary Manager
- Check language is enabled for your locale
- Enable spell checking in Settings → Typing
- Force close the keyboard app
- Open a new text field to reload the keyboard
- Try a different theme to test
v1.5.0 — May 4, 2026
- ✅ FUTO Voice Input integration (100% offline, 16+ languages)
- ✅ Removed Google Speech Services (no longer needed)
- ✅ Added comprehensive voice input documentation
v1.4.0 — Gesture Typing
- ✅ Gesture/swipe typing enabled by default
- ✅ Configurable sensitivity (0-100%)
- ✅ Visual trail with fade animation
- ✅ Comprehensive gesture typing guide
v1.3.0 — Voice Input & Multilingual
- ✅ Voice-to-text input integration
- ✅ Multi-language spell checking infrastructure
- ✅ Enhanced haptic feedback
v1.2.0 — Auto-Capitalization Fix
- ✅ Fixed auto-cap for subsequent sentences
- ✅ Proper SHIFTED_AUTOMATIC state handling
- ✅ Production-ready v1.2.0 release
v1.1.0 — Initial Release
- ✅ FlorisBoard foundation
- ✅ SwiftKey-inspired branding
- ✅ 4 premium themes
- ✅ Encrypted clipboard history
See CHANGELOG.md for detailed release notes.
Copyright 2026 SwiftFloris Contributors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
- FlorisBoard — Solid IME architecture and foundation
- FUTO — Privacy-first voice input technology
- Jetpack Compose and Material Design 3 — Modern Android UI
- OpenAI Whisper — Speech recognition engine (used by FUTO)
- Open-source community — Inspiration and contributions
🚀 Active Development — SwiftFloris is actively maintained with regular updates.
v1.5.0 is stable and ready for production use. We welcome feedback, bug reports, and contributions!
| Resource | Link |
|---|---|
| GitHub | https://github.com/SysAdminDoc/SwiftFloris |
| Issues | https://github.com/SysAdminDoc/SwiftFloris/issues |
| Releases | https://github.com/SysAdminDoc/SwiftFloris/releases |
| FUTO Voice | https://voiceinput.futo.org/ |
| FlorisBoard | https://github.com/florisboard/florisboard |
Made with ❤️ for privacy and offline-first computing