An offline-first Flutter vault for protecting photos and files locally, organized with Ethiopian calendar dates and a choice of calm, modern themes.
Private memories should not require a cloud account. Mezgeb keeps its core vault workflow on the device while adding Ethiopian calendar organization for people who want their files presented in a culturally familiar timeline.
The app does not request internet access, use analytics, show ads, or create user accounts.
| Layer | Protection |
|---|---|
| Files | AES-GCM authenticated encryption in app-private storage |
| Metadata | SQLCipher-backed local database |
| Key material | Android secure storage |
| App access | PBKDF2-derived PIN verification and optional device biometrics |
| Screen content | Screenshots and app-switcher previews blocked with FLAG_SECURE |
| Network | Core vault workflow requires no account or internet connection |
Because screen capture is intentionally blocked by the Android host, this repository does not present staged screenshots as if they came from the secured production surface.
flutter pub get
flutter runIf no Android phone or emulator appears, run:
flutter devices
flutter emulatorsflutter analyze
flutter test
flutter build apk --debugFormat and analyze changes before opening a pull request:
dart format --output=none --set-exit-if-changed lib test
flutter analyze
flutter testThe debug APK is built at:
build/app/outputs/flutter-apk/app-debug.apk
- Flutter app named
Mezgeb - PIN onboarding and PIN unlock
- Biometric/device auth through
local_auth FLAG_SECUREenabled in the Android host activity- SQLCipher-backed metadata database
- AES-GCM encrypted files in app-private storage
- Android system document picker through a small MethodChannel
- Ethiopian calendar converter with Amharic month names
- Timeline year/month/day browsing with pinch zoom-out
- Albums, fullscreen viewer, Settings, and theme picker
- Themes: One Light, Sky Glass, Forest, Rose, Midnight
- PINs are derived with PBKDF2-HMAC-SHA256 and a random per-user salt
- Encryption keys are generated with a cryptographically secure random source
- Keys are stored through Android secure storage
- File contents use AES-GCM authenticated encryption
- Metadata is stored in a SQLCipher-backed database
- Screenshots and app-switcher previews are blocked with
FLAG_SECURE - The app locks when moved to the background
This project has not received an independent security audit. Review the implementation and test it carefully before relying on it for irreplaceable or highly sensitive data.
The current repository passes flutter analyze with zero issues and includes eight focused tests covering Ethiopian calendar edge cases, MIME-type fallback behavior, and vault-item database serialization. Android platform behavior—including secure-window flags, biometrics, SQLCipher, and encrypted file I/O—still requires device-level testing.
lib/
├── calendar/ Ethiopian calendar conversion
├── data/ encrypted database and vault repository
├── domain/ vault and album models
├── platform/ Android document picker bridge
├── security/ PIN, biometric, and key management
└── ui/ app screens, themes, and controller
- Camera capture directly into encrypted vault storage
- Encrypted thumbnails for faster grid performance
- Share-out flow with a wiped temporary decrypted cache file
- More album management polish
See PLAYSTORE_RELEASE.md for signing, bundle, and Play Console checklist steps.
No open-source license has been selected. The source is publicly viewable, but reuse, modification, and redistribution are not granted by default. Vendored dependencies under third_party/ retain their respective license files.
