Bruin
One Go command-line tool that ingests data, runs SQL and Python transformations and checks the results, with each step a file in your repo.
- What it is
- ETL & ELT pipelines
- Type
- Open source
- Made by
- Bruin Data Limited
- License
- Apache 2.0 (the CLI, since its first commit in 2023); the ingestr engine it installs is FSL-1.1-ALv2 since its 2026 Go rewrite (each release becomes Apache 2.0 after two years; earlier Python versions are MIT); Bruin Cloud is proprietary
- Facts checked
- 6 October 2026
What it is
A Bruin project is a git repository. .bruin.yml at the root holds environments and connection credentials; each pipeline folder has a pipeline.yml and an assets/ folder, and every asset is one file. A SQL asset starts with a /* @bruin ... @bruin */ YAML header giving the table name, the platform (duckdb.sql, bigquery.sql, snowflake.sql and so on), how to materialize it (table, view or an incremental strategy such as merge) and its upstream depends. Python assets carry the same kind of header and run in their own uv environment. An ingestr asset copies a table from a source connection into the warehouse. bruin run executes assets in dependency order, inside your warehouse, and after each one runs its column checks (not_null, unique, non_negative, custom SQL); a failing blocking check stops everything downstream. bruin lineage shows upstream and downstream assets, and the SQL parser can trace lineage down to columns.
The CLI keeps no server and no scheduler: you run it on a laptop, a VM or GitHub Actions, and the schedule in pipeline.yml is read by Bruin Cloud or your own scheduler. Bruin Data Limited, an English company incorporated in June 2023, builds it alongside ingestr, its ingestion engine. Bruin Cloud bills per second at $0.01 per credit: SQL assets, and Python or ingestion assets on the default 256 MB size, cost 250 credits ($2.50) an hour, rising to $160 an hour at 16 GB, and AI tasks cost 100 to 300 credits each. New accounts get $100 of credits; the Scale plan adds committed-use discounts, SSO and an SLA.
Why teams pick it
- Ingestion, transformation, quality checks and lineage in one tool and one file format, instead of three or four products glued together
- A single Go binary with no server, so the same pipeline runs locally and in CI
- Wide platform support: 28 warehouse and lake platforms (BigQuery, Snowflake, Databricks, DuckDB, Postgres, ClickHouse, Trino and more) and over 130 ingestion sources
- SQL, Python and R assets in the same pipeline, with Python isolated per asset by
uv - Apache 2.0 CLI and an open-source VS Code extension that renders queries, lineage and checks
Watch out for
- Young: still version 0.x after three years, with releases almost daily (0.11.773 on 6 October 2026) and a small community next to Airbyte or dbt
- The ingestion engine is not plain open source any more: ingestr 1.x is under the Functional Source License, which bars competing uses until each release turns Apache 2.0 after two years
- No scheduler or retry service in the CLI: production scheduling means Bruin Cloud, cron, GitHub Actions or another orchestrator
- Assets use Bruin’s own comment-header format, so pipelines do not move to dbt or Airflow without rewriting
- Lakehouse support (Iceberg and DuckLake through DuckDB or Trino) is still marked beta
Alternatives
What all etl & elt pipelines have in common →
DagsterOpen sourceA Python data orchestrator built around assets: you declare the tables, files and models that should exist, and Dagster works out what to run.
dbtOpen sourceSQL `select` statements in git, built into warehouse tables in dependency order, with tests and docs alongside.
EstuaryCommercialA managed data-movement platform that captures changes from databases and SaaS sources into collections kept as JSON files in your own bucket, then keeps warehouses and other systems in sync, in real time or on a schedule.
FivetranCommercialManaged connectors that copy data from SaaS apps, databases and files into your warehouse or lake, billed by the rows that change each month.
MeltanoOpen sourceA command-line ELT tool that runs Singer taps and targets from a `meltano.yml` project kept in git.
OLakeOpen sourceAn open-source tool in Go that copies databases, Kafka topics and S3 files into Apache Iceberg tables (or plain Parquet), with full loads, incremental syncs and CDC, and no Kafka, Debezium, Spark or Flink in between.How it fits with other technologies
What Bruin uses
assets/mart/revenue_daily.sql: a DuckDB asset with checks, run with `bruin run` · sql
/* @bruin
name: mart.revenue_daily
type: duckdb.sql
materialization:
type: table
depends:
- raw.orders
columns:
- name: order_date
type: date
checks:
- name: not_null
- name: unique
- name: revenue
type: double
checks:
- name: non_negative
@bruin */
SELECT CAST(created_at AS DATE) AS order_date,
SUM(amount) AS revenue
FROM raw.orders
GROUP BY 1What one Bruin pipeline replaces#
Bruin’s docs describe it as what you would get if “dbt, Airbyte, and Great Expectations had a lovechild”. This is how each job maps.
| Job | In Bruin | Usually a separate tool |
|---|---|---|
| Ingestion | ingestr assets (YAML) or Python assets | Airbyte, Fivetran, Meltano |
| Transformation | SQL, Python and R assets with materializations | dbt |
| Data quality | Column and custom checks that block downstream assets | Great Expectations, dbt tests |
| Lineage | bruin lineage and column-level lineage from SQL parsing | A data catalog |
| Scheduling | Bruin Cloud, or your own cron or CI | Airflow, Dagster |
Bruin Cloud compute prices#
Pay as you go at $0.01 per credit, billed per second while an asset runs. List prices checked on 6 October 2026.
| Asset size | Credits per hour | Price per hour |
|---|---|---|
| SQL asset | 250 | $2.50 |
| Python or ingestion, 256 MB (default) | 250 | $2.50 |
| 1 GB | 1,000 | $10 |
| 4 GB | 4,000 | $40 |
| 16 GB | 16,000 | $160 |
- AI tasks cost 100 to 300 credits ($1 to $3) each. New accounts get $100 of credits and 50 AI tasks; the self-hosted CLI is free.
See it in a real stack
No architecture uses Bruin yet. Drop it into the playground and wire it up yourself.Open playground →Where it came from2023–2026
Burak Karakan and Sabri Karagönen started Bruin Data in 2023, incorporating in England that June. Their complaint was the modern data stack itself: one tool to ingest, another to transform, another to check quality, another to orchestrate, and a pile of glue between them. Karakan’s launch post sketches the setup teams typically described: Airflow triggering Airbyte and waiting on sensors, calling dbt Cloud, spinning up pods for checks, while analysts wait six weeks for a new chart.
The first commit landed in July 2023 and v0.1.0 was tagged that December. In early 2024 the team split ingestion out as ingestr, a command-line tool that copies a table from a source URI to a destination URI, first written in Python on top of dlt. Bruin CLI and its VS Code extension were launched publicly in December 2024, with a hosted Bruin Cloud announced alongside.
In 2026 ingestr was rewritten in Go for version 1.0 and moved from MIT to the Functional Source License, while the Bruin CLI stayed Apache 2.0.
Why it’s built this way
- One tool for ingestion, transformation and quality
- The founders saw most breakages and delays in the glue between separate products, and argued that work which belongs together should live in one framework.
- Assets as files with an embedded YAML header
- Keeping configuration next to the SQL or Python in the same file means the whole pipeline is versioned, reviewed and run from a git repo.
- Written in Go
- A single static binary is easy to install anywhere, from a laptop to GitHub Actions, without a Python environment for the CLI itself.
Timeline
- 2023
Bruin Data incorporated in June; first commit in July; v0.1.0 in December
- 2024
ingestr released in February; public launch of Bruin CLI in December
- 2026
ingestr 1.0 rewritten in Go and relicensed under FSL
- Bruin blog: Launch: Bruin CLI (Burak Karakan, 20 December 2024)
- Bruin: Manifest (founders)
- Companies House: Bruin Data Limited (incorporated 26 June 2023)
- bruin-data/bruin on GitHub: release v0.1.0 (December 2023)
- bruin-data/ingestr on GitHub: release v1.0.0 (May 2026)
- Bruin blog: What is the fastest open-source data ingestion tool? (July 2026; ingestr history and Go rewrite)
Sources18 · facts checked 6 October 2026
- Bruin docs: What is Bruin?
- Bruin docs: Quickstart (`.bruin.yml`, asset headers, `bruin run`)
- Bruin docs: Installation
- Bruin docs: Quality checks
- Bruin docs: Available checks
- Bruin docs: `lineage` command
- Bruin docs: Python assets (uv isolation, column-level lineage)
- Bruin docs: Data ingestion
- Bruin docs: Ingestr assets (version pinning)
- Bruin docs: Pipeline definition (`schedule` is read by Bruin Cloud or an external scheduler)
- Bruin docs: Lakehouse support (beta)
- Bruin docs: GitHub Actions
- bruin-data/bruin on GitHub: LICENSE.md (Apache 2.0)
- bruin-data/bruin on GitHub: releases
- bruin-data/bruin on GitHub: platform docs (one page per supported platform)
- bruin-data/ingestr on GitHub: LICENSE (FSL-1.1-ALv2)
- ingestr 0.1.0 on PyPI (Python, built on dlt)
- Bruin pricing