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

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.

Compatibility

From 1.0.0, odctl follows semantic versioning. Within 1.x, command names, option names and profile names do not change or disappear, and a profile keeps the ports it publishes on the host. Minor releases add profiles, services and options, and move bundled images to newer versions. Anything that breaks a working odctl up command waits for 2.0.

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.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.0.0
File Size Uploaded
odctl-1.0.0.tar.gz 512.4 kB Details

Built distribution (wheel)

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

Total release size: 682.1 kB

Release files / odctl-1.0.0.tar.gz

Download URL odctl-1.0.0.tar.gz
Size 512.4 kB
Tags Source
SHA-256 checksum
How to use checksums
371b15e362564e32f1e8e806a9939f8e1631ea126d4b975158703a0f4754aefc
BLAKE2b-256 checksum
How to use checksums
90cec22063db61af7cb97ee21b307f2a29ee540593c0ef7bea5c5f60a40a1da0
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 8, 2026.

Transparency log

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

Download URL odctl-1.0.0-py3-none-any.whl
Size 169.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e47fe92fadabd1f1f5867bcdc11cd20932cf8e042bdfa1f3033c11b1b06552e9
BLAKE2b-256 checksum
How to use checksums
f1c07510732af4f5721985b79d8849cd4245523e82c19d8b7b4d68771da52d6c
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 8, 2026.

Transparency log

Release history Release notifications | RSS feed

1.1.0

2 release files

1.0.2

2 release files

1.0.1

2 release files

This release

1.0.0 This release

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