Mood Cairns
* Switch to passphrase for future encrypted backups (8-char minimum).
* Throttle PIN verification on change and on backup export.
* Re-wrap DB key on PIN change to prevent database lockout.
Features
* Custom scales. Five built-in scales (Happiness, Anxiety, Stress, Boredom, Pain), each numeric and color-tagged. Add your own; archive the ones you don't want.
* Prompt windows. Define time-of-day windows (e.g. morning 08:00-12:00, evening 18:00-20:00). The app fires one notification per window per day at a randomized time inside it. Tap the notification to jump straight to the log entry screen.
* History and charts. Browse past entries, see per-scale trends over time.
* Encrypted on-disk storage. The mood database is encrypted at rest using SQLCipher. The key lives in memory only while the app is unlocked, and is wiped when you lock it.
* PIN + biometric lock. PIN-gated app entry, with optional biometric unlock. PIN is hashed with PBKDF2-HMAC-SHA256 (600k iterations) before being stored.
* Encrypted backups. Manual export writes an AES-GCM-encrypted JSON file to Documents/MoodCairns/. The encryption key is derived from your PIN with PBKDF2-HMAC-SHA256 (200k iterations) and a fresh per-backup salt embedded in the envelope, so any install (including a fresh one) can decrypt with the same PIN.
* Home-screen widget for one-tap mood logging.
Privacy contract
The app declares no network permissions. Without internet, the process literally cannot open a socket, which makes phone-home impossible regardless of what any included library tries to do.
The build enforces this, so a network permission can never be silently introduced by a dependency update.
If you want backups synced off-device, point Syncthing (or any file manager that can sync a folder) at Documents/MoodCairns/.
Source
Fully open source under GPL-3.0-only. Built on Kotlin, Jetpack Compose, Room, SQLCipher, and AndroidX.
- Author: lcdcode
- License: GNU General Public License v3.0 only
- Issue Tracker
- Source Code
- Build Metadata
- Reproducibility Status
Versions
Although APK downloads are available below to give you the choice, you should be aware that by installing that way you will not receive update notifications and it's a less secure way to download. We recommend that you install the F-Droid client and use that.
Download F-Droid-
arm64-v8aarmeabi-v7ax86x86_64This version requires Android 10 or newer.
It is built and signed by the original developer, and guaranteed to correspond to this source tarball.
Download APK 24 MiB PGP Signature | Build Log
-
arm64-v8aarmeabi-v7ax86x86_64This version requires Android 10 or newer.
It is built and signed by the original developer, and guaranteed to correspond to this source tarball.
Download APK 24 MiB PGP Signature | Build Log
* Stop embedding git commit metadata (version-control-info.textproto) in the
release APK so F-Droid reproducible builds are not tied to the build host's
git checkout state.




