KubeGauge

Privacy

This covers three things: this website, the KubeGauge dashboard at app.kubegauge.com, and the agent you install in your cluster.

Last updated .

The short version

1. This website, and cookies

kubegauge.com is a static site. It has no accounts, no forms and no login, so it collects nothing about you directly.

It does load Google Analytics 4, and it loads it with Google Consent Mode set to denied before anything runs. While consent is denied, Google receives a cookieless signal that a page was viewed and sets no analytics cookie. Only after you press Accept does Google Analytics store its cookies (_ga and _ga_<id>) and receive the usual analytics data: pages viewed, referrer, device and browser, and an approximate location derived from your IP address.

Your choice itself is kept in your browser's local storage under the key kg-consent, with the value granted or denied. It never leaves your browser; it exists so we stop asking.

Our host, Vercel, processes the ordinary request metadata any web server sees (IP address, user agent) in order to deliver the page.

2. Your KubeGauge account

Sign-up asks for an e-mail address and a password, handled by Supabase Auth. If you sign in with GitHub or Google instead, that provider tells us the e-mail address on your account. We never see or store your password.

Our own database stores your user id, your membership in an organization, and the organization's name — which starts out as the part of your e-mail address before the @. Beyond billing identifiers, that is the whole of it: no name, no address, no phone number, no profile.

Account e-mails (confirm your address, reset your password) are sent through Resend from noreply@kubegauge.com. That mailbox does not receive replies.

3. What the agent sends from your cluster

The agent is open source (Apache-2.0) and outbound-only: it accepts no inbound connection and sends one kind of payload to one destination — a scan report to the API, over TLS, authenticated with your cluster's key. The payload is described field by field in what leaves your cluster and formalised by a JSON schema generated from the source. You can read both before installing anything.

What a report contains:

What a report never contains:

Be aware of the flip side: object names do leave — namespaces, workloads, roles, bindings and image references. In some organisations names alone are sensitive. If that is you, read the schema first.

4. Remediation plans, and the AI step

Two things share this feature's name, and only one of them involves a model.

The plan you get by default is generated without any AI. Opening a finding's remediation asks our own service for a template plan: the steps come from deterministic, per-check templates held inside that service, no model is called, and no provider key is even needed for it to work. This path is on every plan, Free included. It does send the finding's data from our API to our remediation service — that service runs on our own private network inside Fly.io, with no public address and nothing else able to reach it, so this hop is our infrastructure and not a third party.

AI composition is the opt-in step on top of that. It runs only when you press the button, and only for organizations on the AI plan — the API checks the plan before the request leaves it, and caps it at 30 compositions per day per organization. This is the only path that sends anything to a third-party LLM provider.

What a composition sends, per finding (at most 20 in one request):

Not sent: your cluster's name, Kubernetes version and distribution — the request format has an optional field for those, which the dashboard leaves empty and the service never places in a prompt — the catalogue's explanatory text, and everything else in the report. Even on this path the model does not write the commands: it picks which of our deterministic templates apply and writes the summary around them.

Our remediation service stores nothing. It has no database of any kind; the prompt and the answer exist only for the length of the request.

We are not naming the provider on this page yet. Which company processes a composition, and under which country's law, is settled by deployed configuration rather than by anything published in our source code — so naming one here would risk naming the wrong one, and a privacy policy that names the wrong processor is worse than one that admits the gap. It is listed as unresolved in the notice at the top of this page. If that matters to you, leave AI composition alone until it is named: every other part of KubeGauge, template plans included, works without it.

5. Billing

Payments run on Stripe. You enter card details on Stripe's own hosted checkout page and manage the subscription in Stripe's customer portal — card numbers never reach a KubeGauge server, and we could not store them if we wanted to.

We send Stripe an identifier for your organization; Stripe collects the billing details itself. We store back what we need to know which plan you are on: the Stripe customer and subscription ids, the price id, the subscription status and the current period end.

6. Where data lives, and for how long

Accounts and scan history are in a Postgres database hosted by Supabase in the United States (us-east-1). The API runs on Fly.io in Ashburn, Virginia. The remediation service runs on Fly.io too, on a private network with no public address. If you are in the EU or UK, using KubeGauge means your data is transferred to and processed in the United States.

Scan history is kept for as long as your plan allows:

The clean-up runs every time a cluster reports: anything older than your window is deleted then. One honest consequence — a cluster that stops reporting stops being pruned, so its last window sits there until you delete the cluster or ask us to remove the account. Deleting a cluster in the dashboard deletes its reports and score history with it.

Downgrading never deletes anything. Clusters beyond your new limit stop being scanned; what they already reported stays.

7. Keeping organizations apart

Separation is enforced in the database itself, with PostgreSQL row-level security. Every table holding customer data carries a policy scoped to the organization, and the API connects with a role that cannot bypass it — so a query that tries to read another organization's rows returns nothing rather than being politely filtered in application code.

8. Who else processes data

ProcessorWhat forWhere
SupabaseAccount identity (e-mail, password) and the application databaseUnited States (us-east-1)
Fly.ioRuns the KubeGauge API and the remediation serviceUnited States (Ashburn, Virginia)
VercelServes this website and the dashboardGlobal edge network
StripeSubscriptions, checkout and invoicesUnited States / global
ResendDelivers account e-mails (sign-up confirmation, password reset)United States
Third-party LLM provider — not yet namedProcesses AI compositions, on the AI plan and only when you ask for one. Identity pending — see the notice at the top of this pageTo be confirmed
GoogleGoogle Analytics 4 on this website only, after you accept cookiesUnited States / global
GitHub, GoogleIdentity providers, only if you choose to sign in with themUnited States / global

The agent's container image and Helm chart are distributed through the GitHub Container Registry. That is a download; no data of yours passes through it.

9. Logs

The API keeps no access log of who called what. IP addresses are held in memory to enforce rate limits and are discarded within minutes; they are never written to a table or a log line. Application logs carry internal identifiers, not e-mail addresses.

Our hosting providers keep their own edge and platform logs, which do include IP addresses and user agents. That is outside our control and governed by their policies.

10. Your choices, and how to ask

11. Changes

If this changes, the date at the top changes with it. The page lives in a public Git repository, so its history is public too.

See also Privacy and Terms.