Lexora: Building a Private, Offline Writing Keyboard for Android
Most writing assistants rely on cloud processing, which creates privacy concerns, network dependency, and delays during typing. I wanted to build a writing tool that could help people improve grammar, spelling, clarity, and tone directly inside the apps they already use, without requiring an account or sending their text to a server.
Technologies
Flutter · Dart · Kotlin · Android Input Method Editor · Riverpod · SQLite · Shared Preferences · Flutter Isolates · MethodChannel · GoRouter · Google Play Billing · Android ACTION_PROCESS_TEXT
Tags
- Flutter
- Android
- Dart
- Mobile Development
- Privacy
- Offline First
- Keyboard Development
- Performance Engineering
- Product Design
01
Problem
What had to be solved.
Most writing assistants rely on cloud processing, which creates privacy concerns, network dependency, and delays during typing. I wanted to build a writing tool that could help people improve grammar, spelling, clarity, and tone directly inside the apps they already use, without requiring an account or sending their text to a server.
The challenge was not only building a writing engine. The product also had to work as a keyboard people would genuinely choose to use every day.
02
My responsibility
What I owned.
I led the product and engineering work across the project, including product strategy, UX, Flutter application development, the on-device writing engine, Android keyboard integration, performance optimization, testing, visual design, and technical documentation.
03
Hard part
Where it got difficult.
The hardest part was balancing useful writing assistance with the constraints of a mobile keyboard.
Typing has an extremely low tolerance for latency. Analysis had to be fast enough to feel invisible, while the keyboard needed to provide familiar features such as glide typing, autocorrection, next-word suggestions, emoji support, cursor control, themes, and responsive key interactions.
I also had to make the privacy promise real at an architectural level. That meant no server for the writing engine, no account system, no background overlay, and no accessibility service.
04
What I built
The work that shipped.
I built Lexora as a Flutter application with a native Android input method.
The product includes:
- A custom Android keyboard with glide typing, autocorrect, next-word prediction, emoji search, themes, one-handed mode, and adjustable key settings
- An on-device writing engine for spelling, grammar, punctuation, clarity, concision, tone, readability, and language detection
- Context-aware writing actions such as Fix, Shorter, Friendly, Professional, Simplify, and Rewrite
- A compact suggestion strip above the keyboard, designed to show only the most relevant actions
- An editor for longer documents with individual, explainable suggestions and safe batch correction
- Android text-selection integration through ACTION_PROCESS_TEXT, allowing users to improve selected text and return it to the original app
- A compact lexicon optimized for mobile memory usage using UTF-8 byte storage and binary search
- A worker-isolate path for larger documents to keep the interface responsive
- Automated unit, widget, keyboard, integration, responsive, and performance tests
05
Result
What changed.
Lexora delivers writing assistance without relying on a network connection for its core features.
The writing engine is designed to handle message-sized content within a frame-budget-friendly window, while larger documents run outside the UI isolate. Performance tests track analysis, startup, rewriting, and artifact-size budgets so regressions are caught during development.
The finished product demonstrates that a writing assistant can be useful without collecting drafts, requiring a login, or placing a cloud round trip in the typing path.
Related work
The products and open-source work this study connects to.