
How I Rebuilt zenml.io in a Week with Claude Code
I rebuilt zenml.io — 2,224 pages, 20 CMS collections — from Webflow to Astro in a week using Claude Code and a multi-model AI workflow. Here's how.
In this guide, we compare ZenML with Kedro to highlight which framework best fits your needs for scalability, ease of use, and robust feature sets. Discover the key differences that will streamline your ML operations and propel your projects forward.
“ZenML allows orchestrating ML pipelines independent of any infrastructure or tooling choices. ML teams can free their minds of tooling FOMO from the fast-moving MLOps space, with the simple and extensible ZenML interface. No more vendor lock-in, or massive switching costs!”
Richard Socher
Former Chief Scientist Salesforce and Founder of You.com
Feature-by-feature comparison
| Integration Flexibility | Custom integrations for diverse workflows | Limited to specific platforms |
| Workflow Automation | Advanced automation capabilities | Basic automation features |
| Experiment Tracking | Detailed experiment tracking | Limited tracking capabilities |
| Collaboration Tools | Enhanced collaboration features | Basic collaboration support |
| Pipeline Visualization | Rich pipeline visualization tools | Basic or limited visualization |
| Monitoring and Logging | Extensive monitoring and logging | Basic monitoring and logging |
| Cost Efficiency | More cost-effective solutions | Potentially higher operational costs |
| User Interface | User-friendly and intuitive interface | Varies, often less user-friendly |
| Community and Support | Strong community support and resources | Limited community resources |
| Continuous Integration/Deployment (CI/CD) | Robust CI/CD integration | Often lacks full CI/CD integration |
| Security Features | Advanced security protocols | Basic security features |
Code comparison
# ZenML pipeline syntax
from zenml import pipeline, step
@step
def data_preprocessing(data):
... # preprocessing logic
@step
def model_training(preprocessed_data):
... # model training logic
@pipeline
def ml_pipeline(data):
preprocessed_data = data_preprocessing(data)
trained_model = model_training(preprocessed_data)
return trained_model # Kedro pipeline syntax
from kedro.pipeline import Pipeline, node
def data_preprocessing(data):
... # preprocessing logic
def model_training(preprocessed_data):
... # model training logic
def create_pipeline(**kwargs):
return Pipeline(
[
node(
func=data_preprocessing,
inputs="raw_data",
outputs="preprocessed_data",
name="preprocess_data",
),
node(
func=model_training,
inputs="preprocessed_data",
outputs="trained_model",
name="train_model",
),
]
)
ZenML ensures a faster setup, outpacing orchestrators for quick, efficient ML workflows.
Expand Your Knowledge

I rebuilt zenml.io — 2,224 pages, 20 CMS collections — from Webflow to Astro in a week using Claude Code and a multi-model AI workflow. Here's how.


Agentic RAG without guardrails spirals out of control. Here's how ZenML's dynamic pipelines give you fan-out, budget limits, and lineage without limiting the LLMs.