Open source
Read the code that holds your passwords.
Vault Lite is free software. The application that keeps your secrets, the process that holds the keys, the browser extension and the importers are published under the GNU Affero General Public License, with their file format, their threat model and their tests.
What is published
Everything that touches a secret on your computer.
The core library
The data model, the .twv file format, Argon2id key derivation, XChaCha20-Poly1305 encryption, one-time codes and the recovery key. Rust, with unsafe code forbidden.
The vault service
The one process that holds the keys: same-user sockets, a capability for the window, a paired key for the browser, and an authorisation table for every caller and operation.
The desktop app
The window, built with Tauri and React, with the isolation pattern on, a strict content security policy and the smallest capability set it needs.
The browser extension and native host
The extension for Chromium and Firefox families, its pairing and encrypted channel, and the small relay the browser starts.
The importers
KeePass databases, Bitwarden, 1Password, browser exports and CSV, plus the reading and secure removal of cards from Chrome, Edge, Brave and Firefox profiles.
The tests and the tooling
Unit, process and end-to-end tests, including the real window on a virtual display and real browsers filling a login; a Docker image that builds it all with nothing installed on the host.
What stays proprietary
The hosted Trustwelt services, the Portal, Tenant Admin, the device agent and the sync service are not open source. Vault Lite talks to them only through a documented, signed-in interface, and works fully without them.
Licence
AGPL-3.0-or-later, unchanged, with short additional terms.
- Licence
- GNU Affero General Public License, version 3 or any later version, with the text unmodified.
- Additional terms
- Allowed by section 7 of the licence: the Trustwelt name and logo stay Trustwelt's, the attribution stays in the about screen and the source files, and the usual limits of liability apply. Forks use a different name.
- Contributions
- A contributor licence agreement, so that Trustwelt can keep Vault Lite under the AGPL and also ship it in its own editions.
- Word list
- The EFF long word list used by the passphrase generator is under CC BY 3.0 US.
- Security reports
- A published security policy and a private reporting path, the same one as for the rest of Trustwelt.
Why AGPL
A password manager earns trust by being readable. The AGPL keeps every improvement to Vault Lite open, including ones made in a service, while the additional terms keep a modified copy from being passed off as a Trustwelt release.
The file format
One documented format, from the first byte.
A vault is a single .twv file. The specification is published next to the code, and the reader for every older version stays in the repository.
- Header
- A magic number, the version, the flags, the Argon2id parameters and salt, a random vault identifier and the key slots. The header is authenticated together with the payload.
- Key slots
- The vault master key, wrapped once for the master password and, when a recovery kit exists, once for the recovery key. Each slot is bound to its vault and its kind, so a slot copied from another vault does not open.
- Keys
- The password key is derived from Argon2id of the credentials, salted with the Secret Key when one exists. The payload key, the activity-log key and the sync keys are derived from the master key with the vault identifier as salt, each under its own label.
- Payload
- The whole model, serialised compactly and padded to a block size, then encrypted with a fresh nonce. Titles, addresses and notes are inside the encryption, not beside it.
- Schema
- Versioned. A newer schema is refused as unsupported rather than misread, and older payloads are read with frozen types kept in the tree.
password KEK = HKDF(salt = Secret Key, ikm = Argon2id(password ‖ key file, salt))
recovery KEK = HKDF(salt = vault id, ikm = recovery key)
payload key = HKDF(salt = vault id, ikm = VMK, "twv2-payload")
activity key = HKDF(salt = vault id, ikm = VMK, "twv2-activity")
slot = XChaCha20-Poly1305(KEK, nonce, VMK, aad = magic ‖ version ‖ vault id ‖ kind)
payload = XChaCha20-Poly1305(payload key, nonce, pad(model), aad = header)Build it yourself
Nothing to install but Docker.
A build image holds every toolchain the workspace needs, so a release can be checked on any machine, and the same commands run in continuous integration.
- Rust for the crates, Node.js for the window and the extension, WebKitGTK for the Linux app, MinGW for the Windows check.
- The tests include the real window under WebDriver on a virtual display, and eleven real browsers pairing with the extension and filling a login on a test page.
- Dependencies are pinned with lock files and checked against known advisories and allowed licences.
git clone https://github.com/trustwelt/vault-lite.git
cd vault-lite
docker/run.sh cargo test --workspace # every crate, in the build image
./build.sh --package # the app, the service, the host, the extensionDocumentation
Written down, next to the code.
Architecture
The crates and apps, what each one may talk to, and the rules that hold between them.
Threat model
What Vault Lite protects against, what it does not, and the design rules that follow.
Vault format
Every byte of a .twv file, the key derivation, the slots and the payload schemas.
Vault service
The sockets, the callers, the authorisation table and the wire protocol between the window and the service.
Browser protocol
Pairing, the encrypted channel, the matching rules and the manifests each browser reads.
Importing
Every supported source, what comes over from each, and how to export from it.
Questions
Common questions about the project.
- Which parts of Trustwelt are open source?
- Vault Lite: the desktop app, the vault service, the native host, the browser extension, the importers and the generator. The hosted services, the Portal and the admin consoles are proprietary.
- Which licence does Vault Lite use?
- The GNU Affero General Public License, version 3 or later, unchanged, with additional terms that section 7 of that licence allows: they protect the Trustwelt name and logo and keep the attribution. Forks use a different name.
- Can I use Vault Lite without any Trustwelt service?
- Yes. Vault Lite makes no network requests on its own. Sync, sharing and organisation features arrive only when you sign in, and they are separate from the open-source application.
- How do I contribute?
- Open an issue first for anything bigger than a small fix. A pull request needs the contributor licence agreement, which lets Trustwelt keep Vault Lite under the AGPL while still shipping it in its own editions.