WaveHouse

WaveHouse

Open source real time API gateway for ClickHouse with SSE streaming and access control

Open Source

Gallery

About WaveHouse

WaveHouse is an API gateway that sits between your frontend and ClickHouse, handling the operational headaches that come with exposing an analytics database to applications. It takes care of batched ingestion to avoid the infamous too many parts error, validates incoming data against your schema at the edge before it touches the database, and pushes live events to clients over Server Sent Events. The framing is Supabase for ClickHouse or an open source alternative to Tinybird with real time push capabilities. It abstracts away the sharp edges that make ClickHouse powerful for analytics but punishing for application developers who just want to write and query data.

ClickHouse is exceptionally fast at analytical queries but unforgiving if you try to write to it naively from an application. Every small insert creates a part, and too many parts will grind your instance to a halt or trigger merge storms that tank query performance. WaveHouse solves this with async buffered ingestion. Writes land in a durable NATS JetStream write ahead log and return a 200 immediately, so your application never blocks waiting for ClickHouse. A background worker batches those writes and flushes them on a schedule that keeps part counts healthy. Failed inserts go to a dead letter queue for inspection rather than silently disappearing or crashing your ingest pipeline. This pattern means you can accept high frequency event streams without writing batching logic in your application layer.

The real time push layer is what elevates this beyond a reverse proxy or ingestion buffer. Every event that arrives is broadcast to SSE subscribers before it flushes to ClickHouse. If you are building a dashboard that shows live metrics, you get instant updates without polling and without standing up a separate Kafka or Redis pub sub stack. Late connecting clients automatically backfill from JetStream history, so they catch up without you implementing replay logic. The TypeScript SDK provides a live query primitive that handles reconnection and state sync, coming in at around 1.4 KB gzipped, small enough that you do not think twice about including it in a frontend bundle.

Access control follows the Hasura model with per table, per role column and row policies that use JWT claim templating. You define policies that reference fields from the user token, so a query automatically filters to only the rows that user should see without you writing that filtering logic in every endpoint. Policies store in NATS KV with file based bootstrap for reproducible deployments and automatic cluster synchronization. This lets you expose ClickHouse to end users with fine grained permissions rather than blanket read access or building a custom authorization layer on top.

Schema validation happens at ingest time by reading ClickHouse system tables. If a write contains an unknown field, a type mismatch, or a null where one is not allowed, WaveHouse rejects it at the edge before it ever reaches the database. Combined with optional deduplication using ReplacingMergeTree strategies and unique ID tracking via an embedded Pebble store, this catches bad data early rather than discovering corruption later in query results. Named pipes support parameter binding and per role restrictions, giving you endpoint level control over what queries can run and with what permissions.

Query caching protects dashboards from thundering herd problems. An in process Ristretto cache combined with Go singleflight coalesces identical concurrent queries, so when fifty users load the same dashboard at once, ClickHouse only runs the query once. This happens automatically without additional infrastructure or cache invalidation logic on your end.

WaveHouse is open source under Apache 2.0 and ships as a single binary containing the API, batch worker, embedded NATS JetStream, and optional Pebble deduplication store. ClickHouse is the only external dependency, which keeps the deployment footprint minimal compared to architectures that require Kafka, Redis, or a separate caching layer. You can self host it in front of your existing ClickHouse cluster or use the managed WaveHouse Cloud offering, which bundles managed ClickHouse plus the gateway with autoscaling and usage based pricing. The project is currently in alpha with published documentation, support cadence, and security policies.

If you are building user facing analytics, live dashboards, or any product that queries ClickHouse from a frontend, WaveHouse handles the plumbing so you can ship features instead of operating infrastructure. It fills the gap between raw ClickHouse and the kind of developer experience that Supabase provides for Postgres, without requiring you to give up control over where your data lives or how your cluster is configured.

Key Features

  • Async buffered ingest with write ahead log
  • Real time SSE streaming to frontends
  • Hasura style row and column access control
  • Schema aware validation at ingest
  • TypeScript SDK with live queries
  • Single binary self hosted deployment

Pros & Cons

What we like

  • Solves ClickHouse write batching and parts issues automatically
  • Real time push without separate event infrastructure
  • Fine grained access control lets you expose data to end users
  • Open source and self hostable under Apache 2.0

Room for improvement

  • Only works with ClickHouse, not other databases
  • Requires NATS JetStream for durable ingestion
  • Managed cloud pricing details not fully published
  • Currently in alpha with smaller community than Supabase

Frequently Asked Questions

What is WaveHouse?
WaveHouse is an open source API gateway for ClickHouse that handles buffered ingestion, real time streaming via SSE, schema validation, and access control. It sits between your frontend and ClickHouse to abstract away the operational complexity of running an analytics database behind applications.
Is WaveHouse free?
The self hosted version is free and open source under Apache 2.0, shipping as a single binary with NATS JetStream embedded. There is also a managed WaveHouse Cloud offering with usage based pricing that bundles the gateway with managed ClickHouse.
How does WaveHouse handle ClickHouse write batching?
Writes go to a durable NATS JetStream log and return immediately. A background worker batches them and flushes to ClickHouse on a schedule, preventing the too many parts errors that happen with naive high frequency inserts. Failed batches land in a dead letter queue.
Can I use WaveHouse for real time dashboards?
Yes. Events broadcast to SSE subscribers as they arrive, before flushing to ClickHouse. Late connecting clients backfill from JetStream history. The TypeScript SDK provides live query primitives that handle reconnection and state sync at around 1.4 KB gzipped.

Best For

Building live analytics dashboards over ClickHouseExposing ClickHouse to frontend apps with access controlIngesting high frequency events without write batching codeAdding real time streaming to existing ClickHouse clusters

Featured in

Alternatives to WaveHouse

Reviews (0)

No reviews yet

Be the first to share your experience with WaveHouse

Sign in to write a review

Badge builder

Add WaveHouse to your website

Choose a badge style and size, preview it here, then copy the generated HTML. Badge images are self-contained SVGs and do not require an external script.

WaveHouse badge preview
<a href="https://toolindex.net/tools/wavehouse?ref=badge" target="_blank" rel="noopener">
  <img src="https://toolindex.net/badge/wavehouse/medium.svg" alt="WaveHouse - Listed on Tool Index" width="180" height="50" />
</a>

How to use the badge

  1. 1. Pick the style, size, and theme that fit your layout.
  2. 2. Copy the generated HTML from the code block.
  3. 3. Paste it into your footer, homepage, or press page.

Standard badge available

The standard listing badge is available now. Score and circle badges are limited to tools currently ranked in the top 10 of a category.

Badge clicks return visitors to this profile with a referral tag so the source remains identifiable.