
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.
Discover how ZenML and MLflow approach machine learning lifecycle management differently. While MLflow focuses on experiment tracking, model deployment, and maintaining a centralized model registry, ZenML offers a comprehensive end-to-end MLOps framework. ZenML empowers you to effortlessly orchestrate entire ML pipelines, integrate with various tools including MLflow, and provides flexibility across different environments. Experience enhanced workflow management, reproducibility, and efficiency as you navigate the ML lifecycle with ZenML's unified approach, going beyond just experiment tracking to cover the full spectrum of MLOps needs.
“ZenML allows you to quickly and responsibly go from POC to production ML systems while enabling reproducibility, flexibility, and above all, sanity”
Goku Mohandas
Founder of MadeWithML
Feature-by-feature comparison
| Experiment Tracking | Integrates with MLflow for detailed experiment tracking | Full experiment tracking capabilities |
| Model Registry | Utilizes MLflow's model registry for model versioning and management as part of full lifecycle | Offers a centralized model registry for model versioning and management |
| Model Deployment | Simplifies model deployment with MLflow integration | Supports model deployment to various platforms |
| Pipeline Orchestration | Provides a flexible and extensible pipeline orchestration framework | Limited built-in pipeline orchestration capabilities |
| Data Versioning | Comprehensive data versioning and management | No built-in data versioning functionality |
| Workflow Management | End-to-end workflow management for the entire ML lifecycle | Focuses primarily on experiment tracking, model registry, and deployment |
| Tool Integration | Seamlessly integrates with a wide range of MLOps tools, including MLflow | Integrates with various ML frameworks and libraries |
| Collaboration | Facilitates collaboration among team members throughout the ML lifecycle | Enables collaboration through experiment tracking and model sharing |
| Customizability | Highly customizable and extensible to fit specific project requirements | Customizable to some extent, but may require additional development effort |
| UI/UX | Provides an intuitive and user-friendly interface for managing ML workflows | Offers a web-based UI for experiment tracking and model management |
| Community and Support | Growing community with active support and resources | Large and active community with extensive resources and support |
| Scalability | Designed to scale with the growth of your ML projects and team | Scalable experiment tracking and model registry capabilities |
| MLOps Coverage | Covers the entire MLOps lifecycle, from data preparation to model monitoring | Focuses primarily on experiment tracking, model registry, and deployment |
| Integration Flexibility | Allows integration with various orchestrators, data stores, and deployment targets | Integrates with some popular ML frameworks and libraries |
| Learning Curve | Easy to set up and get started, but supports the full complexity and features offered by MLflow | Relatively easy to get started with, especially for experiment tracking |
Code comparison
# zenml integration install mlflow
# zenml experiment-tracker register mlflow_tracker -f mlflow ...
from zenml import pipeline, step
from zenml.integrations.mlflow.experiment_trackers import MLFlowExperimentTracker
from zenml.client import Client
@step(experiment_tracker="mlflow_tracker")
def train_model(X_train, y_train, X_test, y_test):
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
model = RandomForestClassifier()
model.fit(X_train, y_train)
# ZenML automatically logs parameters and the model
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
# Only need to log custom metrics
return model, {"accuracy": accuracy}
@pipeline
def ml_pipeline():
X, y = load_data()
X_train, X_test, y_train, y_test = preprocess_data(X, y)
model, metrics = train_model(X_train, y_train, X_test, y_test)
ml_pipeline() # MLflow manual usage
import mlflow
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
mlflow.set_tracking_uri("http://localhost:5000")
mlflow.set_experiment("my_experiment")
with mlflow.start_run():
# Load and preprocess data
X, y = load_data()
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
# Train model
model = RandomForestClassifier()
model.fit(X_train, y_train)
# Log parameters
mlflow.log_param("n_estimators", model.n_estimators)
mlflow.log_param("max_depth", model.max_depth)
# Log metrics
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
mlflow.log_metric("accuracy", accuracy)
# Log model
mlflow.sklearn.log_model(model, "random_forest_model")
# Retrieve and print the run ID
current_run = mlflow.active_run()
print(f"MLflow Run ID: {current_run.info.run_id}")
ZenML provides an end-to-end MLOps solution, covering the entire lifecycle from data versioning to model monitoring, while MLflow focuses primarily on experiment tracking, model registry, and deployment.
ZenML seamlessly integrates with MLflow and other best-of-breed tools, allowing you to create a customized MLOps stack that fits your specific requirements. MLflow, as a standalone tool, may require more effort to integrate with other components in your ML ecosystem.
ZenML enables efficient collaboration among team members throughout the ML lifecycle, providing intuitive interfaces and workflow management features. While MLflow facilitates collaboration through experiment tracking and model sharing, it lacks the comprehensive workflow management capabilities offered by ZenML.
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.