Self-hosting Kilden
Kilden is built to be self-hostable, and self-hosting will be documented here when our open source release ships. No date promises — we’d rather publish it working than announced.
What you’d be running
Section titled “What you’d be running”The honest preview. Kilden is a small fleet of stateless services around four pieces of infrastructure — Kafka-compatible streaming, ClickHouse, Postgres, Redis, and S3-compatible object storage for replay:
SDKs / provider webhooks / external sources │ ▼ capture ──► events_raw (keyed by distinct_id) │ ▼ enricher ──► Postgres (persons, identities) │ ▼ events_enriched (keyed by person_id) │ │ │ │ ▼ ▼ ▼ ▼ warehouse campaign CDP live tail writer matcher sync │ │ │ │ ▼ ▼ ▼ ▼ panel (websocket) ClickHouse journeys destinations (PG) → scheduler → dispatcher → email provider │ provider webhooks ──────┘ (re-enter through capture)Session replay takes a parallel path: recording chunks go to object storage, only ~200-byte pointers travel through Kafka, and an indexer builds the session index in ClickHouse.
The properties that make it operable:
- Services are stateless — all state lives in the databases and consumer offsets, so everything scales horizontally and restarts are boring.
- At-least-once delivery with idempotent edges — every layer can retry safely; deduplication by client-generated UUIDs makes it exactly-once where it counts.
- One write path — every event enters through capture, so there’s exactly one thing to secure, rate-limit and monitor for ingestion.
Meanwhile
Section titled “Meanwhile”Kilden Cloud is the hosted version of exactly this architecture — same code, same guarantees. Everything else in these docs applies to both.