Skip to main content

Open Data Stack

CI Status PyPI Version Python Versions License

Architecture Diagram

A curated collection of open-source technologies and an accompanying CLI (odctl) for experimenting with modern data architecture and MLOps locally.

Provisioning a local data environment with distributed systems can be highly complex. The Open Data Stack streamlines this process by resolving dependency conflicts, network routing configurations, and integration challenges across tools like Kafka, Spark, Flink, Iceberg, and Airflow. It provides a cohesive, Docker-based blueprint that operates seamlessly out of the box.

Documentation: jaehyeon.me/odctl. It covers every profile with its ports, images and memory limits, the CLI reference, guides and troubleshooting.

Installation

odctl needs Docker running, with 8 to 16 GB of memory, and Python 3.10 or later. Install it into its own environment:

uv tool install odctl
# or
pipx install odctl

odctl follows semantic versioning from 1.0, so a project can pin odctl>=1.0,<2.

Quick Start

odctl init                    # copy the compose files and settings into ./.odctl
odctl list                    # show the profiles
odctl up kafka-lite flink-lite spark-lite
odctl down --all

odctl up starts the profiles each one depends on first, here PostgreSQL, SeaweedFS (S3) and the Iceberg REST catalog. See Getting started for more.

Installing odctl, previewing what flink-lite starts, starting kafka-lite, listing the containers and stopping them

Why not plain Docker Compose?

odctl runs Docker Compose underneath, and a Compose file of your own is enough for one small project. odctl helps when you have several projects: the compose files live in one tested place instead of drifting apart in copies, the services are already connected to each other, and commands such as odctl ps and odctl explain show what is running and on which ports. Why not plain Docker Compose? explains it in more detail.

Blog posts about odctl and the projects built on it are tagged odctl on jaehyeon.me.

Projects that use odctl:

  • benchtop: hands-on data engineering and machine learning demos that run locally, each on the odctl stack.
  • desflow (docs): a SimPy library for simulations that stream to Kafka, PostgreSQL, Redis and Iceberg; its examples and integration tests run their infrastructure with odctl.
  • agentic-analytics-system: conversational analytics over an Iceberg lakehouse, with Trino, Iceberg and object storage started by odctl.

Development

Pull requests are welcome. To work on the CLI:

  1. Clone the repository and install uv.
  2. Install the dependencies and the project in development mode:
    uv sync
    
  3. Install the pre-commit hooks, which run the formatting and type checks:
    uvx pre-commit install
    
  4. Run the tests:
    uv run pytest tests/
    
  5. Build the documentation site, then serve it while you edit. It is served at http://127.0.0.1:8000/odctl/:
    uv run mkdocs build --strict
    uv run mkdocs serve
    

The profile pages and the CLI reference are generated by scripts/gen_pages.py during the build, so edit registry.yml, the compose files or the commands rather than those pages.

License

This project is licensed under the Apache License 2.0. See the LICENSE file for details.

Metadata

Release files for odctl 1.1.0

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

Source distribution (sdist)

Source distribution for odctl 1.1.0
File Size Uploaded
odctl-1.1.0.tar.gz 889.4 kB Details

Built distribution (wheel)

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

Total release size: 1.1 MB

Release files / odctl-1.1.0.tar.gz

Download URL odctl-1.1.0.tar.gz
Size 889.4 kB
Tags Source
SHA-256 checksum
How to use checksums
d92880fd1300644ea68e4d37f090e184bbd315517dbdcb8e6fd1cc30c02a6c0d
BLAKE2b-256 checksum
How to use checksums
9023e8bfdd8ce5d057111f0a9e6d021b31c7805024d9f400a3b1539d26c4d118
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 16, 2026.

Transparency log

Release files / odctl-1.1.0-py3-none-any.whl

Download URL odctl-1.1.0-py3-none-any.whl
Size 170.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
74e364d1dfcde1afd6a2b5e8f7a5b5cfc5623c90556885dea1c1d1cc948c2ea8
BLAKE2b-256 checksum
How to use checksums
eacfa5dba3b9ed1aa8b2df66853b40494d6a787caa2c25abdb74a7c42e53d160
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 16, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.1.0 This release

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

0.9.0

2 release files

0.8.0

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.7

2 release files

0.4.6

2 release files

0.4.5

2 release files

0.4.4

2 release files

0.4.3

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.1

2 release files

0.1.0

2 release files

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