Documentation Index
Fetch the complete documentation index at: https://docs.veclabs.xyz/llms.txt
Use this file to discover all available pages before exploring further.
The short version
Your vectors are encrypted with AES-256-GCM before they leave your machine. The encryption key is derived from your Solana wallet keypair. VecLabs cannot read your data. The Merkle root posted to Solana proves what exists in your collection — not what it contains. The on-chain fingerprint is public. The vectors themselves are not.Key derivation
When you register, Recall generates a Solana keypair for your account. This keypair is used to derive your AES-256-GCM encryption key via PBKDF2-HMAC-SHA256:solvec-core/src/encryption.rs), the TypeScript SDK, and the Python SDK. Cross-language verification passes because the domain separator and iteration count are hardcoded and auditable.
What VecLabs can see
| Data | Visible to VecLabs? |
|---|---|
| Vector values | ❌ No — AES-256-GCM encrypted |
| Metadata values | ❌ No — encrypted with vectors |
| Vector IDs | ✅ Yes — used for Merkle leaf hashes |
| Collection names | ✅ Yes |
| Usage counts | ✅ Yes |
| Merkle roots | ✅ Yes — public on Solana |
agent-memory with 42 vectors. VecLabs cannot see what those vectors contain or what metadata is attached to them.
Custodial model (current)
In the current hosted API, Recall generates and stores your Solana keypair server-side, encrypted with a server-managed key. This means:- VecLabs holds the master encryption key
- If our servers are compromised, your keypair could theoretically be exposed
Merkle proof construction
After every write, Recall computes a SHA-256 Merkle tree from all vector IDs in the collection:"leaf:", "node:") prevent second-preimage attacks. The computation is identical in Rust, TypeScript, and Python — verified by cross-language test suite.
The root is posted to the Solana Anchor program at 8xjQ2XrdhR4JkGAdTEB7i34DBkbrLRkcgchKjN1Vn5nP. Anyone can fetch it and verify independently.