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.
Keys of a version 2 vault
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.
From a clone
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 extension

Documentation

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.

Read it, build it, break it, tell us.