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.
  • dynamic-des: 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.0.2

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.0.2
File Size Uploaded
odctl-1.0.2.tar.gz 869.3 kB Details

Built distribution (wheel)

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

Total release size: 1.0 MB

Release files / odctl-1.0.2.tar.gz

Download URL odctl-1.0.2.tar.gz
Size 869.3 kB
Tags Source
SHA-256 checksum
How to use checksums
d00efe3dc77e544b31cf0882b84bed0f0d9e677c778848d23e9f6e0bbc6e655c
BLAKE2b-256 checksum
How to use checksums
82b4ab1f02377e73f1c68c5e1879e4ad4bbc266414196a380f3cf0b64b733344
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 9, 2026.

Transparency log

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

Download URL odctl-1.0.2-py3-none-any.whl
Size 170.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a577e208bfc63d5947a7ad55963e9e5d8aa2248e5eb5f3c36576407c36c0a783
BLAKE2b-256 checksum
How to use checksums
130c3fc72580118ccea4ff6848aafc5bb79db1cefd0a995f3c69a22dce001bb3
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 9, 2026.

Transparency log

Release history Release notifications | RSS feed

1.1.0

2 release files

This release

1.0.2 This release

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