Cipher is a local-first, privacy-focused personal finance application for Android. It automates expense tracking by extracting transaction data from SMS alerts, ensuring all sensitive information remains encrypted on-device.
- Data Privacy: No external servers or cloud synchronization.
- Security: Full database encryption using SQLCipher and biometric authentication.
- Offline Operation: No network permissions required.
- Automated Parsing: Heuristic engine for merchant and amount extraction from SMS.
- Insights: Subscription detection and spending trend analysis.
- Budgeting: Monthly spending limit configuration with visual health tracking.
- Management: Full manual control over the transaction ledger with undo support.
- Portability: Encrypted backups and standard CSV export.
- Platform: Android 7.0+ (API 24)
- UI: Jetpack Compose / Material 3
- Architecture: MVI (Model-View-Intent)
- Persistence: Room with SQLCipher
- Dependency Injection: Hilt
Open the project in Android Studio (Compile SDK 35). Run ./gradlew :app:assembleDebug to build the debug APK.
- Turn off Play Protect: Play Store → Profile → Play Protect → Settings → turn off "Scan apps with Play Protect".
- Allow installs from unknown sources for the app you'll use to install the APK (Chrome, Files, etc.): Settings → Apps → Special app access → Install unknown apps → select installer → Allow from this source.
- Install the APK (tap it in a file manager or run
adb install path/to/app.apk). - Open Cipher — the app will request SMS permission. Grant it.
- If the SMS permission is shown as restricted and can't be granted, enable restricted access: Settings → Apps → Special app access → (look for "Allow access to restricted settings") → select Cipher → enable → return to Cipher and grant SMS permission.
- Turn Play Protect back on if you want.
That's it — Cipher works once SMS permission is granted.
For version history, see RELEASE_NOTES.md.