Cada instância self-hosted do Kodus envia um heartbeat anônimo por dia paraDocumentation Index
Fetch the complete documentation index at: https://docs.kodus.io/llms.txt
Use this file to discover all available pages before exploring further.
https://telemetry.kodus.io. O payload contém apenas contadores
agregados e metadados de runtime — nunca código, identidades, ou qualquer
coisa que possa rastrear até você ou seus usuários.
Esta página documenta exatamente o que é enviado, por quê, para onde vai e
como desligar.
O que enviamos
Um únicoPOST /v1/heartbeat por dia UTC, ~700 bytes. Exemplo de payload
(UUID redigido pra clareza):
400.
O que nunca enviamos
Por design, o schema não pode carregar:- E-mails de usuários, nomes, tokens OAuth, API keys
- Nomes de repositórios, branches, títulos de PR, mensagens de commit, conteúdo de código
- Strings que identifiquem o cliente (org slugs, nomes de workspace, domínios customizados)
- Endereços IP (o receiver hashia o IP de origem com um salt rotacionado diariamente apenas para detecção de abuso e nunca persiste o IP cru)
- Qualquer campo de texto livre
Por que coletamos isso
Heartbeats anônimos nos permitem responder perguntas que de outra forma não conseguiríamos responder pra usuários self-hosted:- Quais versões do Kodus ainda estão em uso, e com que velocidade novos releases são adotados
- Como os operadores fazem deploy (Docker / Kubernetes / bare metal), pra priorizarmos as plataformas que as pessoas realmente usam
- Se features como Kody Rules estão chegando aos usuários self-hosted
- Sinais de volume (PRs revisados na frota, repos conectados) pra dimensionar decisões de capacidade
Inspecione o que sua instância enviaria
Antes de qualquer heartbeat sair da sua instância, você pode imprimir o payload exato que o cron diário construiria:jq pra
explorar:
Desligar a telemetria
DefinaKODUS_TELEMETRY_DISABLED=true no seu ambiente. O cron pula
silenciosamente — nenhum heartbeat é enviado, jamais, até você reverter.
1, true, yes,
on. Qualquer outro valor (incluindo vazio) mantém a telemetria ligada.
Onde os dados ficam
- Receiver: um pequeno serviço Node.js (Fastify) deployado em
telemetry.kodus.io. Código-fonte público: kodustech/kodus-beacon. - Storage: Neon Postgres, região US, criptografado em repouso, somente
TLS. Duas tabelas —
telemetry_instances(uma row por instância, last seen + version) etelemetry_heartbeats(uma row por instância por dia UTC, payload em JSONB). - Retenção: rows individuais de heartbeat ficam por 12 meses. Depois disso, agregamos os contadores em estatísticas históricas (ex: “X instâncias ativas em Janeiro/2026”) e droppamos as rows por dia. A row da instância permanece — não carrega séries temporais, apenas a versão mais recente + timestamp de last seen.
- Acesso: apenas o time de engenharia de produto, via credenciais individuais da Neon com auditoria. Os dados nunca são compartilhados com terceiros e nunca são usados pra treinar nenhum modelo de IA.
Código-fonte que você pode auditar
As duas pontas são abertas e pequenas o suficiente pra ler de cabo a rabo:- Cliente (o que roda na sua instância): cron, coletor e transporte
HTTP em
libs/telemetry/eapps/worker/src/cron/self-hosted-beacon.cron.ts. - Servidor (o que roda em
telemetry.kodus.io): o receiver inteiro são ~80 linhas de rota Fastify + um upsert em Postgres. Veja kodustech/kodus-beacon.