Craft models, kept live.
Install the craft-basalt adapter and materialize models as Basalt views. They update incrementally as events arrive, not on a schedule.
How it works.
The adapter adds a materialized_view materialization that compiles each model to a Basalt view. Refs become view dependencies, and Craft tests run as SQL against the live result.
Set it up in three steps.
Connect the tool
Install craft-basalt with pip and add a basalt target to profiles.yml. Set materialized to materialized_view on the models you want live.
# register a Craft project with the workspace basalt connect Craft --project analytics --target prod ✓ profile written · adapter craft-basalt 0.4.1 ✓ 31 models compiled · 12 live views
Shape it with a view
Write plain SQL over the source. Basalt keeps the view current with every record and tracks lineage back to the topic, partition and offset.
CREATE MATERIALIZED VIEW revenue_by_min AS SELECT date_trunc('minute', ts) AS minute, currency, sum(amount) AS revenue, count(*) AS payments FROM payments WHERE status = 'captured' GROUP BY 1, 2;
Read it from anywhere
Every view is an endpoint the moment it exists. Call it over REST, connect with any Postgres client, or use the SDK from your app.
curl https://api.basalt.dev/v1/views/revenue_by_min?limit=5 \ -H "Authorization: Bearer $BASALT_TOKEN"
What you get.
Live models
Models update as rows arrive, so there is no run schedule to tune.
Tests included
not_null, unique and custom tests run against the live view.
Shared lineage
Refs map to view dependencies, visible in both Craft docs and the console.
Mixed projects
Keep batch models in your warehouse and live models in Basalt.
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.