Hermes is a Python framework for building task-based workflow pipelines, with a focus on CFD (Computational Fluid Dynamics) and structural simulation applications.
Workflows are described in JSON format and executed via engines like Luigi or Airflow. The framework also provides a FreeCAD-based GUI for visual workflow configuration.
Documentation: https://hermesflow.github.io/Hermes/
- JSON-based workflows — define pipelines as JSON, enabling version control, comparison, and querying
- Node system — 40+ built-in node types for general operations and OpenFOAM simulations
- Template engine — Jinja2-based file generation for OpenFOAM configuration files
- FreeCAD integration — GUI workbench for visual workflow and boundary condition setup
- Extensible architecture — create custom nodes and execution engine backends
git clone https://github.com/HermesFlow/Hermes.git
cd Hermes
pip install -e .Run a workflow:
hermes-workflow buildExecute examples/general/copyDir/copyDir.jsonHermes/
├── hermes/ # Main Python package
│ ├── bin/ # CLI (hermes-workflow)
│ ├── workflow/ # Core workflow engine
│ ├── taskwrapper/ # Task wrapper abstraction
│ ├── engines/ # Execution engines (Luigi)
│ ├── Resources/ # Node types & templates
│ │ ├── general/ # General-purpose nodes
│ │ ├── openFOAM/ # OpenFOAM simulation nodes
│ │ ├── BC/ # Boundary condition nodes
│ │ └── workbench/ # FreeCAD workbench nodes
│ └── utils/ # Utilities
├── examples/ # Workflow examples
├── freecad_source_hermes/ # FreeCAD integration source
├── docs/ # Documentation source (MkDocs)
└── doc/ # Legacy Sphinx documentation
pip install -e .chmod +x install.sh
./install.sh -o /path/to/destinationSee the Installation Guide for full details and options.
# Build and execute a workflow
hermes-workflow buildExecute workflow.json
# Expand a workflow with default values
hermes-workflow expand workflow.json myCase
# Build Luigi Python file
hermes-workflow build workflow.json myCase
# Execute a built workflow
hermes-workflow execute myCase{
"workflow": {
"root": null,
"nodeList": ["CopyDirectory", "RunPythonCode"],
"nodes": {
"CopyDirectory": {
"Execution": {
"input_parameters": {
"Source": "source",
"Target": "target",
"dirs_exist_ok": true
}
},
"type": "general.CopyDirectory"
},
"RunPythonCode": {
"Execution": {
"input_parameters": {
"ModulePath": "my_module",
"ClassName": "MyClass",
"MethodName": "process",
"Parameters": {
"source": "{CopyDirectory.output.Source}",
"target": "{CopyDirectory.output.Target}"
}
}
},
"type": "general.RunPythonCode"
}
}
}
}Full documentation is available at https://hermesflow.github.io/Hermes/, including:
- User Guide — installation, concepts, tutorials, node reference
- Developer Guide — architecture, JSON schema, creating custom nodes, API reference
To serve docs locally:
./serve_docs.shSee LICENSE for details.