v0.1.0
Changelog
All notable changes to TinyRaven are documented here. Format follows
Keep a Changelog; this project adheres to
Semantic Versioning.
0.1.0 — 2026-06-29
First release: a working, self-hosted, Tinybird-API-compatible analytics backend
over OSS ClickHouse. Covers MILESTONE Phases 1 (MVP ingestion + query) and 2 (API
publishing + deployment). Single tr binary = server + CLI.
Added — Phase 1 (MVP: core ingestion + query)
- HTTP server on
net/http+chirouter. POST /v0/events— JSON / NDJSON ingestion; per-row validate + quarantine
(ADR 0018);202 {successful_rows, quarantined_rows}ack-on-buffer (ADR 0004).GET /v0/pipes/{name}.json— parameterized SQL pipes via{{Type(name,default)}}
→ ClickHouse{name:Type}parameters, injection-proof (ADR 0003).GET /health(liveness) +GET /health/ready(Redis + ClickHouse, cached) — ADR 0024.- Gatherer: in-process batching, flush on
max(10,000 events, 5s), graceful drain. .datasourceparser (SCHEMA/ENGINE/ENGINE_* + structural validation, ADR 0008/0027)
→ Redis schema registry (ADR 0001 — Redis-only metadata, no Postgres)..pipeparser + in-memory pipe registry with atomic hot-reload swap (ADR 0020).- Bearer token auth middleware → Redis token store (ADR 0005).
tr local start→ Docker Compose (ClickHouse 26.3 LTS + Redis AOF + TinyRaven).- Dev hot reload on
.datasource/.pipechange (mtime poll).
Added — Phase 2 (API publishing + deployment)
tr deploy— validate all files, diff schema against livesystem.columns,
create missing tables, apply additiveALTER TABLE ADD COLUMN; breaking changes
detected and refused (shadow-table/EXCHANGEdeferred to Phase 3, ADR 0007).- Full pipe param types:
String,DateTime,Int64,Float64,UUID,
Boolean(+Int32,Date,DateTime64) — validated + normalized, 400 on bad input. GET /v0/sql— read-only ClickHouse SQL proxy (readonly=2+ caps, ADR 0011).GET /v0/metrics— Prometheus exposition viaprometheus/client_golang.GET /v0/openapi.json— runtime OpenAPI 3.0 spec from the pipe registry (ADR 0017).- Per-token rate limiting — in-memory
httpratesliding window (ADR 0015). - Query observability —
pipe_statstable fed by a non-blocking background
flusher (ADR 0014). - Tinybird-compatible error envelope
{"error": "..."}+ status mapping +
X-DB-Exception-Codepassthrough (ADR 0012).
Infrastructure
- CI (GitHub Actions): gofmt +
go vet, race tests with coverage, integration
tests against ClickHouse + Redis service containers, build; Codecov upload. - CodeRabbit review config; Dockerfile (static
trbinary).
Known limitations (deliberate, see // ponytail: notes)
- Single-node
tr(ADR 0031); ack-on-buffer is at-most-once on hard crash until WAL. pipe_statslives in the workspace DB (nottinybird.pipe_stats); drops on overflow.- Rate limit is a global per-token default; per-pipe
RATE_LIMITwiring pending. /v0/sqluses thereadonly=2setting; a dedicated read-only CH user is the
production upgrade.