One layer from event to answer.
Basalt replaces the queue, the stream processor, the warehouse job and the cache with one system. Events go in, typed tables come out, and every table is an API.
Three stages, one system.
Catch every event, exactly once.
Kafka topics, Postgres change streams, webhooks and SDK calls all write to one ordered, replicated log. Producers can retry as often as they like. Basalt keeps the first copy and drops the rest.
- Idempotent writes keyed per producer and partition
- Schema inferred on the first event, versioned on every change
- 72 hours of back-pressure buffer without dropping a row
Write SQL. Basalt keeps it current.
Define a view once in plain SQL. Basalt maintains it incrementally, so joins, windows and aggregates update with each event instead of waiting for a nightly job.
- Streaming joins, windows and aggregates across any source
- Column-level lineage from every row back to its raw event
- Edit a view and the backfill runs beside the live version
-- materialized, incrementally maintained CREATE TABLE revenue_by_minute AS SELECT window(ts, '1 minute') AS minute, p.region, sum(p.amount_cents) / 100 AS revenue, count(DISTINCT s.user_id) AS buyers FROM stream.payments p JOIN stream.sessions s USING (session_id) WHERE p.status = 'succeeded' GROUP BY 1, 2;
Every table is already an API.
The moment a view exists, your app, dashboards and models can read it. Replicas sit close to your users and answer in single-digit milliseconds at p99.
- REST, GraphQL and the Postgres wire protocol
- Read replicas in 38 regions with sub-second failover
- Row-level security keyed to your auth provider
Everything else you'd build yourself.
Schema registry
Every field is typed and versioned. Breaking changes are flagged before they ship, not after a dashboard goes blank.
Lineage
Trace any number in any table back to the exact events that produced it, down to the column.
Backfills
Replay two years of history into a new view while the old one keeps serving. Swap when it catches up.
Access policies
Row and column policies written in SQL, enforced on every API, replica and export.
Observability
Lag, throughput and p99 per source and view, with OpenTelemetry export to the tools you already watch.
Edge cache
Hot reads are served from the nearest of 38 regions and invalidated the instant a row changes.
Measured in production.
Across all public regions, trailing 90 days.
Peak sustained load on one production cluster.
Median time from event to updated view.
From Reykjavík to Singapore, more every quarter.
“We replaced a Flink cluster, two Airflow DAGs and a Redis cache with eleven SQL views. Our dashboards went from hourly to live, and nobody gets paged for it anymore.”
Set your data in stone.
Free up to 10M events a month. No card, no sales call. Your first pipeline is live in about four minutes.