A private, offline-first password manager for Android
Keysoft keeps passwords and secure notes encrypted on the device and works without a backend service. Network access is limited to platform update delivery, and vault contents, PINs, master passwords and encryption keys are never synced or stored remotely. The app is built for people who want a local password vault without an account, an ads business model or an analytics pipeline.
Install Keysoft from Google Play.
Android is the production platform. iPhone and iPad builds remain compatibility targets for local testing and are not distributed through the Apple App Store. Source builds are produced through EAS; see the release guide.
- Install the app from Google Play and open it.
- Set the master PIN when prompted. It is never stored or transmitted, and it cannot be reset by anyone, including the maintainer.
- Add a password manually or generate one, then copy it with one tap. Copied secrets are cleared from the clipboard after 60 seconds by default.
- Open Settings and export an encrypted backup. Keep the backup file and its passphrase somewhere safe and separate from the device.
- Private by default: no registration, cloud vault, advertising or analytics SDK.
- Works offline: create, search, organize and copy credentials without connectivity.
- Encrypted vault: authenticated KS1 encryption with tamper detection before decryption output is trusted.
- Optional biometric unlock backed by device-authenticated SecureStore.
- User-owned encrypted backups in the versioned
KS1-PW1format, without a remote backup account. - Practical security tools: password generator, vault-health checks, clipboard auto-clear, local reminders and optional screenshot protection.
- Accessible UI in Italian and English, light and dark themes, reduced-motion support, and phone and tablet layouts.
- Automatic locking after inactivity, with a 60-second default timeout.
The screenshots below are taken from the production Android listing on Google Play.
| Quick entry | Password generator | Secure notes | Encrypted backups |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
- An Android phone or tablet. Keysoft is distributed through Google Play only.
- No account and no network connection are required for vault use.
- iOS builds are not distributed; they remain compatibility targets for simulator testing.
Keysoft needs no configuration file or environment variables. The settings below are available inside the app; values shown are the defaults on a new installation.
| Setting | Purpose | Default |
|---|---|---|
| Master PIN | Unlocks the vault and authenticates key derivation. | Set on first launch |
| Auto-lock timeout | Locks the vault after a period of inactivity. | 60 seconds |
| Biometric unlock | Stores the derived vault key in device SecureStore behind device authentication. | Off |
| Clipboard auto-clear | Clears a copied secret from the clipboard. | 60 seconds |
| Screenshot protection | Blocks screenshots and screen recording while the app is open. | Off |
| Language | Selects the Italian or English interface. | Device language |
| Theme | Selects light, dark or system appearance. | System |
| Password generator | Length and character classes for generated passwords. | 16 characters, all classes enabled, similar characters allowed |
Keysoft is local-first: no server, no sync, no analytics and no custom crash reporting. Vault
data uses the versioned KS1 envelope with AES-256-CBC encryption and HMAC-SHA256 integrity
verification; keys are derived with Argon2id in native builds, with a documented PBKDF2
fallback in Expo Go. A forgotten master PIN cannot be recovered by design, because no
server-side recovery material exists. Read the security architecture for
the full model and the accepted trade-offs, the privacy policy
for data handling, and SECURITY.md to report a vulnerability privately.
There is no account, server or recovery back door, so no one can reset or reveal the PIN. The only way back into a locked vault is a previously exported encrypted backup plus the passphrase chosen at export.
Unlock with the master PIN, then re-enable biometrics in Settings. Adding or removing a fingerprint or face, changing the PIN, or a SecureStore failure disables biometric unlock and falls back to PIN login; the vault itself is unaffected. Details are in the security architecture.
The file is corrupt, the passphrase is wrong, or the file exceeds the 10 MiB import limit. Imports are validated before anything is written, so a rejected import leaves the vault unchanged. See backup encryption.
Expo Go builds use a documented PBKDF2 fallback because the native Argon2id module is not available there; production builds derive keys with Argon2id. If a vault requires Argon2id and the native module is missing, login fails with a native-KDF diagnostic instead of silently accepting a weaker check.
Requirements: Bun 1.3.14, Node.js 22.13 or newer, and Expo Go on an Android device for day-to-day development.
git clone https://github.com/TheStreamCode/keysoft.git
cd keysoft
bun install --frozen-lockfile
bun run start
bun run verify
bun run deps:auditbun run verify runs formatting, type checking, linting, tests with coverage and
expo-doctor. Release artifacts are produced through EAS; build, submission, tag and release
operations are documented in the development guide and the
release guide. Architecture notes live in docs/architecture.md.
See SUPPORT.md for the support policy. Product assistance is available at
keysoft@mikesoft.it; never include vault contents, PINs,
encryption keys or backup payloads in a support request.
See CONTRIBUTING.md. Keep security-sensitive changes small and testable, and run
bun run verify before requesting review.
Keysoft is licensed under the Apache License 2.0. See COPYRIGHT.md, THIRD_PARTY_NOTICES.md and TRADEMARKS.md for first-party scope, dependency notices and trademark terms.
Maintained by Michael Gasperini (Mikesoft). If this project is useful to you, consider sponsoring its maintenance.




