basalt

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.

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.28M

ev/s

Sources

17

live

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

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 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

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.9

ms

p99

4.2

ms

Cache hit

98.7

%

p99 latency · last 60 s

ms

GET

/v1/revenue_by_minute?region=eu

200 · 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.2

ms

Across all public regions, trailing 90 days.

Query latency, p99

4.2

ms

Across all public regions, trailing 90 days.

Events per day

2.1

B

Peak sustained load on one production cluster.

View freshness

12

ms

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.

2,400+ teams in production

SOC 2 Type II

38 regions

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.

2,400+ teams in production

SOC 2 Type II

38 regions

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.

2,400+ teams in production

SOC 2 Type II

38 regions

© 2026 Basalt Labs

All systems normal

Back to top ↑

404

© 2026 Basalt Labs

All systems normal

Back to top ↑

404

© 2026 Basalt Labs

All systems normal

Back to top ↑

404

Create a free website with Framer, the website builder loved by startups, designers and agencies.