Skip to main content

Odibi

Declarative data pipelines. YAML in, star schemas out.

Note: Personal open-source project. See IP_NOTICE.md for details.

CI PyPI Python 3.9+ License Docs

Odibi is a framework for building data pipelines. You describe what you want in YAML; Odibi handles how. Every run generates a "Data Story" — an audit report showing exactly what happened to your data.

🤖 AI/LLM Users: For comprehensive context, see docs/ODIBI_DEEP_CONTEXT.md — 2,200+ lines covering all patterns, transformers, validation, connections, and runtime behavior.


🎯 Try Odibi in 5 Minutes (No Install Needed)

Open In Colab

Click the badge above → run 3 cells → see your first simulation. No Python install, no cloning, no setup.

The notebook walks you through:

  1. pip install odibi (runs in the cloud)
  2. Define a simulation in YAML (sensors, sales data, or industrial equipment)
  3. Run the pipeline → see the output → chart it with Altair

When you're ready for more: 38 simulation configs covering buildings, compressors, reactors, cooling towers, wastewater, production lines, and sales pipelines.


⚡ Quick Start (Local)

pip install odibi

Option 1: Simulate data from YAML

Create sim.yaml:

project: my_first_sim
engine: pandas
connections:
  output:
    type: local
    base_path: ./odibi-quickstart-output
story:
  connection: output
  path: stories/
system:
  connection: output
pipelines:
  - pipeline: demo
    nodes:
      - name: sensors
        read:
          connection: null
          format: simulation
          options:
            simulation:
              scope:
                start_time: "2026-01-01T00:00:00Z"
                timestep: "5m"
                row_count: 100
                seed: 42
              entities:
                count: 3
                id_prefix: "sensor_"
              columns:
                - name: sensor_id
                  data_type: string
                  generator: {type: constant, value: "{entity_id}"}
                - name: timestamp
                  data_type: timestamp
                  generator: {type: timestamp}
                - name: temperature
                  data_type: float
                  generator:
                    type: random_walk
                    start: 22.0
                    min: 16.0
                    max: 30.0
                    volatility: 0.3
                    mean_reversion: 0.15
        write:
          connection: output
          format: parquet
          path: bronze/sensors.parquet
          mode: overwrite

Validate, plan, then run it. Continue only when the planner response has status == "planned":

odibi validate sim.yaml --format json
cat sim.yaml | odibi plan --stdin --format json

Effects before you run: relative to the directory containing sim.yaml, execution overwrites odibi-quickstart-output/bronze/sensors.parquet; creates timestamped odibi-quickstart-output/stories/demo/YYYY-MM-DD/run_HH-MM-SS.{html,json} Stories; and initializes or updates odibi-quickstart-output/_odibi_system/ meta_* catalog assets. A repeat replaces the sensor target, normally creates a later Story pair subject to retention, and updates run/catalog metadata. To clean up, delete only odibi-quickstart-output/ and the sim.yaml created for this example; do not do so if either path was repurposed.

Run:

python -c "from odibi.pipeline import PipelineManager; PipelineManager.from_yaml('sim.yaml').run()"

Output: odibi-quickstart-output/bronze/sensors.parquet contains simulated sensor data with memory, drift, and mean reversion. No database needed.

Option 2: Build a star schema from CSV

Effects before init: odibi init creates my_project/; it replaces an existing directory only when explicitly forced, and this command does not use --force.

odibi init my_project --template star-schema
cd my_project

Effects before you run: execution overwrites data/gold/dim_customer.parquet, dim_product.parquet, dim_date.parquet, and fact_sales.parquet; writes timestamped Stories below data/gold/stories/{build_dimensions|build_facts}/YYYY-MM-DD/run_HH-MM-SS.{html,json}; and initializes or updates data/gold/_system/meta_*. Repeats replace the four data targets, create later Stories, and update catalog metadata. The generated sample_data/ is inside the project. Cleanup is removal of the newly generated my_project/ only; never delete a reused project.

odibi run odibi.yaml
odibi story last          # View the audit report

Option 3: Clone the reference example

Review the canonical reference's exact effects, repeat behavior, and cleanup before execution.

git clone https://github.com/henryodibi11/Odibi.git
cd Odibi/docs/examples/canonical/runnable
odibi run 04_fact_table.yaml

This builds a complete star schema in seconds:

  • 3 dimension tables (customer, product, date)
  • 1 fact table with FK lookups and orphan handling
  • HTML audit report

See the full breakdown →


📖 The Canonical Example

pipelines:
  - pipeline: build_dimensions
    nodes:
      - name: dim_customer
        read:
          connection: source
          format: csv
          path: customers.csv
        pattern:
          type: dimension
          params:
            natural_key: customer_id
            surrogate_key: customer_sk
            scd_type: 1
        write:
          connection: gold
          format: parquet
          path: dim_customer

      - name: dim_date
        pattern:
          type: date_dimension
          params:
            start_date: "2025-01-01"
            end_date: "2025-12-31"
        write:
          connection: gold
          format: parquet
          path: dim_date

  - pipeline: build_facts
    nodes:
      - name: fact_sales
        depends_on: [dim_customer, dim_date]
        read:
          connection: source
          format: csv
          path: orders.csv
        pattern:
          type: fact
          params:
            grain: [order_id, line_item_id]
            dimensions:
              - source_column: customer_id
                dimension_table: dim_customer
                dimension_key: customer_id
                surrogate_key: customer_sk
            orphan_handling: unknown
        write:
          connection: gold
          format: parquet
          path: fact_sales

Full runnable example →


🚀 Key Features

Feature Description
Data Stories Every run generates an HTML audit report
Dimensional Patterns 6 built-in patterns: SCD1/SCD2, date dimension, fact tables, merge, aggregation
56 Transformers Comprehensive library for data manipulation and quality
Validation & Contracts Fail-fast checks, quarantine bad rows
Multi-Engine Pandas, Polars, and Spark — same config across all engines
Production Ready Retry, alerting, secrets, Delta Lake support
Battle-Tested 5500+ tests ensure reliability and correctness

📚 Documentation

Goal Link
Get running in 10 minutes Golden Path
Copy THE working example THE_REFERENCE.md
Solve a specific problem Playbook
Understand when to use what Decision Guide
See all config options YAML Schema

📦 Installation

# Standard (Pandas engine)
pip install odibi

# With Polars engine
pip install "odibi[polars]"

# With Spark + Azure support
pip install "odibi[spark,azure]"

# All engines and features
pip install "odibi[all]"

🎯 Who is this for?

  • Solo data engineers building pipelines without a team
  • Analytics engineers moving from dbt to Python-based pipelines
  • Anyone tired of writing the same boilerplate for every project

🤝 Contributing

We welcome contributions! See CONTRIBUTING.md.


Maintainer: Henry Odibi (@henryodibi11)
License: Apache 2.0

Metadata

Release files for odibi 3.15.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for odibi 3.15.1
File Size Uploaded Provenance Actions
odibi-3.15.1.tar.gz 2.0 MB With provenance Details for odibi-3.15.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for odibi 3.15.1
File Interpreter ABI Platform Actions
odibi-3.15.1-py3-none-any.whl Python 3 none any Details for odibi-3.15.1-py3-none-any.whl

Total release size: 4.2 MB

Release files / odibi-3.15.1.tar.gz

Download URL odibi-3.15.1.tar.gz
Size 2.0 MB
Tags Source
SHA-256 checksum
How to use checksums
47504efe0e10c21131919560c80cbc42877b28f1c8fdf64332bb2af11c592fce
BLAKE2b-256 checksum
How to use checksums
aafc8f2b064c06d730cda0014c5e007f8efd75794a442ffbfc4f9edfd8c97edd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 19, 2026.

Transparency log

Release files / odibi-3.15.1-py3-none-any.whl

Download URL odibi-3.15.1-py3-none-any.whl
Size 2.2 MB
Tags Python 3
SHA-256 checksum
How to use checksums
3648623bd81cd621796d9b5af1e02099b32fa91d4215fcdf569f3cb72bc5fefe
BLAKE2b-256 checksum
How to use checksums
6643b9305c17e321fd0fd5a0039a3257adbd77b7a4e642f82ca61280e949fa6d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 19, 2026.

Transparency log

Security for odibi 3.15.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for odibi-3.15.1.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 19, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

3.15.1 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page