Runnable
Transform any Python function into a portable, trackable pipeline in seconds.
🚀 30-Second Transformation
Your existing function (unchanged!):
def analyze_sales():
total_revenue = 50000
best_product = "widgets"
return total_revenue, best_product
Make it runnable everywhere:
from runnable import PythonJob
def main():
PythonJob(function=analyze_sales).execute()
if __name__ == "__main__":
main()
🎉 Success! Your function now runs the same on laptop, containers, and Kubernetes with automatic tracking and reproducibility.
🔗 Chain Functions Without Glue Code
def load_customer_data():
return {"count": 1500, "segments": ["premium", "standard"]}
def analyze_segments(customer_data): # Name matches = automatic connection
return {"premium_pct": 30, "growth_potential": "high"}
# What Runnable needs (same logic, no glue):
from runnable import Pipeline, PythonTask
def main():
Pipeline(steps=[
PythonTask(function=load_customer_data, returns=["customer_data"]),
PythonTask(function=analyze_segments, returns=["analysis"])
]).execute()
if __name__ == "__main__":
main()
Same pipeline runs unchanged on laptop, containers, and Kubernetes.
⚡ Installation
pip install runnable
For development:
uv sync --all-extras --dev
Run examples:
uv run examples/01-tasks/python_tasks.py
📊 Why Choose Runnable?
- 🎯 Easy to adopt: Your code remains as-is, no decorators or imposed structure
- 🏗️ Bring your infrastructure: Works with your platforms, not a replacement
- 📝 Reproducibility: Automatic tracking without additional code
- 🔁 Retry failures: Debug anywhere, retry from failure points
- 🧪 Testing: Mock/patch pipeline steps, test functions normally
- 💔 Move on: Easy removal - just delete runnable files, your code stays
🎯 Core Strengths & Extensibility
Runnable excels at data pipeline orchestration:
- Data processing pipelines
- ML model training workflows
- ETL operations
- Batch job orchestration
- Scientific computing reproducibility
🧪 Extensible Architecture & Experimental Features:
Runnable's plugin-based architecture demonstrates its extensibility through experimental features like:
- Async streaming capabilities - Proof of concept for real-time processing (local execution)
- Loop workflows - Dynamic iteration patterns for complex data processing
- Custom executors - Extensible to any infrastructure via plugins
For production agentic frameworks, consider specialized tools like Pydantic AI, LangChain, or CrewAI, which are purpose-built for complex LLM applications.
📖 Documentation
🔀 Pipeline Types
Linear Pipelines
Simple sequential execution of Python functions, notebooks, or shell scripts.
Parallel Branches
Execute multiple branches simultaneously for improved performance.
Map Patterns
Execute pipelines over iterable parameters for batch processing.
Arbitrary Nesting
Combine parallel, map, and sequential patterns as needed.
🆚 Why Choose Runnable?
| Runnable | Kedro | Metaflow | Airflow | |
|---|---|---|---|---|
| Zero Code Changes | ✅ Wrap existing functions | ❌ Restructure to nodes | ❌ Convert to FlowSpec | ❌ Rewrite as DAG tasks |
| Environment Portability | Same code: laptop→container→K8s→Argo | Deployment-specific configs | AWS-focused with --with flags | Platform-specific operators |
| Mixed Task Types | Python + Notebooks + Shell | Python nodes only | Python steps only | Requires separate operators |
| Plugin Extensibility | Auto-discovery via entry points | kedro-* packages | Limited extensions | Complex plugin development |
| Parameter Passing | Automatic by name matching | Manual catalog definitions | Flow state management | Manual XCom operations |
🚀 Time to Value
Runnable:
pip install runnable
# Wrap your existing function - done!
Others:
- Learn framework conventions
- Restructure existing code
- Configure project structure
- Set up deployment configs
Ready to get started? Check out our 30-second demo for immediate results!
Metadata
Release files for runnable 0.50.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 | |
|---|---|---|---|---|
| runnable-0.50.0.tar.gz | 131.6 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| runnable-0.50.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 297.9 kB
Release files / runnable-0.50.0.tar.gz
| Download URL | runnable-0.50.0.tar.gz |
|---|---|
| Size | 131.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c93d061f04125d6ab88d7de29aa5ca55c5493809353e77c237fcf77f41e728f1
|
|
BLAKE2b-256 checksum How to use checksums |
45720da6556dd71a543d09f2498fc20b88b22844b5da26391db352739b72015c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","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 / runnable-0.50.0-py3-none-any.whl
| Download URL | runnable-0.50.0-py3-none-any.whl |
|---|---|
| Size | 166.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c7ad1152037c8df4f534b3285668052ab740e66343e740ec82c3e3a788aa7449
|
|
BLAKE2b-256 checksum How to use checksums |
6a323e60f9cc4809bcdb07b452a5fe248ab056430ea25574bd63844dc260b21d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","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 runnable 0.50.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.