Product

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.

Event to query
< 5 ms p99
Native sources
60+ sources
Edge network
38 regions
Architecture

Three stages, one system.

Basalt architecture: Kafka, Postgres CDC, webhooks and the SDK flow into the ingest log, incremental views and serving layer, which feed the app API, dashboards and models.SOURCESBASALTCONSUMERSKafkaPostgres CDCWebhooksSDKtopicsWALHTTPSTS · PY · GOREYKJAVÍK · 38 REGIONS010203Ingest logIncremental viewsServing layerordered, replicatedSQL, always currentREST · GraphQL · PGApp APIDashboardsModelsRESTPG wirefeatures< 5 ms p99, end to end
Fig. 01 · Event path
Exactly-once from source to API
Step 01
Ingest

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
Ingest
Shape
Serve
prod · eu-north-1
Throughput
1.28Mev/s
Sources
17live
Dropped
0/ 24h
Time
Event
Region
Set in
14:02:11.482
payment.succeeded
eu-n1
2.1 ms
14:02:11.471
model.inference
us-e2
3.4 ms
14:02:11.455
session.started
ap-s1
1.8 ms
14:02:11.430
cart.updated
eu-w3
2.7 ms
14:02:11.418
invoice.paid
us-w1
1.9 ms
14:02:11.402
sensor.reading
eu-n1
1.2 ms
14:02:11.391
user.signed_up
us-e2
2.4 ms
14:02:11.377
search.query
ap-s1
3.0 ms
14:02:11.360
payment.refunded
eu-w3
2.2 ms
14:02:11.348
model.inference
us-w1
3.8 ms
Step 02
Shape

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
Ingest
Shape
Serve
prod · eu-north-1
-- 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;
stream.payments
stream.sessions
revenue_by_minute
api / v1
Step 03
Serve

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
Ingest
Shape
Serve
prod · eu-north-1
p50
1.9ms
p99
4.2ms
Cache hit
98.7%
p99 latency · last 60 s
ms
GET/v1/revenue_by_minute?region=eu200 · 3.1 ms
Platform

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.

By the numbers

Measured in production.

Query latency, p99
4.2ms

Across all public regions, trailing 90 days.

Events per day
2.1B

Peak sustained load on one production cluster.

View freshness
12ms

Median time from event to updated view.

Edge regions
38

From Reykjavík to Singapore, more every quarter.

Customer
“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.”
HS
Halldór Sigurðsson
Staff Engineer, Northwind
Get started

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.

Project reserved · check your inbox
That didn't go through · check the address and try again
2,400+ teams in productionSOC 2 Type II38 regions