Easy, safe unlocking
Master password or fingerprint / face. Biometrics release a key protected by the OS, not a UI flag.
v0.1 · open source · GPL-3.0-only
A fully offline password vault for iOS and Android. Encrypted with Argon2id and XChaCha20-Poly1305, with imports from BlackBerry Password Keeper, KeePass, Bitwarden, 1Password and more.
// 01 · air-gapped by design
Everything happens on your phone. Your master password unlocks the vault, and nothing leaves the device unless you export a file yourself. No sign-in, no sync, no telemetry. The Android app doesn't even ask for the Internet permission.
<manifest>
<uses-permission name="USE_BIOMETRIC" />
<uses-permission name="HIDE_OVERLAY_WINDOWS" />
<!-- Deliberately no INTERNET permission. -->
</manifest>
// 02 · features
Master password or fingerprint / face. Biometrics release a key protected by the OS, not a UI flag.
Every record is authenticated ciphertext, stored locally. Only you can open it, and nothing is uploaded.
Search, star favourites and organise records into colour-coded groups.
Several usernames, passwords, notes and security Q&A in one record, in any order. Secrets stay hidden until revealed.
12–128 characters from OS / libsodium randomness with rejection sampling: no modulo bias.
Changing a password keeps the last 10 values with timestamps, encrypted with the vault.
Store BIP-39 phrases and private keys. Validated, hidden by default, excluded from CSV exports.
Built-in TOTP generator. Scan or paste a secret and get rotating one-time codes next to the login they belong to.
Local-only, auto-expiring on iOS; marked sensitive and cleared on Android. Seed phrases never touch it.
CSV or encrypted export, re-authorised with your password. Encrypted backups move between iOS and Android.
FLAG_SECURE, overlay hiding and autofill exclusion on Android; a privacy cover on iOS.
Immediately, after 1 or 5 minutes away, or when the device locks. Screen-off always locks.
// 03 · under the hood
libsodium on both platforms. A random data key is wrapped with a password-derived key and a device-bound secret held by the Keystore / Keychain.
0 bits of entropy · —
Same method as the app: crypto.getRandomValues + rejection sampling. Nothing is sent anywhere.
After 10 consecutive wrong master passwords the vault on that device is cryptographically erased. Each attempt is reserved durably before the password is checked, so killing the app mid-check still counts.
vault: locked · 0 / 10 failedBiometric unlock resets the counter. There is no password reset: if you forget it, nobody can recover it.
// 04 · moving in
Export from your old password manager and import the file. PassVault recognises the format from the file itself, on both iOS and Android, and authenticator keys come across as 2FA entries.
.pkb2 · CSV.pkb2 keeps every field: extra usernames, passwords, custom fields and history, in their original order. CSV keeps only the basics.
.kdbx · XMLDatabase password and key file. Groups, history, expiry dates, custom fields and TOTP keys.
Logins, cards, notes, folders, custom fields, password history and TOTP keys. Use plain JSON, not JSON (Encrypted).
.1pux · CSVLogins, cards, notes, tags as groups, password history and one-time passwords.
The browser's own password export.
Any CSV with name/URL and username/password columns.
Attachments are not imported. Twofish KeePass databases: switch to AES or ChaCha20 first.
.pkb2, .kdbx, .1pux or JSON.// 05 · get it
Install from Google Play, or grab the signed APK from GitHub Releases, open it on your phone and allow Install unknown apps.
Get it onGoogle Play Download APKGet APK$ cd android
$ ./gradlew :app:assembleDebug
Build it yourself with Xcode and XcodeGen, choose your signing team and run on a real device.
Build instructions$ cd ios && xcodegen generate
$ open PassVault.xcodeproj