End-to-end encrypted, even when the recipient requests the secret.
In the request flow the recipient generates the X25519 keypair locally. The server receives only ciphertext plus public keys, never plaintext or private keys. The known limits of browser-based cryptography are documented openly below.
The plaintext stays in your browser, but the server still observes a few things by virtue of running the service at all.
If you are a journalist, activist, or otherwise expect a well-resourced adversary, browser-delivered crypto is not the strongest tool you can pick. Treat Vault as a convenience layer with a documented threat model, not as a substitute for the practices below.
Source mirror: gitlab.erseni.net/open-source/secrets-component
Deployed build: status page
security.txt: /.well-known/security.txt
You do not need to take our word for which JavaScript you are running. Here is the concrete chain you can walk.
curl -s '<script src from DevTools>' | sha256sum Why compare hashes by hand when the script tag already carries a Subresource Integrity (SRI) attribute? SRI makes the browser refuse a bundle that does not match the hash in the HTML, but both come out of the same deploy: a compromised server simply serves a new pair. The manifest hash comes from that same server and shares this limit. What makes the check independent is the public mirror: a separate system with a publicly visible history, so compare the manifest values against the mirror commit and read the source there. The web component scripts, the third-party bundles and the stylesheets carry no SRI hash today.