samiandClaude Opus 5.5 fb53b7d907
ci / build (ubuntu-22.04) (push) Canceled after 0s
ci / build (windows-2025) (push) Canceled after 0s
ci / deny (push) Canceled after 0s
README: plain-language guide for users, hosting and building
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-26 10:22:04 +07:00
2026-10-16 10:55:29 +09:00

Kestrove for Windows and Linux

The Kestrove desktop app for Windows 10/11 and Linux: your password manager, with a vault encrypted on the computer and synced through your Kestrove server. On a Mac, use the Mac app from kestrove-apple instead: it does everything this app does.

What it does:

  • Your vault: logins, one-time codes, tags and "Sign in with Google/Apple", with search and a password generator.
  • Connects the Kestrove browser extension (Chrome, Edge, Brave, Firefox) to your vault: filling, saving new logins, and passkeys. You approve each passkey in the app with your master password.
  • Adding this computer to your account: scan a QR code with your phone, use your Emergency Kit, or paste a setup code.
  • Locks itself after 10 minutes without use (you can change this), when you lock the screen, and when the computer sleeps.
  • Closing the window keeps Kestrove running in the tray, so the browser extension keeps working. Quit is in the tray menu.

Install

Download from the releases page:

System File
Windows (x64) Kestrove_<version>_x64-setup.exe
Debian, Ubuntu Kestrove_<version>_amd64.deb, then sudo apt install ./Kestrove_*.deb
Fedora, openSUSE Kestrove-<version>-1.x86_64.rpm, then sudo dnf install ./Kestrove-*.rpm

Then open Kestrove and add this computer to your account. The easiest way is Use my phone: type your server's address and scan the QR code on screen with the Kestrove app on your phone.

Connect your browser: install the Kestrove extension, open it, and choose Pair with Kestrove. The extension and the app show the same six words; confirm in both. After that, the browser fills from your vault whenever the app is unlocked.

Build it

You need Rust, Node.js 22+, and Tauri's system packages for your OS, with kestrove-core next to this folder.

npm ci
npm run tauri dev            # run it from source
npm run tauri build          # an installer for the system you're on (Windows: .exe; Linux: .deb/.rpm)
(cd src-tauri && cargo clippy --all-targets -- -D warnings && cargo test)

Release builds from a Mac (both write to ../release/desktop/):

# Linux .deb and .rpm, built in a clean Debian 12 container (run from the folder holding the repositories)
docker buildx build --platform linux/amd64 -f kestrove-desktop/scripts/linux.Dockerfile \
  --target out -o type=local,dest=release/desktop .

# Windows installer, cross-compiled. Setting XWIN_ACCEPT_LICENSE=1 accepts Microsoft's
# license for the Windows SDK files it downloads; the script header lists what to install first.
XWIN_ACCEPT_LICENSE=1 scripts/windows.sh

Publish them on Gitea: raise version in package.json, src-tauri/tauri.conf.json and src-tauri/Cargo.toml, tag the commit (git tag v<version> && git push origin v<version>), then:

GITEA_TOKEN=<token with write:repository> scripts/gitea-release.sh

It creates the release for the tag and uploads the installers, the browser helpers and a SHA256SUMS file.

How the browser connection works

browser extension ─(native messaging)─▶ kestrove-nmh ─(local connection)─▶ Kestrove app
        └──────────── encrypted end to end with a key you confirm by comparing six words ──────────┘
  • kestrove-nmh is a tiny helper that the browser starts. It only passes encrypted messages along; it can't read them.
  • The browser has to be told where the helper is: native-messaging/install.sh (Linux) and native-messaging/install.ps1 (Windows) do that, for the extension's id only.
  • The extension only ever learns logins for the site you're on, and fills only after you click. Saving a new login, and every passkey use, is confirmed in the app.
  • The same code runs inside the Mac app; it lives in kestrove-core (kv-ffi's browser bridge, kv-ipc, kv-nmh).

Where things are kept

The vault and the app's files are in your user's app-data folder (vault.sqlite, pairings.json, settings.json), readable only by you. The key that proves this is your device lives in the TPM on Windows (or is sealed with your Windows login), and in the Secret Service keyring on Linux (or, when there is none, in a private file, which Settings warns about).

For developers

Path What it is
src/ The window's interface (TypeScript). It only displays things; it never holds keys.
src-tauri/src/ The app (Rust): main.rs commands and prompts, sync.rs sync and onboarding, autolock.rs, device_key.rs.
src-tauri/examples/test-host.rs A stand-in for the app that approves everything automatically, for the browser extension's tests. Never ship it.
native-messaging/ Registering the browser helper.
scripts/ Release builds (linux.Dockerfile, windows.sh) and gitea-release.sh.

Useful for testing: KESTROVE_DATA_DIR=/tmp/kv-b runs a second, separate instance, and KESTROVE_DEVICE_NAME sets the device name. tests/live_sync.rs (ignored by default) drives three instances against a running server; see its header.

The full design is in kestrove-spec, especially docs/05-autofill.md.

S
Description
Windows and Linux app
Readme
1.5 MiB
2026-10-30 14:29:35 +00:00
Languages
Rust 54.2%
TypeScript 28.4%
CSS 9.8%
Shell 4%
NSIS 1.2%
Other 2.4%