Skip to content

Releases: SysAdminDoc/SwiftFloris

SwiftFloris v1.7.5 — SwiftKey indistinguishability wave

10 May 01:18

Choose a tag to compare

SwiftFloris v1.7.5 — SwiftKey indistinguishability wave

Released: 2026-05-09
Versioning: 1.7.4 → 1.7.5 (versionCode 174 → 175)

This release closes the new N12 "SwiftKey indistinguishability" roadmap section plus a chunk of the original Next-1 SymSpell item — twelve commits, all on-device, no Copilot, no cloud, no account. The goal: a user can't tell whether they're typing on SwiftKey or on SwiftFloris.

See SWIFTKEY_PARITY_RESEARCH.md for the underlying research.


What's new

Surface fixes (the two paper-cuts you'd notice in 30 seconds)

  • Auto-space after punctuation defaults to ON. Period / comma / ? / ! now insert a trailing space without a settings tweak. Existing user overrides still win, so already-installed users toggle in Settings → Typing.
  • Suggestion-tap haptic. Tapping an autocorrect / suggestion strip word now fires the same key-press vibration as tapping a letter key, with keyLongPress() on the long-press branch.

N12.1 — Adaptive touch model

New AdaptiveTouchModel keeps per-subtype, per-key Welford-online stats of the user's actual tap-offset distribution (normalised by key half-size). After ≥30 samples per key, hit-tests bias toward where the user actually taps using a 2D-Gaussian log-likelihood — the SwiftKey "feels accurate" effect, all on-device, no offsets ever written to disk.

N12.2 — Next-word predictions via PersonalBigramStore

New per-locale bigram counter persisted to <filesDir>/personal_bigrams_<localeTag>.tsv. Caps: 2,000 prev words per locale, 16 next words per prev, max count 1,000, MIN_COUNT=2. The suggestion strip is no longer empty after a space — it shows the top bigram completions for the previous word.

N12.3 — Multi-language hot-switch

When a subtype has secondary locales enrolled (SubtypeEditorScreen already supports this), LatinLanguageProvider.suggest queries every enrolled locale's dictionary and merges per-locale candidates with a prior of 1.0 for any locale that recognised the typed word and 0.4 for those that didn't. isEligibleForAutoCommit is gated to recognising locales — no more wrong-language autocorrect mid-sentence.

N12.4 — Flow Through Space

GlideTypingGesture.Detector.signalWordBoundary() snapshots and resets the trace mid-stroke; the controller fires it when the trace re-enters the SPACE key after first leaving it. Phantom-space inserts the " " between committed words, classifier resets between words, trail-fade visually punctuates each. Glide a word, drag finger across the space bar, glide the next word — all without lifting.

N12.5 — Trigram next-word predictor

New PersonalTrigramStore is a per-locale (prev2, prev1) → next counter persisted to <filesDir>/personal_trigrams_<localeTag>.tsv. Caps: 4,000 contexts, 12 next words per context. KeyboardManager.learnIfAllowed now learns both bigrams and trigrams via a sliding two-word window. After typing the quick brown fox a couple of times, typing the quick surfaces brown as the top suggestion.

N12.6 — Typing stats screen

New Settings → Typing → "Typing stats" screen reads three on-device numbers off-thread:

  • Words-learned count + top-10 personal-dictionary entries by frequency
  • Total bigram-store size on disk
  • Adaptive-touch-model session sample count

No data leaves the device.

N12.7 — Cold-start bootstrap from dictionary frequency

LatinDictionarySnapshot.topByFrequency(n) lazily caches the top-64 high-frequency dictionary words. Suggestions now layer Tier 0 (trigram, 0.80–0.45) → Tier 1 (bigram, 0.55–0.20) → Tier 2 (dict bootstrap, 0.30–0.55). Result: never-empty suggestion strip on cold-start and after sentence-ending punctuation. Sentence-start detection auto-capitalises the first letter.

N12.8 — Adaptive touch model feeds the glide classifier

AdaptiveTouchModel.adjustedCenter(...) returns user-personalised pixel centers. StatisticalGlideTypingClassifier.findNClosestKeys (matching) and Pruner.generateIdealGestures (template) both consult adjustedCenter() instead of key.visibleBounds.center. Bias clamped to ±0.5×half so a heavily-skewed learner can't drag the template outside the visible key. Gives glide the same per-user spatial bias N12.1 already gives taps.

N12.9 — Sentence-case suggestions

After ., !, or ? (or empty input), every next-word suggestion's first letter is capitalised. SwiftKey-parity at sentence start.

N12.10 — Long-press suggestion to forget

WordSuggestionCandidate from next-word predictions and personal-dict suggestions now both ship isEligibleForUserRemoval = true. New DictionaryManager.forgetWord, PersonalBigramStore.forget, PersonalTrigramStore.forget are all consulted by LatinLanguageProvider.removeSuggestion. Long-press a noisy suggestion → it's gone from personal dict, bigrams, and trigrams in one stroke.

Next-1.A — SymSpell delete-index for distance-1 corrections

New pure-Kotlin SymSpellIndex.kt. LatinDictionarySnapshot.symSpellIndex is by lazy so the build (~100–300 ms over the 117k-word EN dict) lands on first correction call. LatinDictionarySuggester.knownEdits1 now calls dictionary.symSpellIndex.candidatesAtDistance1(input) instead of generating Norvig's L · 54 candidate strings per call — ~50× speedup on the per-keystroke correction path.

Next-1.B — Distance-2 high-frequency auto-commit

New AutoCommitMinFrequencyDistance2 = 0.92 threshold. Distance-2 corrections now auto-commit on space when the candidate is in the very common bucket (~top 3k SCOWL words). Closes the long-word-typo gap: recieved → received, tommorrow → tomorrow, seperate → separate, definately → definitely.


Settings reference

Every new behavior is gated behind a pref so power-users can opt out:

  • Typing → Adaptive touch model (default on)
  • Typing → Predict the next word (default on)
  • Typing → Multilingual suggestions (default on)
  • Gestures → Flow through space (default on)
  • Typing → Typing stats (link to the new screen)

Out of scope (explicit non-goals)

  • Microsoft Copilot / Editor / Tone
  • DALL-E sticker / Designer
  • Microsoft account login or sync
  • Federated learning aggregator
  • Anything that requires the INTERNET permission

Roadmap status

  • N12 SwiftKey indistinguishability — 10/10 ticked (12.5 absorbed into the trigram tier)
  • Next-1 SymSpell — 1.A and 1.B ticked, 1.C (full d2 SymSpell index) deferred pending field data
  • L1 On-device LLM (Gemma 3 270M Q4) — still the next big jump; multi-week
  • Next-3.1 Pre-trained KenLM 5-gram bootstrap — would give first-time users rich predictions before they've typed anything

Verification

  • ./gradlew :app:assembleDebug — green
  • ./gradlew :app:assembleRelease — green (signed when SIGNING_KEYSTORE_BASE64 is set; otherwise falls through to debug signing as documented in N6.2)
  • :app:verifyNoInternetPermission — green (no INTERNET permission added by any item)
  • adb-installed on local Pixel-class device, smoke-tested across all five new prefs

SwiftFloris v1.5.3 - Autocorrect Dictionary & Pronoun Fixes

05 May 21:19

Choose a tag to compare

SwiftFloris v1.5.3

Released: 2026-05-05

Changes

  • Expanded the built-in English autocorrect dictionary to 49,744 entries for stronger offline suggestions and spell correction.
  • Fixed immediate autocorrect for standalone i so it becomes I in the middle of sentences.
  • Fixed immediate autocorrect for common English contractions, including im -> I'm, ill -> I'll, id -> I'd, and ive -> I've.
  • Fixed the same contraction autocorrections when typed at the beginning of sentences after auto-capitalization, including Im, Ill, Id, and Ive.
  • Preserved all-caps acronym behavior so inputs such as ID and ILL are not rewritten as contractions.
  • Added regression coverage for the immediate autocorrect paths and Latin dictionary behavior.

Verification

  • :app:testDebugUnitTest
  • :app:lintDebug
  • signed release APK verification with Android apksigner
  • device install smoke test with adb install -r

APK Details

  • File: SwiftFloris-v1.5.3.apk
  • SHA-256: 1d5f414ab1c0decd74d97c00aadea2769bc07d19010fdbc76f4ed2caaca1e777
  • Signing certificate SHA-256: b5d537420ded9e11382b3df17dc3616f212b9d9f35138e4fbb3f2adffe50f70a

v1.5.2 — Spell Suggestions & Autocorrect Fixed

04 May 16:00

Choose a tag to compare

Fixed Latin autocorrect and spell suggestions. Spell checker and word prediction now working correctly.

SwiftFloris v1.4.0 — Gesture Typing Enabled

04 May 08:16

Choose a tag to compare

SwiftFloris v1.4.0 — Gesture Typing Stabilization

Release Date: 2026-05-05

🎯 Major Feature: Gesture/Swipe Typing

Gesture typing is now enabled by default in SwiftFloris v1.4.0. Type entire words by dragging your finger across the keyboard!

What's New

  • Gesture Typing: Type words by swiping across the keyboard (FlorisBoard GlideTypingManager fully integrated)
  • Configurable Sensitivity: 0-100% slider to fine-tune gesture detection
  • Visual Feedback: Gesture trail with customizable fade duration (0-500ms)
  • Live Prediction: See word suggestions in real-time during gesture
  • Offline & Private: No API calls, fully private, works offline

Settings

New Gesture Typing panel in Settings → Gestures with:

  • Enable/Disable toggle
  • Gesture trail visibility
  • Trail fade duration (0-500ms)
  • Prediction preview toggle
  • Sensitivity adjustment (0-100%)

Documentation

  • Gesture Typing Guide — Complete user guide with best practices, troubleshooting, FAQ
  • README — Updated with gesture typing feature entry

Technical Details

  • FlorisBoard GlideTypingManager: Enabled by default (glide__enabled = true)
  • Sensitivity preference: Added int preference (0-100%, default 50)
  • GesturesScreen.kt: Fixed PreferenceGroup with proper Compose declarations
  • Build: Release APK, 9.6 MB unsigned

Installation

Download �pp-release-unsigned.apk and install on Android 8.0+

Known Limitations

  • FlorisBoard's gesture engine is algorithm-based (not ML), may differ from Gboard/SwiftKey
  • Gesture accuracy varies by device and typing style
  • Device testing for latency/accuracy metrics in progress

Next Steps (v1.4.1+)

  • Sensitivity slider backend integration with GlideTypingClassifier
  • Device testing and accuracy profiling (Pixel, Samsung, mid-range devices)
  • False positive testing (gesture vs. normal tap interaction)
  • Termux compatibility verification

Tested: Build successful, gesture typing UI functional. Device testing pending.

SwiftFloris v1.3.0 - Voice Input Release

04 May 07:58

Choose a tag to compare

🎤 Voice Input Feature

SwiftFloris v1.3.0 adds voice-to-text capability powered by Android's built-in Speech Recognizer API.

Major Features:

  • 🎤 Speech-to-text input (no API key required)
  • 🌍 Multilingual support (EN, DE, FR, ES, IT, PT)
  • 📊 Real-time confidence scoring
  • ⚡ Works offline on compatible devices
  • ✨ Animated UI with pulse effect

What's Included:

  • Voice input button in keyboard toolbar
  • Automatic language detection from keyboard subtype
  • Comprehensive error handling with user guidance
  • Material Design 3 UI integration

Documentation:

Installation:

  1. Download the APK from this release
  2. Install on your Android 8.0+ device
  3. Enable SwiftFloris as your default keyboard
  4. Grant microphone permission when prompted

Testing Checklist:

  • Voice input button visible and responsive
  • Recording starts/stops properly
  • Real-time feedback during transcription
  • Confidence scores display correctly
  • Multi-language support verified
  • Error messages clear and helpful
  • Build passes all checks

See CHANGELOG.md for full release notes.


Built with ❤️ by SwiftFloris Team

SwiftFloris v1.2.0 — Auto-Capitalization Parity

04 May 07:39

Choose a tag to compare

SwiftKey Typing Logic Parity

Major Achievement: SwiftFloris now matches SwiftKey's auto-capitalization behavior with intelligent sentence awareness.

What's New in v1.2.0

🔤 Smart Auto-Capitalization

  • Automatically capitalizes the first letter after sentence-ending punctuation (. ! ?)
  • Properly handles multiple consecutive sentences
  • Fixed state machine bug that prevented second-sentence capitalization
  • Matches SwiftKey's typing experience exactly

🎯 Technical Improvements

  • Preserved SHIFTED_AUTOMATIC state during async callbacks
  • Fixed race condition in state machine
  • Enhanced sentence awareness logic

🎨 Existing Features

  • 4 premium themes (Nord, Tokyo Night, Dracula, Catppuccin)
  • Encrypted clipboard history
  • Enhanced haptic feedback
  • Material Design 3 throughout
  • Multi-language support

Installation

Download app-release-unsigned.apk and install on your Android device (Android 8.0+).

Requirements

  • Android 8.0+ (Oreo)
  • ~20MB storage

Enjoy SwiftKey-quality typing!