Skip to content

Repository files navigation

Expanda logo

Expanda

Free and open-source text expansion for Android.

Create snippets, dynamic templates and text actions, then use them in any editable field.

Latest release Get Expanda on Obtainium MIT License Android 8.0 or newer No Internet permission No ads or analytics

Warning

I am not an Android developer. I built Expanda quickly for my own use with extensive help from AI, so parts of the code have not received thorough human review and bugs may remain. I am sharing it because others may find it useful and because community feedback can make it better for everyone. Bug reports and pull requests are welcome.

See it in action

Using an Expanda snippet in another Android app
Use snippets anywhere
Creating a snippet in Expanda
Create a snippet

Why Expanda?

Expanda gives you reusable text without sending what you type to a server. The app has no Internet permission, accounts, ads, analytics or tracking SDKs. Snippet matching and expansion run on your device.

Expanda uses Android's Accessibility service to detect shortcuts and replace text in other apps. It ignores password fields and shows a clear explanation before opening Android's accessibility settings. Read Privacy and Permissions for the exact behavior.

How it works

  1. Create a snippet and assign a shortcut such as ;mail.
  2. Enable Expanda's Accessibility service.
  3. Type the shortcut in an editable field or select it from the suggestion popup.
Shortcut: ;meeting

Template:
Hi {FORM: NAME},

Can we meet on {DATE:+1:DAY:EEEE} at {TIME:HH:mm}?

{CURSOR}

Screenshots

Expanda snippets screen
Snippets
Expanda template editor
Template editor
Expanda suggestion popup
Suggestions
Expanda action library
Actions
Expanda action shortcut settings
Action settings
Expanda settings screen
Settings
Expanda appearance settings
Appearance

Features

  • Snippets with unique shortcuts, names, multiple tags and per-app exclusions.
  • Delimiter-based or instant expansion with optional case sensitivity.
  • Multiple templates with first, random, sequential and manual selection modes.
  • Dynamic tokens for cursor placement, clipboard text, dates, times, forms and nested snippets.
  • A movable suggestion popup with configurable matching, height, previews and text actions.
  • Built-in actions for text formatting, calculations, selection, deletion, cursor movement, clipboard operations and Android sharing.
  • Search, tag filters and bulk selection for managing snippets.
  • Optional local clipboard history with pinning and deletion controls.
  • Local usage statistics that you can disable.
  • JSON backup and CSV import/export.
  • Material themes using wallpaper colors, default colors or a custom color, plus light, dark and AMOLED modes.
  • Configurable text size, haptic feedback and a Quick Settings tile.

Dynamic tokens

Token Result
{CURSOR} Places the cursor at this position after expansion
{CLIPBOARD} Inserts the current clipboard text
{DATE:yyyy-MM-dd} Inserts a formatted date
{TIME:HH:mm} Inserts a formatted time
{FORM: NAME} Asks for a value when you use the snippet
{SNIPPET: shortcut} Inserts another snippet

Download and install

Download the APK from GitHub Releases. Expanda requires Android 8.0 or newer.

Android may ask you to allow installation from your browser or file manager. After installation, open Expanda and follow the in-app explanation before enabling its Accessibility service.

Updates must use an APK signed with the same certificate. Check APK verification if Android rejects an update or you want to verify the file.

Permissions and privacy

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.

APK verification

Official releases use the following identity:

Package ID: dev.diego.expanda
Signing certificate SHA-256:
8F:74:53:E5:C2:C8:F8:BC:F6:F8:F1:16:27:F1:7D:3F:43:F2:35:6C:CF:BF:C4:84:EA:07:20:DE:46:F2:D4:A2

The SHA-256 checksum of the official v0.2.0 APK is:

6ae7bd9a4ffd2d6a7b586ace4e1b9816344f5d5e3a4bb26f261bd22b7d9712ec  Expanda-v0.2.0.apk

The same value is stored in checksums/Expanda-v0.2.0.apk.sha256.

On a computer with Android SDK Build Tools installed:

sha256sum Expanda-v0.2.0.apk
apksigner verify --print-certs Expanda-v0.2.0.apk

Compatibility and limitations

Android apps, keyboards and manufacturer customizations expose editable fields in different ways. Direct replacement can fail in some editors; the optional compatibility fallback temporarily uses and restores the clipboard for those cases.

Some manufacturers stop accessibility services during background use. 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.

Build from source

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:assembleDebug

Run the local checks with:

./gradlew :app:testDebugUnitTest
./gradlew :app:lintDebug

Release 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.

Project status

Version 0.2.0 is the first stable public release. It covers the complete text-expansion workflow and has been tested through daily use and local automated checks.

The project was developed through an AI-assisted, vibe-coding workflow. Much of the generated implementation still needs deeper human review. Contributions that simplify the code, improve compatibility or strengthen privacy and testing are welcome.

See CHANGELOG.md for release history and SECURITY.md for private vulnerability reports.

Motivation and credits

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.

Contributing

Bug reports, documentation improvements and pull requests are welcome. Read CONTRIBUTING.md before opening a change.

License

Expanda is free software released under the MIT License. You may use, copy, modify, distribute and sell copies under the terms of that license.

About

Free and open-source Android text expander with offline snippets, dynamic templates and no Internet permission.

Topics

Resources

Contributing

Security policy

Stars

13 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages