Subclave

Your passwords live on your computer.

Subclave is a desktop password manager with no account and no server of its own. The vault is one encrypted file on this machine. Sync it through an S3 bucket or WebDAV share you own, and fill logins in Chrome and Firefox with an extension that talks only to the app.

Free and open source, Apache-2.0.

The Subclave S drawn as the path of one login: github.com on this laptop, an object with a hashed name and ciphertext only in your bucket, and the same github.com login again on your desktop.

Vault

Kept in one encrypted file on this computer.

Logins, one-time codes and notes, in one file only you can open.

Enlarge screenshot: Subclave's main window, unlocked: the Groups pane, a GitHub entry in the list, and its detail with the username rendy, a hidden password, the github.com URL with its Domain match rule, and the entry's history.
  • An entry holds a username, password, URLs, a TOTP secret, notes and custom fields, plus tags, a colour and an expiry date. Groups nest, and deleted entries wait in Trash.
  • Changing a title, username, password, URL, note, TOTP secret or custom field keeps the version before it. Each entry's history holds the last 10.
  • A revealed password hides again after 30 seconds, when you click away, or when you pick another entry. A copied one leaves the clipboard after 30 seconds by default, unless you copied something else since.
  • The vault locks after 10 idle minutes by default, from the tray, or when you minimize the window if you turn that on.
  • The generator makes passwords of 8 to 128 characters, 20 by default, with every character set you pick. Any password gets a strength score from zxcvbn.
Vault file
Argon2id (64 MiB, 3 passes), then AES-256-GCM
Plaintext
In the Rust core, wiped on lock; the window sees a password only when you reveal it
Network
None, except sync and the update check

Browser

Passed over a local socket, never the network.

Fill from the login field, the toolbar or a shortcut. Nothing fills on its own.

  • An extension for Chrome, Chromium, Edge, Brave, Vivaldi and Firefox 115 or later. The icon in login fields and the save prompt need Chrome 114 or Firefox 125.
  • Pair it with the app: both show the same 6-digit code, and you click Allow.
  • The icon in a login field offers logins saved for that exact host. Matches on other hosts of the same domain are in the toolbar popup and on Ctrl+Shift+L (Cmd+Shift+L on macOS).
  • After you sign in through a login form with a new or changed password, it offers to save or update the login.
  • The page never tells Subclave where it is. The browser reports the URL, and the app checks the match again before it hands over a password.
Enlarge screenshot: GitHub's sign-in form with a Subclave key icon at the right end of the username and password fields, both filled.
The Subclave icon in GitHub's sign-in fields.
  1. Login page gets the username and password, in its own fields only
  2. Extension asks for logins for the URL the browser reports for this tab
  3. subclave-proxy started by the browser, relays to the app over a local socket or pipe
  4. Subclave checks the match again and releases one login
A fill starts with your click or shortcut and runs along this chain and back. No step opens a network port.

Sync

Leaves this computer as ciphertext.

Sync through storage you already have. It holds your vault and cannot read it.

  • S3 and S3-compatible storage, or WebDAV such as Nextcloud and ownCloud. Off until you set it up; another computer joins with the same storage and sync passphrase.
  • Pulls when you unlock and when the window gets focus. Pushes shortly after an edit.
  • When two computers edit the same login, the newest edit wins and the other one stays in the entry's history, marked as a conflict.
  • A delete reaches your other computers for 90 days. One that stays offline longer brings the deleted entry back.
$ rclone ls nas:subclave/v1
      298 keyfile
      911 obj/f80aaa97db1874ee1f0e02d0fd72a744a18d151eb1acb041e2bc63f503e83baa
     1204 obj/6cfe7cfe3c8fc80ef1257378f249477d729de9ad4f249cf126a3c17d47169217
      877 obj/057719533092efa268dc8fa81203f889c505b3f9ed629227e7cc4efb824e89ec
What a WebDAV share holds after a sync: one sealed object per record, named by a hash, and a keyfile that opens only with your sync passphrase.
Passphrase
Argon2id derives the key that wraps a random 32-byte root key
Records
AES-256-GCM, key derived with HKDF-SHA256
Object names
HMAC-SHA256 of each record's kind and id

Import and backup

Written only where you choose.

Bring your logins from KeePassXC, Bitwarden, Chrome or Firefox.

  • Import their CSV exports. A preview flags rows already in the vault, and the rows you keep land in a new group.
  • The CSV holds every password in plain text, so the dialog offers to delete it once the import is done.
  • Write a .subclave-backup sealed with a passphrase (Argon2id and AES-256-GCM). Subclave refuses a weak one. Restoring a backup merges it into the vault and never deletes anything.
  • Export a CSV in Bitwarden's columns, which imports back here and into Bitwarden.

Threat model

What Subclave protects against, and what it does not.

Protects against

  • Someone who copies the vault file, its .bak or a backup. They can only guess the password, and Argon2id makes every guess slow.
  • Whoever runs your storage. They see ciphertext and hashed names, and cannot read or forge a record.
  • A web page asking for a fill on its own, or for another site's login.
  • Other users on the same computer. The socket sits in a private directory and the app checks who connects.
  • Someone at your unlocked computer, for as long as the auto-lock and clipboard clearing allow.

Does not protect against

  • Malware running as you. It can log the master password and read memory. No desktop password manager stops that.
  • Hibernating while the vault is unlocked, which writes the key to disk with the rest of memory. Full-disk encryption covers this.
  • An old backup or .bak, which still opens with the master password of its day.
  • A CSV export, which anyone who gets the file can read.

Details in the security policy and the known limits.

Download

The latest release for macOS, Linux and Windows.

Subclave checks for signed updates every 6 hours and installs only when you say so.

macOS 10.15+

Builds are not code-signed. Drag Subclave to Applications, then run once:

xattr -cr /Applications/Subclave.app

Linux

The AppImage needs FUSE, or run it with --appimage-extract-and-run.

Windows

Per-user installer, not code-signed. SmartScreen warns when you run the installer: click More info, then Run anyway.

Browser extension

Not in the Chrome Web Store or signed by Mozilla yet, so you load it by hand and it does not update itself.

  1. In Subclave, open Settings, Browser and turn on Chromium browsers or Firefox.
  2. Chromium: unzip into a folder you keep, open chrome://extensions, turn on Developer mode and click Load unpacked. Firefox: open about:debugging#/runtime/this-firefox and click Load Temporary Add-on, which lasts until Firefox restarts.
  3. With Subclave unlocked, click Pair with Subclave in the extension, then Allow once the codes match.

Firefox ESR, Developer Edition and Nightly can keep it installed: full install steps.