FlowerPower 🌸 — Build & Orchestrate Data Pipelines
A simple, configuration-driven workflow framework built on Hamilton
FlowerPower is a Python framework for building, configuring, and running data processing pipelines. You write your logic as plain Python functions using Hamilton; FlowerPower takes care of the project structure, layered configuration, execution, the CLI, a web UI, and pluggable I/O.
Hamilton = the DAG, FlowerPower = everything around it. You describe nodes as functions; FlowerPower wires up config, runs, retries, visualization, and orchestration.
✨ Features
- Modular pipelines — Define transforms as Python functions; Hamilton assembles them into a directed acyclic graph (DAG) from their signatures.
- Configuration-driven — Separate logic from settings with layered YAML, env
overlays (
FP_PIPELINE__*),${VAR}interpolation, and runtime kwargs. - Unified interfaces — Drive everything from the Python API
(
FlowerPowerProject), the CLI (flowerpower), or the web UI (Hamilton UI). - Executors — Run locally, in a thread pool, or distributed with Ray.
- Adapters — Track lineage with the Hamilton Tracker, experiments with MLflow.
- Extensible I/O — CSV, JSON, Parquet, DeltaTable, DuckDB, PostgreSQL, MySQL,
MSSQL, Oracle, SQLite, MQTT via the
flowerpower-ioplugin. - Filesystem abstraction — Local, S3, GCS, and more, through fsspeckit.
📦 Installation
FlowerPower requires Python 3.11+. We recommend uv:
uv venv && source .venv/bin/activate
uv pip install flowerpower
Optional extras:
uv pip install 'flowerpower[io]' # I/O plugins
uv pip install 'flowerpower[ui]' # Hamilton UI
uv pip install 'flowerpower[ray]' # distributed execution
uv pip install 'flowerpower[io,ui,ray]' # combine the extras you need
🚀 Quick start
Create a project, a pipeline, and run it:
flowerpower init --name hello-flowerpower
cd hello-flowerpower
flowerpower pipeline new hello
flowerpower pipeline run hello
Or in Python:
from flowerpower import FlowerPowerProject
# 1. create the project
FlowerPowerProject.new(name="hello-flowerpower")
# 2. load it and create a pipeline
project = FlowerPowerProject.load("hello-flowerpower")
project.pipeline_manager.creator.create_pipeline(name="hello")
# 3. (edit pipelines/hello.py + conf/pipelines/hello.yml, then run)
result = project.run("hello")
print(result)
A pipeline module
Write your DAG as functions in pipelines/hello.py. Parameters come from YAML
and are wired in with Hamilton's @parameterize:
from pathlib import Path
from hamilton.function_modifiers import parameterize
from flowerpower.cfg import Config
PARAMS = Config.load(
Path(__file__).parents[1], pipeline_name="hello"
).pipeline.h_params
@parameterize(**PARAMS["greeting_message"]) # PARAMS is a dict — use ["..."]
def greeting_message(message: str) -> str:
return f"{message},"
@parameterize(**PARAMS["target_name"])
def target_name(name: str) -> str:
return f"{name}!"
def full_greeting(greeting_message: str, target_name: str) -> str:
return f"{greeting_message} {target_name}"
# conf/pipelines/hello.yml
params:
greeting_message:
message: "Hello"
target_name:
name: "World"
run:
final_vars: [full_greeting]
project.run("hello") → {'full_greeting': 'Hello, World!'}.
📖 The full, step-by-step walkthrough is in the Tutorial.
⚙️ Running pipelines
FlowerPowerProject.run() (and PipelineManager.run()) accept a RunConfig and/or
keyword overrides — kwargs always win:
from flowerpower.cfg.pipeline.run import RunConfig
# simple
result = project.run("hello")
# with a RunConfig
result = project.run("hello", run_config=RunConfig(log_level="DEBUG"))
# with kwargs overrides
result = project.run(
"hello",
inputs={"greeting_message": {"message": "Hi"}},
final_vars=["full_greeting"],
)
Async runs use Hamilton's async driver via PipelineManager.run_async():
from flowerpower.pipeline import PipelineManager
pm = PipelineManager(base_dir="hello-flowerpower")
result = await pm.run_async("hello")
See the docs for RunConfig & builders, additional modules, and adapters.
🖥️ Web UI
Launch the Hamilton UI to visualize and inspect pipeline runs:
flowerpower ui
📖 Documentation
Full documentation — installation, tutorial, how-to guides, concepts, CLI, and API reference — lives at https://legout.github.io/flowerpower/.
🤝 Contributing
Contributions are welcome. See the contributing guide and open issues or PRs against legout/flowerpower.
📜 License
MIT — see LICENSE.
Metadata
Release files for FlowerPower 0.37.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| flowerpower-0.37.0.tar.gz | 91.0 kB | Without provenance | Details for flowerpower-0.37.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| flowerpower-0.37.0-py3-none-any.whl | Python 3 | none | any | Details for flowerpower-0.37.0-py3-none-any.whl |
Total release size: 199.6 kB
Release files / flowerpower-0.37.0.tar.gz
| Download URL | flowerpower-0.37.0.tar.gz |
|---|---|
| Size | 91.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
37d0f121c703d891cbe0b6a6222540b8417e94d9c59d7299ed6a97d5eb0c3dfa
|
|
BLAKE2b-256 checksum How to use checksums |
913f790f0b44d26be78422889c4a909d5c0a81d6aca3fddc996ee07164cfca5d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / flowerpower-0.37.0-py3-none-any.whl
| Download URL | flowerpower-0.37.0-py3-none-any.whl |
|---|---|
| Size | 108.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
2ccf5b57730d3cc5d8c2a4290c8a528406df8823c55c05d4c482bdbe2108746f
|
|
BLAKE2b-256 checksum How to use checksums |
ea6e6294ffbfd88fc0644d7d74865eea7cf474b478b6ba80adb2677c4caa5842
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for FlowerPower 0.37.0
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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
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.