Skip to main content

Oxidizer ALPHA

A distributed DAG execution engine built with Python and Rust (via PyO3 / Maturin). Oxidizer orchestrates multi-tier data pipelines across workers using Redis Streams for messaging, Redis JSON for state, and S3/MinIO for config storage.

Supports both batch DAG runs and live (streaming) topologies. Live nodes use a stateless batch+republish model — each worker processes one batch, re-publishes the task back to the stream, and any worker can claim it next. Redistribution across workers is automatic; scaling requires zero coordination.

Architecture

Component Role
Oxidizer DAG controller — builds execution tiers, dispatches nodes to workers
Reagent Worker — consumes tasks from a stream and runs user-defined processing
Microscope FastMCP control plane — HTTP API, MCP tools, resources, and prompts
Catalyst Redis/Valkey cache client (Rust core) — streams, state, locking
Alloy Pipeline config manager — loads, validates, and stores YAML configs in S3/MinIO
Anvil S3 operations toolkit — static helpers for object storage via Rust engine
Formula DAG engine — constructs runs from cached configs, manages DAG lifecycle
Residue Structured logging — structlog + Rust pyo3_log bridge, optional Redis log sink

All I/O (Redis, S3, stream reads/writes) runs in async Rust via Tokio. Python only handles business logic.

Project Structure

oxidizer/
├── examples/                   # Self-contained pipeline examples
│   ├── Dockerfile              # Shared multi-stage build
│   ├── main.py                 # Controller entrypoint
│   ├── api.py                  # API entrypoint
│   ├── skeleton/               # Minimal starter template (batch)
│   ├── batch_etl/              # E-Commerce ETL pipeline (batch)
│   ├── live_events/            # IoT sensor monitoring (live)
│   └── mixed_pipeline/         # Fintech transactions (mixed)
├── oxidizer/                   # Python package
│   ├── ui.html                 # Dashboard UI (served by Microscope)
│   └── *.py                    # Core modules
├── rust/src/                   # Rust source (PyO3 extension)
├── tests/                      # Pytest + Rust unit tests
├── Cargo.toml
├── pyproject.toml
└── requirements.txt

Each example folder contains its own docker-compose.yml, worker file(s), and YAML config. See examples/README.md for details.

Prerequisites

  • Python 3.10+
  • Rust 1.70+ (for local builds)
  • Docker & Docker Compose (for containerized runs)
  • Redis (with JSON module) and MinIO (or S3-compatible store)

Quickstart — Docker Compose

The fastest way to run the full stack (using the skeleton example):

docker compose -f examples/skeleton/docker-compose.yml up --build -d

Each example starts the following core services:

Service Description
main Oxidizer controller — executes DAG runs
worker (×N) Reagent workers — process nodes from streams
api Microscope — FastMCP server on port 8000 (HTTP + MCP + Dashboard)
redis Redis Stack (with JSON module) on port 6379
minio MinIO object store on ports 9000/9001
minio-init Sidecar — creates the bucket and uploads alloy configs

Some examples add additional workers (e.g. dedicated stream workers). See each example's docker-compose.yml for specifics.

Once running, the dashboard is at http://localhost:8000, the API at http://localhost:8000/health, the MCP endpoint at http://localhost:8000/mcp, and the MinIO console at http://localhost:9001.

To stop:

docker compose -f examples/skeleton/docker-compose.yml down

See examples/README.md for all four examples and their deployment instructions.

Quickstart — Local Development

1. Install

python -m venv .venv && source .venv/bin/activate
pip install maturin
maturin develop          # builds the Rust extension in-place
pip install -r requirements.txt

2. Controller (Oxidizer)

The controller builds a DAG from an alloy config, splits it into execution tiers, and dispatches each node to a worker stream.

from oxidizer import configure_logging
from oxidizer.catalyst import Catalyst, CatalystConnection
from oxidizer.alloy import Alloy, AlloyConnection
from oxidizer.oxidizer import Oxidizer

configure_logging()  # structlog + Rust pyo3_log bridge

catalyst = Catalyst(connection=CatalystConnection(url="localhost"))
alloy = Alloy(connection=AlloyConnection(endpoint="localhost:9000"))

oxidizer = Oxidizer(catalyst=catalyst, alloy=alloy)

# Submit a DAG run by alloy name (non-blocking — queued to the alloy stream)
oxidizer.submit_run("example")

# Start the controller loop (blocks forever, dispatches runs as they arrive)
oxidizer.start()

3. Worker (Reagent)

Workers consume tasks from the oxidizer stream. Define your processing logic with the @reagent.react() decorator:

from oxidizer.catalyst import Catalyst, CatalystConnection
from oxidizer.reagent import Reagent

catalyst = Catalyst(connection=CatalystConnection(url="localhost"))
reagent = Reagent(catalyst=catalyst)

@reagent.react()
def process(data: dict, context: dict):
    node_id = context["node_id"]
    run_id = context["run_id"]
    print(f"Processing {node_id} for run {run_id}")
    # data: dict mapping alias → resolved upstream records
    # context: run_id, node_id, alloy, layer, node_config, connections
    return {"data": data}

The decorated function receives (data, context):

  • data: dict mapping alias → resolved upstream records (tiered retrieval handled by the framework)
  • context: dict with keys run_id, node_id, alloy, layer, node_config, connections

For dedicated streams (e.g. routing specific nodes to specialized workers):

@reagent.react(dedicated_stream="gold_summary_stream")
def process(data: dict, context: dict):
    ...

4. UI / API / MCP (Microscope)

Microscope is a FastMCP server that exposes HTTP endpoints for dashboards and curl, plus MCP tools, resources, and prompts for AI agent integration.

from oxidizer.catalyst import Catalyst, CatalystConnection
from oxidizer.alloy import Alloy, AlloyConnection
from oxidizer.microscope import Microscope

catalyst = Catalyst(connection=CatalystConnection(url="localhost"))
alloy = Alloy(connection=AlloyConnection(endpoint="localhost:9000"))

microscope = Microscope(catalyst=catalyst, alloy=alloy)
microscope.run(host="0.0.0.0", port=8000)

See API Reference for the full list of HTTP endpoints, MCP tools, resources, and prompts.

Live Topologies

Oxidizer supports live (streaming) topologies alongside batch DAG runs. A live topology deploys long-running nodes that continuously process data from Redis Streams using a batch+republish model — each worker processes one batch, re-publishes the task, and any worker can claim it next.

# Deploy a live topology
curl -X POST http://localhost:8000/topology/deploy \
  -H 'Content-Type: application/json' \
  -d '{"alloy_name": "example"}'

# Check status
curl http://localhost:8000/topology/{run_id}/status

# Graceful stop
curl -X POST http://localhost:8000/topology/{run_id}/stop

See Live Topologies for the full architecture, node pause/unpause, rebalancing, and crash recovery details.

Documentation

Detailed documentation lives in the docs/ folder:

Document Description
Architecture Component overview, data flow, node state machines, locking, error handling
API Reference All HTTP endpoints, MCP tools, resources, prompts, metrics schemas
Configuration Alloy YAML reference — layers, nodes, output blocks, scheduling, retention
Live Topologies Batch+republish model, topology entity, deploy/stop/rebalance, pause/unpause
Batching XRANGE cursor loop, per-record fan-out, auto-flatten, batch_size config
Retention Task stream cleanup, producer-owned output, hierarchical data_retention
Plugins Python + Rust plugin system with Maturin/PyO3, entry points
Testing Pytest suite, integration tests, Docker Compose test process, pass/fail criteria
Examples Four self-contained pipeline examples (skeleton, batch_etl, live_events, mixed_pipeline)
PyPI Publishing Publishing to PyPI with GitHub Actions, trusted publisher, versioning strategies

Testing

# Rust unit tests (no external services needed)
cargo test

# Python tests (no external services needed)
python -m pytest tests/ -v

License

TBD

Metadata

Release files for oxidizer 0.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 oxidizer 0.0.2
File Size Uploaded Provenance Actions
oxidizer-0.0.2.tar.gz 550.3 kB With provenance Details for oxidizer-0.0.2.tar.gz

Built distributions (wheels)

Table of built distributions (wheels) for oxidizer 0.0.2
File Actions
oxidizer-0.0.2-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details for oxidizer-0.0.2-cp313-cp313-win_amd64.whl
oxidizer-0.0.2-cp313-cp313-musllinux_1_1_x86_64.whl CPython 3.13 CPython 3.13 Linux musl 1.1+ x86-64 Details for oxidizer-0.0.2-cp313-cp313-musllinux_1_1_x86_64.whl
oxidizer-0.0.2-cp313-cp313-musllinux_1_1_aarch64.whl CPython 3.13 CPython 3.13 Linux musl 1.1+ ARM64 Details for oxidizer-0.0.2-cp313-cp313-musllinux_1_1_aarch64.whl
oxidizer-0.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ x86-64 Details for oxidizer-0.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
oxidizer-0.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ ARM64 Details for oxidizer-0.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
oxidizer-0.0.2-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details for oxidizer-0.0.2-cp313-cp313-macosx_11_0_arm64.whl
oxidizer-0.0.2-cp313-cp313-macosx_10_12_x86_64.whl CPython 3.13 CPython 3.13 macOS 10.12+ x86-64 Details for oxidizer-0.0.2-cp313-cp313-macosx_10_12_x86_64.whl

Total release size: 68.2 MB

Release files / oxidizer-0.0.2.tar.gz

Download URL oxidizer-0.0.2.tar.gz
Size 550.3 kB
Tags Source
SHA-256 checksum
How to use checksums
b74a42af7409e00672fb93fc06326a4836ca63b80362b1b29350bceb399e0bd0
BLAKE2b-256 checksum
How to use checksums
a4e9140e45eca080ae3ff0ef6729c0a8d7174ab88b54c1bbd10f877a7fc5375e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 Mar 17, 2026.

Transparency log

Release files / oxidizer-0.0.2-cp313-cp313-win_amd64.whl

Download URL oxidizer-0.0.2-cp313-cp313-win_amd64.whl
Size 8.3 MB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
b242c0a11bf9bc7813c79a3229e0aeb2fe30ec56989d5481a1a32e7a68d93dcb
BLAKE2b-256 checksum
How to use checksums
ca2bc0a23da5608c074fa9e107b500fb8405a05abcaa4fc93bed55156d128ec2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 Mar 17, 2026.

Transparency log

Release files / oxidizer-0.0.2-cp313-cp313-musllinux_1_1_x86_64.whl

Download URL oxidizer-0.0.2-cp313-cp313-musllinux_1_1_x86_64.whl
Size 10.5 MB
Tags CPython 3.13 Linux musl 1.1+ x86-64
SHA-256 checksum
How to use checksums
33950fda95be72a0dd07afa6d73d113bd59db896fa07d8b7132a8eaf9cb71ce8
BLAKE2b-256 checksum
How to use checksums
2feedd53921e339de6037a1cf2d72a69e20d01bebdaa922a6b998c9977cec6ed
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 Mar 17, 2026.

Transparency log

Release files / oxidizer-0.0.2-cp313-cp313-musllinux_1_1_aarch64.whl

Download URL oxidizer-0.0.2-cp313-cp313-musllinux_1_1_aarch64.whl
Size 10.3 MB
Tags CPython 3.13 Linux musl 1.1+ ARM64
SHA-256 checksum
How to use checksums
9bfca0c3610690fc75d46d28447ae80b4988604328b92228618c8fd042b32d79
BLAKE2b-256 checksum
How to use checksums
c268c27fcf36cf2ead78ee7099d45de96ecbb10f6e18921c58e04495caf3f430
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 Mar 17, 2026.

Transparency log

Release files / oxidizer-0.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL oxidizer-0.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 10.2 MB
Tags CPython 3.13 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
1edb2885d76daa68f5ec93477b89a5506f8a3d75a208af6f6e0aa480d22bcdbb
BLAKE2b-256 checksum
How to use checksums
f3c9bf47d20db9f4817e0379f1f0842b65a51f7196880c5dacf8586b206b8f00
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 Mar 17, 2026.

Transparency log

Release files / oxidizer-0.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL oxidizer-0.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 10.1 MB
Tags CPython 3.13 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
3b67730cdcd852afc3b25d3f9b72950dbb8c802a76d3fbcceaabebe029297b8a
BLAKE2b-256 checksum
How to use checksums
f4f2d28a93213f1051b635379b38271cfa802a94e0ea0ea8ab67ac8466e5d454
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 Mar 17, 2026.

Transparency log

Release files / oxidizer-0.0.2-cp313-cp313-macosx_11_0_arm64.whl

Download URL oxidizer-0.0.2-cp313-cp313-macosx_11_0_arm64.whl
Size 8.7 MB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
04c82855fb1b44121f53805b38dfd64defffd00ce6e7a06963b4cc4bfd3e7277
BLAKE2b-256 checksum
How to use checksums
d8194980bc77404183db8cefd94c83dccf84a1e6a2ebbf5bcad0ca73f322992e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 Mar 17, 2026.

Transparency log

Release files / oxidizer-0.0.2-cp313-cp313-macosx_10_12_x86_64.whl

Download URL oxidizer-0.0.2-cp313-cp313-macosx_10_12_x86_64.whl
Size 9.6 MB
Tags CPython 3.13 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
e07f19c4faa07d226b21d0366f7509d9cbccb028bfcdfd600bed3589d6d03c4f
BLAKE2b-256 checksum
How to use checksums
9a5c7a3b49327970f946d28b7cb8d6a6c2b25ee6804047127409be03c0245dee
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 Mar 17, 2026.

Transparency log

Security for oxidizer 0.0.2

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 8 files in this release have been uploaded with provenance metadata.

Select from 8 files

Attestation for oxidizer-0.0.2.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 Mar 17, 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

0.0.2 This release

8 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