Skip to content

ADR 0001 - Go as implementation language

  • Status: accepted
  • Date: 2026-11-02

Context

Tapyr is a long-running collector with fine-grained concurrency (rate limits, concurrency limits, many simultaneous job runs), persistent state, and standard observability outputs. It should be trivial to deploy.

Decision

Implement Tapyr in Go, distributed as a single static binary (no CGO) and a Docker image.

Alternatives considered

  • Python: faster to prototype, rich vendor SDKs, but weaker concurrency ergonomics for this kind of scheduler, heavier deployment, and vendor SDKs would push towards vendor-specific code.
  • Rust: excellent performance and safety, but a smaller observability ecosystem for our needs and a higher contribution barrier.

Consequences

  • Native access to the Prometheus and OpenTelemetry Go ecosystems and to cel-go.
  • Same language as most exporters and as Grafana Alloy / OTel Collector, familiar to contributors in the observability space.
  • No CGO constraint: pure-Go SQLite (modernc.org/sqlite).