WaveHouse: An Open-Source Full-Stack Backend Solution for ClickHouse

WaveHouse brings Supabase-like auth, security, and realtime capabilities to ClickHouse in a single Go binary.
WaveHouse is an open-source project positioning itself as "Supabase for ClickHouse." It packages durable data ingestion (without Kafka), row-level and column-level security, role management, and realtime streaming into a single Go binary deployed alongside ClickHouse. Born from IoT telemetry challenges, it addresses ClickHouse's common engineering pain points around writes, authentication, and fine-grained access control.
When ClickHouse Meets Engineering Challenges
ClickHouse, as a high-performance columnar analytical database, delivers exceptional results in massive data processing and real-time aggregation queries, and has long been the go-to engine for data analytics, observability, and IoT scenarios. It uses a columnar storage architecture where data is organized on disk by column rather than by row, allowing analytical queries (such as SUM, AVG, COUNT, and other aggregation operations) to read only the relevant columns, dramatically reducing I/O overhead. Under the hood, it uses the MergeTree engine family: incoming data first lands in an in-memory buffer, then gets flushed to disk as "parts" (data partition blocks), while background threads continuously merge small parts into larger ones (similar to LSM-Tree compaction) to optimize query performance. However, behind this powerful query capability often lies a significant engineering barrier.
Recently, an open-source project called WaveHouse gained attention on Reddit. Its positioning is quite straightforward — "Supabase for ClickHouse." The project's author, while building an IoT telemetry solution, repeatedly ran into several pain points when deploying ClickHouse in practice, and decided to package these common requirements into a tool that can be deployed alongside ClickHouse.
For developers familiar with Supabase, this analogy is almost self-explanatory. Supabase is an open-source Firebase alternative whose core philosophy is layering a suite of application-level services on top of PostgreSQL. Its architecture consists of multiple loosely coupled components: PostgREST automatically maps database tables to RESTful APIs; GoTrue provides user registration, login, JWT token management, and other authentication services; the Realtime service listens to PostgreSQL's WAL (Write-Ahead Log) changes and pushes them to clients via WebSocket; and the Storage module handles file uploads and access control. PostgreSQL's native Row Level Security (RLS) policies are used to implement fine-grained permissions — each SQL query automatically has security filter conditions appended before execution. By layering authentication, row-level security, real-time subscriptions, and other capabilities on top of PostgreSQL, Supabase turns a bare database into a ready-to-use backend platform. WaveHouse aims to do exactly the same thing for ClickHouse.
Three Major Pain Points in ClickHouse Deployment
The project's author clearly outlined the difficulties they encountered, and these pain points represent the common struggles many teams face when using ClickHouse.
Fast Writes and Durability Are Hard to Achieve Simultaneously
The first issue is writes. To achieve fast AND durable data insertion in ClickHouse, you typically can't avoid introducing a message queue like Kafka as a buffer layer.
This is dictated by ClickHouse's design philosophy: it favors batch inserts. Frequent small-batch inserts generate numerous small partitions (parts), creating merge pressure that can severely impact query performance. If the application layer frequently initiates small-batch inserts (e.g., writing only a few rows at a time), it produces a massive number of small parts. The merge threads can't keep up with the write speed, eventually triggering a "Too many parts" exception, and query latency spikes dramatically. ClickHouse officially recommends that each insert contain at least thousands to tens of thousands of rows, with write frequency controlled to roughly once per second.
To balance write throughput with data reliability, a common engineering practice is to set up a Kafka pipeline in front. Apache Kafka is a distributed event streaming platform known for its high throughput, durability, and exactly-once semantics. In a ClickHouse data pipeline, Kafka typically serves as a write buffer layer: producers write data as messages to a Kafka Topic, and consumers (usually ClickHouse's Kafka table engine or external ETL tools) pull and insert in batches, naturally satisfying the batch write requirement. Kafka itself guarantees no data loss through its multi-replica partition mechanism. However, deploying a Kafka cluster means additional ZooKeeper/KRaft management, Topic partition planning, consumer group coordination, and monitoring and alerting. For a project that simply wants to quickly validate ClickHouse's capabilities, the cost of building and maintaining an entire Kafka infrastructure is clearly excessive.
There's an Entire Backend Between Queries and the UI
The second pain point lies on the data consumption side. When querying data from ClickHouse and displaying it on a frontend interface, you can't let browsers connect directly to the database — there must be a backend API in between to handle authentication and authorization.
This means that even for a simple data dashboard project, you need to build a complete set of server-side logic from scratch: user login, permission verification, SQL proxying, and result delivery. Every new project requires rewriting this scaffolding all over again.
Lacking Fine-Grained Security and Real-Time Capabilities
The third issue is row-level and column-level security, role management, and realtime streaming.
Row Level Security (RLS) is a data access control mechanism that allows database administrators to define policies so that different users see only authorized rows when executing the same SQL query. For example, in a multi-tenant SaaS application, queries from Tenant A are automatically filtered to return only records where tenant_id='A'. Column Level Security (CLS) further controls which fields a user can access — for instance, regular analysts can view aggregated metric columns but cannot access columns containing personal user information. PostgreSQL has natively supported RLS since version 9.5, and Supabase leverages this for permission management. While ClickHouse provides Role-Based Access Control (RBAC) and partial column-level GRANT mechanisms, it lacks native row-level security policies. Implementing multi-tenant data isolation typically requires manually appending WHERE conditions at the query layer or relying on application code.
In multi-tenant scenarios or those with data sensitivity requirements, controlling who can see which rows and columns is essential. And pushing data changes to the frontend in real time is the core experience for telemetry and monitoring applications. Real-time streaming is critical in observability and telemetry scenarios: operations teams need to see second-level metric changes on monitoring dashboards, not manually refresh every few dozen seconds. Common implementation approaches include WebSocket-based server push, Server-Sent Events (SSE), and gRPC streams. ClickHouse itself doesn't have a Change Data Capture (CDC) mechanism like PostgreSQL's logical replication — its MergeTree engine merges data asynchronously in the background and doesn't produce a standard change event stream. ClickHouse doesn't directly provide complete out-of-the-box solutions for these capabilities, requiring developers to assemble them on their own.
WaveHouse's Approach: One Go Binary to Handle Everything
Facing this repetitive scaffolding work, WaveHouse's approach is to build everything into a single Go binary deployed alongside ClickHouse.
Go's compilation model natively supports static linking, packaging all dependencies into a single executable with no external runtime dependencies. This means deployment only requires distributing one binary — no need to install language runtimes, manage dependency versions, or configure container image layers — especially useful in edge nodes, IoT gateways, or resource-constrained environments. Go's goroutine scheduler and efficient network I/O model also make it particularly suitable for building network proxies and middleware services.
According to the project description, WaveHouse provides the following core capabilities all at once:
- Fast, durable ingest: No need to deploy Kafka separately for write reliability. WaveHouse likely employs mechanisms such as local WAL file pre-write logging, in-memory buffering + scheduled batch flushing, to achieve equivalent durability guarantees within a single process.
- Row-level and column-level security with role management: Intercepting and rewriting queries at the proxy layer to inject security filter conditions, essentially simulating RLS behavior outside ClickHouse, implementing fine-grained permission control directly at the data access layer.
- Realtime streaming: Supporting real-time data change pushes to consumers. Possible implementations include periodic delta polling queries, leveraging ClickHouse's LIVE VIEW (experimental feature) to monitor query result changes, or synchronously pushing events at the write proxy layer.
Single-binary deployment is a major highlight of this solution. Compared to Supabase's complex architecture composed of multiple services (PostgREST, GoTrue, Realtime, etc.) — where a full deployment involves PostgreSQL, PostgREST (Haskell), GoTrue (Go), Realtime (Elixir), Kong gateway, and other heterogeneous services requiring Docker Compose or Kubernetes orchestration to run properly — a single Go compiled artifact means extremely low deployment and operations overhead: download, run, connect to ClickHouse, and start using it. WaveHouse compiles authentication, security policies, write buffering, and real-time push all into a single process. While this sacrifices the independent scalability of a microservices architecture, it offers significant advantages in operational simplicity. This is especially friendly for small teams and rapid prototyping projects.
Why This Direction Is Worth Watching
The emergence of WaveHouse reflects a larger industry trend: the growing demand for building "application-layer platforms" around high-performance data engines.
Supabase's success has already proven that when a powerful but low-level database (PostgreSQL) is wrapped with authentication, authorization, real-time, and API generation capabilities, it can reach a far broader developer audience than it originally could. ClickHouse's position in the analytics and time-series data domain bears some resemblance to PostgreSQL's position in the OLTP domain — both are widely recognized core engines that nonetheless have adoption barriers.
The IoT telemetry entry point also reveals precise positioning. IoT telemetry data has distinct engineering characteristics: first, extremely high write frequency — tens of thousands or even millions of devices may simultaneously report sensor readings at sub-second intervals, with write peaks exceeding millions of records per second; second, the data is inherently time-series in nature, with each record carrying a timestamp and query patterns dominated by time-range scans and downsampling aggregations; third, multi-tenant isolation requirements — different customers' device data must be strictly isolated, involving both security compliance and query performance concerns; fourth, real-time requirements — scenarios like device anomaly alerts and geofence triggers demand end-to-end latency from data collection to visualization within seconds.
Telemetry data is characterized by high-frequency writes, strong time-series properties, real-time visualization needs, and often multi-device/multi-tenant permissions — which precisely concentrates and exposes all of ClickHouse's write challenges, real-time requirements, and security needs at once. ClickHouse excels in time-series aggregation queries thanks to columnar compression and its vectorized execution engine, but the aforementioned write patterns and real-time push requirements fall squarely on its architectural weaknesses. A tool refined from this starting point actually possesses stronger general-purpose applicability.
Things to Watch Before Using It
As an early-stage open-source project, WaveHouse is currently focused primarily on the value proposition of "lowering the engineering barrier for ClickHouse." The specific technical implementation details, performance characteristics, and production readiness still require further validation. The following aspects deserve careful attention from potential users:
- Durable ingest implementation: Without relying on Kafka, how does WaveHouse guarantee that writes are both fast and lossless? Whether it uses a local WAL (Write-Ahead Log — a technique that records changes to a persistent log before data is formally written to the target storage, used for replaying incomplete write operations during crash recovery), buffered flushing, or other mechanisms directly determines whether it can replace mature message queue solutions.
- Security model maturity: Row-level and column-level security in complex multi-tenant scenarios is often where the devil hides in the details. It's important to verify the performance overhead of policies under high-concurrency queries, whether the policy rule expressiveness is sufficient to cover complex business logic, and whether security filtering has bypass risks.
- Community and ecosystem development: As an open-source project, the author has explicitly stated they want feedback and plan to continuously add features, which means the current stage is more suitable for experimentation and co-building rather than direct use in critical production systems.
Summary
With the concise analogy of "Supabase for ClickHouse," WaveHouse hits a pain point that resonates with many developers — a powerful database shouldn't be kept behind heavy peripheral scaffolding. Packaging durable ingest, fine-grained security, and real-time streaming capabilities into a single Go binary is a pragmatic and developer-friendly engineering choice.
For teams currently using or planning to use ClickHouse — especially for IoT telemetry, monitoring and alerting, and real-time dashboard projects — WaveHouse is worth watching and trying out. As a rapidly iterating open-source project, it's better suited as a prototype validation tool and community contribution target; its robustness in production environments still needs time and community effort to refine.
Related articles

Google Antigravity + Gemini 3.7 Flash: An Efficient Approach to Multi-Agent Collaboration
Explore how Google's Antigravity orchestration platform and Gemini 3.7 Flash model work together to solve complex multi-agent math and engineering problems.

Max Plan Shifts from Subscription to Credits — Has Your Usage Actually Shrunk?
AI coding subscriptions shift from session-time to API credits. A $100 Max plan now offers $300 in credits at a 3:1 ratio — has actual usage really shrunk?

OpenAI Cuts Off Cursor: The Full Story Behind the Feud and China's Push for Open-Source, Affordable AI
OpenAI cuts Cursor's model access over Musk's acquisition; Cursor pivots to Claude. Meanwhile, Chinese AI models like Qwen, GLM, and Hunyuan push open-source affordability, accelerating AI democratization.