Skip to main content

🌊 hexaflow

Lightweight, embeddable Python workflow engine with stages, steps, splits, joins, and checkpointed resumption.

Open in GitHub Codespaces CI Coverage PyPI: hexaflow Python 3.13+ License: Apache 2.0

Powers Hexastack Powers Hexaqueue Powers Hexaqual Governed by Hexaqual Code style: ruff Type checker: ty

OpenSSF Scorecard OpenSSF Best Practices OpenSSF Best Practices: Progress

🌊 Foundational DAG engine powering Hexastack, Hexaqueue, and Hexaqual · 🛡️ Governed by Hexaqual


🎯 Vision & Architectural Intent

hexaflow is a zero-daemon, localhost-first workflow engine for Python developers who need resilient, multi-stage, multi-step execution graphs without the operational overhead of running heavy external schedulers (Airflow, Temporal, Prefect).

Key Features

  • Hierarchical Execution: Workflows structured cleanly into Stages and Steps.
  • DAG Splits & Joins: Concurrently fan-out (split) and synchronize at barrier dependencies (join).
  • Pluggable Graph Analysis & Multi-Format Renderers: Structural reachability (ancestors, descendants, blast_radius), critical path latency bottleneck calculation, and export to Mermaid, Graphviz DOT, ASCII, JSON, SVG, and PNG.
  • Dry-Run Simulation Mode: Simulate workflows safely with synthetic mocks (dry_run=...), side-effect fail-closed guards (side_effects=True, allow_unsafe), and chaos fault injection without mutating databases or external APIs.
  • Workflow Memento & Time-Travel Rewind: Capture immutable state mementos (to_memento(), restore_from_memento()), rewind execution to before any historical step (rewind_to()), and replay downstream dependencies seamlessly.
  • Fault Partitioning: Transient retries with exponential backoff vs. permanent failure suspension (SUSPENDED).
  • Step Middleware Pipeline: Onion-layered execution interceptors (StepMiddlewarePort, InOutStepMiddleware) supporting structured logging (LoggingStepMiddleware), high-precision latency metrics (TimingStepMiddleware), and whole-system simulation mock fallbacks (MockFallbackMiddleware).
  • Checkpointed Resumption: Automatically saves step inputs and outputs into an embedded SQLite store. Resume failed workflows from the point of failure without re-running completed steps.
  • Dual DSL: Decorator-based syntax for Pythonic simplicity (@wf.stage, @wf.step) alongside declarative classes for programmatic pipelines.

📦 Installation

pip install hexaflow

Or using uv:

uv add hexaflow

⚡ Quickstart

from hexaflow import RetryPolicy, StageExecutionMode, Workflow

wf = Workflow(name="order_pipeline", version="1.0.0")


# Stage 1: Validation
@wf.stage("validation")
@wf.step("validate_cart", retries=RetryPolicy(max_attempts=3))
def validate_cart(ctx) -> dict:
    return {"order_id": "ord_101", "total_usd": 150.00}


# Stage 2: Parallel Processing (Split / Fan-Out)
@wf.stage("processing", execution_mode=StageExecutionMode.CONCURRENT_ALL)
@wf.step("authorize_payment", depends_on=["validate_cart"])
def authorize_payment(ctx) -> dict:
    cart = ctx.inputs["validate_cart"]
    return {"status": "PAID", "amount": cart["total_usd"]}


@wf.stage("processing")
@wf.step("reserve_inventory", depends_on=["validate_cart"])
def reserve_inventory(ctx) -> dict:
    return {"warehouse": "US-EAST-1", "reserved": True}


# Stage 3: Fulfillment (Join Barrier)
@wf.stage("fulfillment")
@wf.step("create_shipping_label", depends_on=["authorize_payment", "reserve_inventory"])
def create_shipping_label(ctx) -> dict:
    return {"tracking_id": "TRK-9812739"}


if __name__ == "__main__":
    state = wf.run()
    print(f"Workflow {state.run_id} completed with status: {state.status.value}")

🖥️ Command Line Interface (CLI)

hexaflow includes a fast, zero-daemon CLI (hexaflow or hf):

# Run a workflow directly
hf run examples/order_pipeline.py:wf

# Check run status & step timing
hf status <run_id>

# Inspect step inputs, outputs, or error tracebacks
hf inspect <run_id> create_shipping_label

# Visualize workflow DAG (Mermaid, DOT, ASCII, JSON)
hf graph render examples/order_pipeline.py:wf --format mermaid

# Render a GitHub Actions workflow DAG directly
hf graph render .github/workflows/ci.yml --format mermaid

# Simulate dynamic workflows in-memory and render materialized DAG
hf graph render pipelines/ci.py:make_pipeline --dry-run --params '{"affected": ["core"]}'

# Display topological metrics, critical path, and estimated latency
hf graph info examples/order_pipeline.py:wf

# Resume a suspended workflow from its latest checkpoint
hf resume <run_id> examples/order_pipeline.py:wf

# Clear checkpoints and restart a workflow from scratch
hf restart <run_id> examples/order_pipeline.py:wf

# Abort a workflow and execute compensating rollback actions
hf abort <run_id> examples/order_pipeline.py:wf

📖 Full Command Catalog: See USAGE.md for the complete CLI subcommand options, arguments, and formatting flags.


🏛️ Ecosystem Alignment

hexaflow is part of the Hexa architectural ecosystem:

  • hexaflow (this repository): Lightweight, zero-daemon, localhost-first DAG workflow engine.
  • hexastack: Monorepo framework providing CQRS, Event Sourcing, FastAPI, and out-of-the-box DevTools.
  • hexaqueue: Flagship distributed batch & HPC cluster scheduler.

📄 License

Apache 2.0. See LICENSE for details.

Metadata

Release files for hexaflow 0.5.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 hexaflow 0.5.0
File Size Uploaded
hexaflow-0.5.0.tar.gz 193.1 kB Details

Built distribution (wheel)

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

Total release size: 273.6 kB

Release files / hexaflow-0.5.0.tar.gz

Download URL hexaflow-0.5.0.tar.gz
Size 193.1 kB
Tags Source
SHA-256 checksum
How to use checksums
a56204037240a92375115110c94b69a8f244e912632b8b1e25cbabfe4a4a2a6c
BLAKE2b-256 checksum
How to use checksums
237587a1553ec99d476ea9049e9bc7778302780a81b76d97fbcf4a3bbbd0c376
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / hexaflow-0.5.0-py3-none-any.whl

Download URL hexaflow-0.5.0-py3-none-any.whl
Size 80.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
bf4da426c015d5a84c1b2628d187377918b765de5d7f6fe61f65620400e19271
BLAKE2b-256 checksum
How to use checksums
58d2f91b457d4b39caab66ce292aad80c3fecd22d9d7f8bdaafeba3d3044e4c9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release history Release notifications | RSS feed

This release

0.5.0 This release

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.0

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