Metadata-Version: 2.5
Name: odctl
Version: 1.0.1
Summary: Orchestrator for the Open Data Stack
Project-URL: Homepage, https://github.com/jaehyeon-kim/odctl
Project-URL: Repository, https://github.com/jaehyeon-kim/odctl
Project-URL: Documentation, https://jaehyeon.me/odctl/
Project-URL: Issues, https://github.com/jaehyeon-kim/odctl/issues
Author-email: Jaehyeon Kim <dottami@gmail.com>
License-File: LICENSE
Keywords: cli,data-engineering,docker,docker-compose,machine-learning,open-data,orchestrator
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Information Technology
Classifier: Intended Audience :: Science/Research
Classifier: Intended Audience :: System Administrators
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Topic :: Database
Classifier: Topic :: Scientific/Engineering :: Information Analysis
Classifier: Topic :: System :: Distributed Computing
Classifier: Topic :: System :: Systems Administration
Requires-Python: >=3.10
Requires-Dist: pydantic>=2.0.0
Requires-Dist: python-on-whales>=0.70.0
Requires-Dist: pyyaml>=6.0.1
Requires-Dist: rich>=13.7.0
Requires-Dist: typer>=0.12.0
Description-Content-Type: text/markdown

# Open Data Stack

![CI Status](https://img.shields.io/github/actions/workflow/status/jaehyeon-kim/odctl/pipeline.yml?branch=main&label=CI)
![PyPI Version](https://img.shields.io/pypi/v/odctl)
![Python Versions](https://img.shields.io/pypi/pyversions/odctl)
![License](https://img.shields.io/github/license/jaehyeon-kim/odctl)

![Architecture Diagram](https://raw.githubusercontent.com/jaehyeon-kim/odctl/refs/heads/main/image/diagram.png)

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](https://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:

```bash
uv tool install odctl
# or
pipx install odctl
```

## Quick Start

```bash
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](https://jaehyeon.me/odctl/latest/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.

## Related reading

Blog posts about odctl and the projects built on it are tagged [odctl](https://jaehyeon.me/tags/odctl/) on jaehyeon.me.

Projects that use odctl:

- [benchtop](https://github.com/jaehyeon-kim/benchtop): hands-on data engineering and machine learning demos that run locally, each on the odctl stack.
- [dynamic-des](https://github.com/jaehyeon-kim/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](https://github.com/jaehyeon-kim/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](https://docs.astral.sh/uv/).
2. Install the dependencies and the project in development mode:
   ```bash
   uv sync
   ```
3. Install the pre-commit hooks, which run the formatting and type checks:
   ```bash
   uvx pre-commit install
   ```
4. Run the tests:
   ```bash
   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/`:
   ```bash
   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](LICENSE) file for details.
