Skip to contentMenu Download OpenVireo

TypeScript code for building on OpenVireo: sign in to an account, open and edit vaults, share them, run service accounts in CI, or sync with a self-hosted sync server. It is the same code the OpenVireo web app, the ov CLI, ov connect and the GitHub Action run, and it interoperates with the desktop app: the same crypto, the same OPAQUE suite, the same merge.

Everything is end-to-end encrypted on the client. The servers only ever receive OPAQUE messages, encrypted .kdbx files, wrapped keysets and sealed keys; see Concepts.

Packages

PackageWhat it is
@openvireo/sdkThe library: accounts, vaults, sharing, sync, merge, service accounts
@openvireo/cliov: read, inject and rotate secrets from scripts and CI. See CLI
@openvireo/connectov connect: a REST server for one service account, with Kubernetes manifests. See Connect
GitHub ActionLoads secrets into a workflow and masks them. See GitHub Action

The SDK runs in browsers, Node ≥ 20 and Bun (also compiled into a single binary). It’s ESM only.

Install

Releases are published to GitHub Packages. Installing from there needs a GitHub token with read:packages, even though the packages are public:

echo "@openvireo:registry=https://npm.pkg.github.com" >> .npmrc
echo "//npm.pkg.github.com/:_authToken=\${GITHUB_TOKEN}" >> .npmrc
npm install @openvireo/sdk

The ov CLI is also available as a single binary; see CLI.

A first program

import { Account, MemoryStorage } from "@openvireo/sdk";

const account = await Account.connect({
  issuer: "https://accounts.openvireo.com",
  device: { name: "My script", platform: "cli" },
  storage: new MemoryStorage(),
});
await account.login({ email, password, secretKey });

for (const info of await account.listVaults()) {
  console.log(info.name, info.role);
}
const vault = await account.openVault((await account.listVaults())[0]!.id);
console.log(vault.read("ov://Personal/GitHub/username"));
await account.logout();

For automation, prefer a service account: it needs no password and can be limited to a few vaults.

Guides

Reference

  • Concepts: keys, vaults, roles, references, what the servers see
  • Errors: every error code and what to do about it
  • Merge behaviour: how concurrent edits are combined
  • Lower-level APIs: the sync loop, HTTP clients, KDBX helpers, Argon2, OPAQUE
  • API reference: every export, generated from the source (npm run docs:api builds it locally)

Subpath imports

Everything is exported from @openvireo/sdk. Smaller entry points keep bundles small:

SubpathWhat it contains
@openvireo/sdk/cryptoSecret Key, AUK (Argon2id), wrap/seal, keysets, fingerprints, vault names, SA and refresh tokens, JWT verification
@openvireo/sdk/opaqueThe OPAQUE client (opaque-ke compiled to WASM, lazy-loaded)
@openvireo/sdk/authAuthClient (every account server route), discovery, TokenManager, storage adapters
@openvireo/sdk/storage/nodeFileStorage (a 0600 JSON file)
@openvireo/sdk/syncSyncClient, the syncKdbx merge and retry loop, subscribeEvents
@openvireo/sdk/vaultkdbxweb open and save, vault-key credentials, entry helpers, ov:// references
@openvireo/sdk/mergeThe sync merge, matching the desktop app
@openvireo/sdk/testingIn-memory auth and sync servers for tests (not for production)

License

MIT OR Apache-2.0, at your option.

The SDK docs cover OpenVireo SDK, develop (86e6cd2), last updated 26 October 2026. Found a mistake? Edit this page on GitHub.