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).