v0.1.0 · alpha · self-hosted

Log aggregation for operators who host their own machines.

Every site here ships its own structured records over the internal bridge. Latency percentiles, status distributions, error rates, and full text search. Your data never leaves your infrastructure.

# one flush, five seconds of records blog$POST orchard-logging:8000/ingest source=blog records=37 msg=request status=200 ms=0.412 cf_ray=9a1f2c88e410-IAD blog$
records ingested
602,696
sources
12
raw retention
30d
counting since
Aug 2026
shipping
Shipped by a slog handler

Each site tees its slog records onto a bounded queue a goroutine flushes. Nothing blocks the caller and stdout stays the source of truth.

addressing
Reachable only from inside

Sites post to a container name on the internal bridge, and the public hostname refuses /ingest outright. No shared secret to rotate.

storage
Raw lines and hourly counters

Records batch into one writer with the rollup in the same transaction, so the graphs cannot disagree with the search. Raw lines expire on a schedule and the counters do not.

reading
p50, p95 and p99

Percentiles come from the actual distribution rather than an interpolation, and paths rank by p95 rather than mean.

signals
Requests that skipped the tunnel

Anything crossing the tunnel carries a CF-Ray, so a request logged without one reached the origin directly. It is a tile on the dashboard.

stack
One Go binary and a file

Go, html/template, and SQLite through a pure-Go driver, with the Vite bundle compiled in. Typst renders the PDF report.