galata vault
Rust SDK · gv command line · Python · server · MCP

End-to-end-encrypted secrets and config, with no accounts.

A project is a key you generate. Everything is encrypted and signed on your machine, and the server stores only ciphertext it cannot read, under signatures it cannot forge.

$ cargo add galata-vault
$ cargo binstall galata_vault::cli
$ pip install galata-vault
Every release binary carries a GitHub artifact attestation.

A library first. Everything else is built on it.

The SDK owns the cryptography. The tools around it share one version and one set of formats, and none of them can do more than the key in your hand allows.

galata-vault

The Rust SDK

A token client, the owner API, and an embedded backend that runs the server's rules in-process with no socket and no async runtime.

gv

The command line

Init a project, add environments, set secrets, mint tokens for CI, and run a process with its secrets as environment variables.

pip install galata-vault

The Python package

The wheel runs the same Rust code as gv, and bundles gv itself.

gv-server

A server that cannot decrypt

The binary links no decryption code, and a CI guard fails the build if it ever does. On your machine it needs no configuration.

gv-mcp

Metadata only, for AI agents

An MCP server that can list, inspect and verify, and cannot read a value, for the same reason the server cannot.

gv ui

The vault in your browser

A local UI on loopback, with its own threat model in the docs.

What the server can and cannot see

Requests are signed, the token string never crosses the wire, and every client pins a vault id before trusting anything. A server can withhold or delete data and see metadata. It cannot substitute a key, forge or move a record, or rewrite the tree unnoticed.

It stores
  • Ciphertext, in age v1 envelopes
  • Signed records and owner-signed descriptors and bundles
  • HMAC name indexes, with encrypted names
  • Public keys and an audit hash chain
It never receives
  • A plaintext name or value
  • A project or environment path
  • Any key that decrypts
  • The token string itself

From init to deploy

Projects and environments are a key tree. Each environment key is derived from its parent with a one-way HKDF, so a kit for acme/dev has no path to acme/prod.

There is no account, email or operator reset. gv init will not finish until you confirm the recovery kit is stored.

Read about the key tree, delegation and rekey
$ gv-server local
$ gv init acme --server http://127.0.0.1:8750
$ gv env add acme/prod
$ printf %s "$DATABASE_URL" | gv set DATABASE_URL --env acme/prod
$ gv run --env acme/prod -- ./deploy
$ gv token mint --scope read --env acme/prod
$ gv config set app --format toml --env acme/prod < app.toml
$ gv ui