Security & Data Flow
This page is a plain-language audit of every byte that crosses the wire. Where there's a trade-off, we say so.
Four stages. Each arrow is labeled with what crosses it.
VSCode, JetBrains, Emacs, Vim. Reads your working tree.
Local onlyComputes diffs. Encrypts code blocks with a repo-derived key the server never sees.
Encrypts hereSees encrypted blobs as opaque bytes. Routes intent and decision data to your team over our secure API.
Mixed visibilityEncrypted code blobs in Google Cloud Storage. Intent/decision metadata in MongoDB Atlas. Both hosted in the United States.
Encrypted at restClient-side encryption boundary (zero-knowledge) · TLS in transit
Every category of data, audited.
| Data | Encrypted client-side? | API can read? | Stored where |
|---|---|---|---|
| Source code, diffs | ✓ AES-256-GCM | ✗ | Google Cloud Storage encrypted blob |
| Intent code blocks snippet, code content |
✓ AES-256-GCM | ✗ | MongoDB Atlas encrypted field |
| Intent & decision management information titles, descriptions, scope, constraints, rationale |
— TLS in transit | ✓ | MongoDB Atlas |
| Account info email, profile, billing metadata |
— TLS in transit | ✓ | MongoDB Atlas |
| Payment details | — | ✗ | Stripe we never see card numbers |
| LLM calls (Translation add-on) | — | ✓ unless you BYOK | Not retained after response |
| Local cache ~/.kawa-code/.storage.caw |
✓ locally generated key | ✗ never uploaded | Your machine only |
Intent and decision management information — titles, descriptions, scope, constraints, rationale — is shared with your team via our secure API.
What our API enables for your team:
For teams that need every byte to stay on their own infrastructure, the self-managed deployment is available.
What we protect against, and what we don't.
Specifics of the client-side encryption boundary.
Cipher
AES-256-GCM
Authenticated encryption with a 128-bit auth tag.
Key derivation
PBKDF2-HMAC-SHA256
600,000 iterations, 32-byte output.
IV / Nonce
12 random bytes per message
Generated fresh from the OS CSPRNG on each encryption.
In transit
TLS 1.2+
All API and storage connections.
Local cache
Locally generated key
Encrypts ~/.kawa-code/.storage.caw at rest. Stays on your machine.
How we confirm team access without ever touching your repository.
For teams that don't require zero-delay response to membership changes, our non-intrusive security model lets us share work alongside your team without requesting access to your code repository.
This means we route diffs between teammates for private repositories without ever holding repo access tokens, OAuth credentials, or read permissions on your git provider.
Note: Teams that need direct access control through their existing identity provider (SSO / AuthNZ) should use the Enterprise plan, which adds strict B2B authentication on top of swarm.
Google Cloud Platform, dual-region in the United States. Cloudflare for DNS and edge.
MongoDB Atlas, hosted in a private VPC with no public internet exposure. Encryption at rest, automated backups, and IP allowlisting on the operator path. Intent code blocks are encrypted client-side before they ever reach the database — even with full DB access, our team cannot read them.
Google Cloud Storage. Encrypted blobs only — we cannot decrypt them.
Our internal processes are designed around SOC 2 controls. We have not yet completed a third-party audit; the report is on the roadmap. We will update this page when certification is in hand.
Team membership is established by continuously confirmed commit SHA matches — not by granting Kawa Code access to your repository.
For teams that need every byte to stay on-prem, the self-managed deployment removes the hosted API entirely.
No. The encryption keys for diffs and code blocks are derived on your machine from inputs we never receive. Even with full database and storage access, our team cannot reconstruct your code.
No. The desktop app reads your local working tree only. The server never has repository access — that's what swarm authentication exists to avoid.
Yes. The Translation add-on uses our hosted LLM service by default for convenience, but you can configure your own OpenAI or Anthropic API key. With BYOK, prompts go directly from your machine to the LLM provider — our API is not in the loop.
All hosted infrastructure is in the United States. EU and Japan data residency is on the roadmap; reach out if you need it sooner.
Yes. Deleting your account purges your account record, intent and decision management information, and the encrypted blobs associated with your repositories. See the Privacy Policy for retention details.