Type a shortcut. Insert anything.
A free, offline, text expander for Android that works across your apps.
Send custom messages with a trigger. Want to quickly type out the current date in a specific format? Or do you want your emojis to replace your triggers? You can do it all cross platform with espanso but now on android too with this app!
Expanda saves you from typing the same things over and over.
Your email when someone asks for it. Your address for a delivery. Your IBAN when a friend owes you money. The WiFi password every time someone visits. Your phone number...
Expanda lets you save all of that behind a short shortcut. Type the shortcut anywhere: WhatsApp, Gmail, Chrome, Notes, a bank app, and it gets replaced instantly.
| You type | Expanda writes |
|---|---|
/mail |
diego@example.com |
/phone |
+34 612 345 678 |
/addr |
Calle Mayor 12, 3B, 28013 Madrid |
/iban |
ES91 2100 0418 4502 0005 1332 |
/wifi |
WiFi: MiCasa · Password: welcome2024 |
/sorry |
A random polite decline from a list of 3–4 you wrote |
/today |
Friday, 29 August 2026 |
/sig |
Best regards, + your name + phone |
/late15 (or /late45, etc.) |
Sorry, running 15 min late! 🙏 |
Set them up once. Save yourself thousands of taps.
Warning
Expanda was built quickly for personal use with a lot of AI help. I'm not an Android developer, so the code has limited human review and bugs may remain. I'm sharing it in case others find it useful; reports and PRs welcome.
![]() Use snippets anywhere |
![]() Create a snippet |
- Install the APK from GitHub Releases (Android 8.0+).
- Open Expanda — it'll walk you through enabling the Accessibility service.
- Create your first snippet and try it in WhatsApp.
Android 13+ sideload heads-up: if Android blocks Accessibility, open App info → ⋮ → Allow restricted settings. Expanda tells you this in-app too.
Everyday use
- Works in any editable field, across all your apps
- Suggestion popup as you type, with a preview of what will be inserted
- Backspace right after an expansion to undo it
- Quick Settings tile to pause/resume Expanda without opening the app
Smart snippets
- Forms, today's date, clipboard content, random picks and nested snippets — with control over where the cursor lands
- Regex triggers with named captures (e.g.
,late15extracts15) - Playground to test snippets safely without touching your real library
Sync, backup & sharing
- Espanso-compatible YAML — share a
match/folder with your desktop setup, edits go both ways - Full app backup, plus YAML and CSV import/export
Control & polish
- Per-app exclusions (skip banking apps, password managers, whatever you want)
- Tags, search and bulk edit for large libraries
- Light, dark and AMOLED themes; text scaling; optional haptic feedback
Expanda uses only these Android permissions and protected capabilities:
| Permission | Purpose |
|---|---|
| Accessibility service | Reads changes in active editable fields and replaces matching shortcuts. Password fields are ignored. |
| Battery optimization exemption request | Opens Android's battery settings so you can allow reliable background operation. |
| Vibration | Provides optional haptic feedback after an expansion. |
The Accessibility service is a special service capability rather than a regular manifest permission. Expanda does not declare INTERNET, so the app cannot send snippets, typed text, clipboard history or usage statistics over the network through Android's standard networking APIs.
The clipboard history and local usage statistics are enabled by default and can be disabled in Settings. See Privacy for stored data and deletion instructions, and Permissions for the complete permission rationale.
Expanda works in any app that exposes its editable fields through Android's Accessibility API. That covers the vast majority of native apps (WhatsApp, Telegram, Gmail, Discord, Google Calendar, most notes apps, Chrome web pages, etc.). A few apps route text through their own document model or a canvas, which Android's Accessibility API cannot fully reach; those are documented below.
Works well
- Native
EditTextwidgets (WhatsApp, Telegram, Gmail compose, Discord, Google Calendar, Xiaomi Notes) - Most WebView-based editors (Chrome page inputs, Capacitor / Cordova apps)
Partial
- Obsidian mobile: the app wraps CodeMirror in a Capacitor bridge that reports itself as a plain
EditTextto Android. Expansions do fire, but the cursor sometimes lands in the wrong position and the undo-with-backspace is unreliable. Fixing this properly needs the newerFLAG_INPUT_METHOD_EDITORAPI and is tracked as a future improvement. - Chrome address bar: Chrome never emits
TYPE_VIEW_TEXT_CHANGEDfor the omnibox, so triggers typed there are not detected. Page inputs inside Chrome do work. - Xiaomi Notes: expansions work but newlines can be dropped by the app's own formatting layer.
Doesn't work
- Google Docs / Sheets / Slides: they draw the document on a canvas and expose no editable text to accessibility. There is no reliable way to expand inside them today.
- Any editor that suppresses accessibility events entirely (some secure keyboards, password managers, banking apps). This is intentional on their side; Expanda skips password fields on purpose.
OEM background restrictions
Some manufacturers stop accessibility services when the app hasn't been used for a while. Expanda can open the relevant Android battery settings, but the exact option name depends on the device.
Please use the bug report template for compatibility problems. Include the Android version, device, keyboard, target app and exact steps without attaching private text.
You need JDK 17 and the Android SDK with API 36 installed.
git clone https://github.com/diegomarzaa/expanda.git
cd expanda
export JAVA_HOME=/path/to/jdk-17
export ANDROID_HOME=/path/to/android-sdk
./gradlew :app:assembleDebugRun the local checks with:
./gradlew :app:testDebugUnitTest
./gradlew :app:lintDebugRelease signing uses a local, ignored signing.properties file. The repository contains no signing keys. See BUILDING.md for the full setup and release-signing format.
Current release: 0.3.1. It rebuilds Expanda around Espanso-compatible YAML, a new match model, tutorial onboarding, a Playground, a Source tab, and full local backups. Upgrading from 0.2.0 migrates your snippets automatically; syntax changes are documented in CHANGELOG.md.
See CHANGELOG.md for release history and SECURITY.md for private vulnerability reports.
I started Expanda because I could not find an open-source Android text expander that covered the workflow I wanted. The project also became a way to learn about accessibility services, background execution, overlays and Android text editing.
Typing Hero provided the main product and workflow reference. Expandroid also influenced the project. Expanda is an independent implementation and is not affiliated with either project.
If Expanda is useful to you, consider buying me a coffee on Ko-fi.
Bug reports, documentation improvements and pull requests are welcome. Read CONTRIBUTING.md before opening a change.
Expanda 0.3.0 and later are free software under GNU GPLv3. If you distribute a modified build, you must provide its corresponding source under the same license. The published 0.2.0 release remains available under MIT because changing the license cannot revoke permissions already granted for that version.









