Bruin CLI Step 3 of 4

Build a local DuckLake lakehouse

1) Configure .bruin.yml

Replace the root .bruin.yml with two DuckDB connections: one regular connection for the raw CSV data and one DuckLake connection for the finished tables.

default_environment: default
environments:
  default:
    connections:
      duckdb:
        # Local source database for the raw CSV data.
        - name: duckdb-default
          path: source.duckdb

        # DuckDB engine + Postgres catalog + MinIO storage.
        - name: ducklake-pg
          path: engine.duckdb
          lakehouse:
            format: ducklake
            catalog:
              type: postgres
              host: localhost
              port: 5434
              database: ducklake_meta
              auth:
                username: lakehouse
                password: lakehouse
            storage:
              type: s3
              path: s3://ducklake/warehouse
              endpoint: localhost:9010
              url_style: path
              use_ssl: false
              auth:
                access_key: minioadmin
                secret_key: minioadmin

duckdb-default holds the raw source data. ducklake-pg points to the lakehouse: Postgres stores metadata while MinIO stores the Parquet files. The DuckLake configuration reference documents the supported catalog and storage combinations.

endpoint, url_style: path, and use_ssl: false tell DuckDB how to connect to local MinIO over HTTP. The Postgres password is lakehouse, rather than ducklake, so Bruin's masked logs do not obscure the DuckLake schema name.

Sign up to our newsletter

Practical updates on open-source data pipelines, AI analysts, governance, and what we are shipping at Bruin.