Server & SDK
Changelog for ZenML OSS and ZenML UI.
Stay up to date with the latest features, improvements, and fixes in ZenML OSS.
0.96.4 (2026-09-04)
See what's new and improved in version 0.96.4.

Webhook-driven automation
Webhook triggers for pipeline snapshots: ZenML now supports first-class webhook-driven automation for secure, project-scoped integrations with GitHub or custom systems PR #5169. You can attach webhook triggers to pipeline snapshots and launch them when matching external events arrive, including typed GitHub filters for merged pull requests, completed workflow runs, pushes, and published releases.
ClickUp webhook provider: ZenML now includes a built-in ClickUp webhook provider for triggering automation from ClickUp task and list events PR #5216. The provider authenticates deliveries with ClickUp’s raw hex HMAC signature and supports string-based filters, so teams can connect ClickUp activity directly to ZenML workflows.
Slack webhook provider: ZenML Pro now supports inbound Slack Events API callbacks as a first-class webhook provider PR #5221. Slack apps can authenticate events such as mentions, messages, reactions, and other automation-focused activity to trigger pipeline snapshots or related workflows; this is separate from the existing Slack alerter that sends notifications to Slack.
AWS RDS IAM authentication for MySQL stores: The MySQL ZenML store now supports AWS RDS IAM database authentication while preserving the existing password-based behavior PR #5113. ZenML generates fresh IAM tokens for database connections and enforces TLS hostname and certificate verification in IAM mode, giving AWS users a passwordless database authentication option aligned with RDS security best practices.
Faster pipeline startup with reused build checksums: ZenML now precalculates and reuses Docker build checksums while resolving pipeline builds PR #5154. This avoids repeated build-configuration work during startup, especially for large pipelines with many steps, and also helps when
skip_build=Truebecause ZenML no longer repeats unnecessary build preparation checks.Safer workload-scoped tokens: Workload-scoped API tokens can no longer be exchanged for persistent, unscoped API tokens PR #5152. This keeps credentials bound to the pipeline run, schedule, or deployment that created them, so workload permissions expire with the workload authorization instead of being escalated into longer-lived generic API access.
Production/stable package metadata: Future ZenML releases are now marked as
Development Status :: 5 - Production/Stableon PyPI instead of beta PR #5186. This aligns the published package metadata with ZenML’s current maturity and makes the package classification clearer for users and automated tooling.
0.96.3 (2026-08-07)
See what's new and improved in version 0.96.3.

Runtime and orchestration
Multi-pod Kubernetes step operator jobs: Command steps can now run across multiple Kubernetes pods with the Kubernetes step operator. Set
pod_countinKubernetesStepOperatorSettingsto launch the step as an indexed job, making it easier to distribute command-style workloads across pods. PR #5104Local Docker sandbox: ZenML now includes a local Docker sandbox, plus a unified settings model for containerized sandboxes. Local sandbox workflows also support file upload and download, making it easier to test containerized ZenML behavior locally before moving to remote infrastructure. PR #5102
Deployment, security, and artifact integrity
Enrollment keys from Kubernetes Secrets: The Helm chart now supports
server.pro.enrollmentKeySecretRef, so ZenML Pro enrollment keys can be injected from an existing Kubernetes Secret instead of being stored inline in Helm release values. The secret reference is applied consistently to the server, migration, and worker containers. PR #5123Cloudpickle artifact hash validation: Cloudpickle-materialized artifacts now store a SHA-256 hash when written and validate that hash before loading. This helps detect corrupted or unexpectedly modified artifact files earlier and fail with a clearer integrity signal. PR #5103
CLI and dashboard UX
Select a stack during login:
zenml loginnow accepts--stack, allowing you to connect to a server and immediately set the active stack in one command. When used together with--project, ZenML applies the project first so the stack is resolved in the intended project context. PR #5125Improved secret value display: Secret values in the dashboard no longer expand indefinitely in the UI and are truncated for readability. A direct copy action is now available, making it easier to work with long secret values without disrupting the page layout. PR #1104
Timeline updates for cancelled runs: The dashboard timeline now shows steps that were not started because a run was cancelled. The timeline filter also supports filtering for
Not Started, making cancelled or partially executed runs easier to inspect. PR #1108
0.96.2 (2026-07-17)
See what's new and improved in version 0.96.2.

Dynamic pipelines
Explicit start ordering for dynamic steps: Dynamic pipelines now support
start_after=...when calling steps, letting you control which concurrently launched steps should wait for others before starting. This makes it easier to model ordering constraints without turning concurrent parts of a dynamic pipeline into fully synchronous execution. Note thatstart_afteris now a reserved step keyword, so steps that previously used a parameter with this name will need to be updated. PR #4995More flexible dynamic step inputs: You can now configure whether JSON-serializable raw values passed to steps in dynamic pipelines should be treated as parameters instead of artifacts. The new environment-variable threshold defaults to
0to preserve existing behavior, while explicit APIs such aswith_options(parameters=...)andExternalArtifact(...)remain available when you want to force either behavior. PR #5079Improved dynamic execution semantics: Dynamic pipelines now support
CONTINUE_ON_FAILUREexecution mode, allowing already queued or asynchronous work to continue when an async step fails. ZenML also models implicit dependencies from newly launched steps to the last completed sync step, making mixed sync/async dynamic pipelines execute in a more predictable order. PR #5052
Integrations and deployment
DigitalOcean integration: ZenML now includes a first-class
digitaloceanintegration with support for DigitalOcean Spaces artifact stores and DigitalOcean Container Registry stack components. Spaces support builds on the existing S3-compatible implementation while handling DigitalOcean regions and endpoint generation for you. PR #5054Helm chart logging and OpenTelemetry configuration: The ZenML Helm chart now exposes server logging options and OpenTelemetry settings directly in values. You can configure console or JSON logging, service names, OTEL endpoints, and enable or disable traces, metrics, and logs without custom chart modifications. PR #5048
Data and metadata management
Server-side artifact data deletion: ZenML can now delete artifact version data through the server API, not only from a full client with direct stack access. This enables artifact metadata and backing data to be deleted from the UI or from thin clients that do not have the artifact store stack component locally available. PR #5034
Project metadata: Projects now support arbitrary
project_metadataon create, update, and hydrated response models. Metadata is stored as portable JSON, preserved when omitted, replaced when explicitly supplied, and can be cleared by sending an empty object. PR #5086
Performance and scalability
Lower-memory cross-filesystem copies:
fileio.copy()now streams cross-filesystem copies in bounded chunks instead of reading the entire file into memory. This significantly reduces peak memory usage for local-to-remote and remote-to-local artifact operations, includingPathMaterializer, directory copies, integration materializers, and code archive upload/download flows. PR #5031Fewer server requests during runs: ZenML now caches commonly reused project, store, stack, pipeline run, and completed step run responses in process where safe. Local and in-process execution paths make substantially fewer server requests, which improves responsiveness for pipelines with many steps. PR #5036 PR #5038
Faster DAG endpoint on large runs: The DAG endpoint now does less unnecessary parsing and object construction when serving large pipeline graphs. In benchmarks on a DAG with thousands of nodes and edges, endpoint latency was reduced by roughly half. PR #5051
Security and dependencies
FastAPI, Starlette, and OpenTelemetry updates: ZenML now supports FastAPI
0.138.0, raises the lower Starlette bound to0.46.0to pick up security fixes, and updates OpenTelemetry packages for compatibility. The update also removes an unusedfastapi_utilsdependency and cleans up deprecated FastAPI response and lifespan usage. PR #5017 PR #5060
0.96.1 (2026-07-02)
See what's new and improved in version 0.96.1.

Run pipelines and steps over SSH: ZenML now includes an SSH orchestrator and SSH step operator for executing workloads on remote machines accessible via SSH (PR #4953). This makes it easier to use existing servers or on-prem infrastructure as execution targets without adopting a full cluster-based backend, while still managing runs through ZenML.
0.96.0 (2026-07-02)
See what's new and improved in version 0.96.0.

Breaking Changes
The minimum supported
transformersversion has been raised. If you use ZenML with Hugging Face/transformers, update your environment and dependency pins to a newer compatibletransformersrelease before upgrading ZenML. PR #4976The Azure integration now requires newer Azure dependency versions, and support for the deprecated
azureml-corelibrary has been fully removed. If you use ZenML on Azure, update your Azure-related dependency pins and migrate any remainingazureml-coreusage to the currently supported Azure SDK packages before upgrading. PR #4987In open-source ZenML server deployments without RBAC enabled, service account and API key management is now restricted to admins only. Non-admin users will no longer be able to manage service accounts or API keys they previously created, so move any required credentials and automation to admin-managed accounts as part of your upgrade. PR #5007
New integrations and execution backends
Trackio experiment tracking: ZenML now includes a Trackio experiment tracker integration, allowing pipelines to log experiment data through Trackio’s public API. This makes it easier to manage trial results and connect ZenML runs with Hugging Face-backed Trackio workflows such as datasets, spaces, and buckets. PR #4841
Backblaze B2 artifact store: You can now configure Backblaze B2 as a ZenML artifact store. This adds another S3-compatible storage option for teams that want to store pipeline artifacts in Backblaze infrastructure. PR #4791
Baseten step operator: ZenML now supports a
basetenstep operator flavor for running GPU workloads as Baseten Training jobs. It supports regular single-node steps with ZenML artifacts and logs, as well as multi-node distributed training through command steps that can consume Baseten’s distributed training environment variables. PR #4973Generic OAuth2 service connector: A new OAuth2 service connector lets you authenticate external services using a static token, client credentials, or a client ID with refresh token. This provides a reusable connector option for services that expose OAuth2-based authentication. PR #4992
Workflow controls and platform operations
Replay input overrides by step name: When replaying a run, you can now use
step_default_input_overridesto override a step input for every invocation of a step with the same name. Per-invocationstep_input_overridesstill take precedence, giving you both broad and targeted control during replay. PR #4978Trigger cycle protection: ZenML now detects execution loops in Platform Event Trigger chains at the pipeline level. Cyclic trigger dispatches are skipped with the new
SKIPPED_TRIGGER_CYCLEstatus, while unrelated downstream dispatches can continue normally and the affected cycle can be inspected through the SDK. PR #4971Optional sandbox cleanup on exit: Sandbox sessions can now be configured to destroy the sandbox automatically when the session exits. The option defaults to
False, preserving the behavior from previous releases unless you opt in. PR #4986Configurable Kubernetes API retries: Kubernetes-based deployments can now configure retry behavior for Kubernetes API calls. This gives operators more control over resilience in clusters where transient API failures or throttling can occur. PR #5004
Dashboard filtering and connector selection improvements: The dashboard Timeline View now has additional filtering options, including more status filters. Component creation also gets a more efficient connector selector, making setup flows smoother in larger workspaces. PR #1084
Performance and scalability
Faster pipeline sorting by latest run: Listing pipelines sorted by latest run is now more efficient on large deployments. ZenML changed the query shape and supporting database indexing so the server no longer has to scan all runs for all pipelines just to compute the latest run timestamp. PR #4969
More efficient run and artifact queries: Several common server queries now load only the data they need and fetch related metadata more efficiently. This improves performance for DAG, pipeline run, step run, artifact version, and model version views, especially in workspaces with many entities. PR #4994
Catch-up cleanup for expired API transactions: Expired API transaction cleanup now works through bounded catch-up passes instead of a single fixed delete per interval. This helps servers recover from cleanup backlogs while keeping each database operation bounded, and also allows completed expired idempotency transactions to be safely reclaimed. PR #4943
0.95.1 (2026-06-18)
See what's new and improved in version 0.95.1.

Dynamic pipelines with step operators
Dynamic pipeline execution is more reliable when steps use step operators.
Faster pipeline and step run queries
Common pipeline run and step run views should now load more efficiently, especially on larger deployments.
Improved database query performance by adjusting how related data is loaded for common pipeline run and step run queries.
This helps avoid expensive query plans in MySQL for paginated run listings, making these queries more scalable. PR #4965
Logging stability
Logging shutdown is now safer when using artifact-backed log stores.
0.95.0 (2026-06-17)
See what's new and improved in version 0.95.0.

Breaking Changes
PR #4844: ZenML now supports Python 3.14, and environments using the
localorserverextras must also accommodate the SQLModel upgrade from 0.18.0 to 0.38.0. If you depend on those extras, review and update any pinned SQLModel-related dependencies before upgrading.PR #4900: Local MLflow tracking now uses a SQLite backend by default when no
tracking_uriis configured. New tracking metadata is stored in<LOCAL_ARTIFACT_STORE>/mlflow.dband artifacts under the local artifact store, so users relying on the previous default local MLflow layout or behavior should update their local setup and migration expectations.PR #4790: ZenML now requires
opentelemetry-sdk==1.40.0instead of 1.38.0. If your environment pins OpenTelemetry packages, update them to compatible versions before upgrading ZenML.PR #4875: Step and pipeline hooks have been reworked into a new lifecycle-based hook system with persisted hook invocation records. If you use hooks or related internal APIs, review your existing integrations and update them to the new hook semantics and lifecycle events.
PR #4919: ZenML server rate limiting no longer trusts raw
X-Forwarded-Forheaders by default. If you run ZenML behind an ingress or reverse proxy, make sure proxy header handling is explicitly configured so login rate limiting continues to use the correct client IPs.PR #4459: CLI
listcommands now return the newest items first by default instead of the oldest first. If you have scripts or workflows that assumed the previous ordering, update them to explicitly sort or handle the new default order.PR #4566: The deprecated singular
tagfield has been removed fromTaggableFilters. Update any API or client code to use the supported tag filtering format instead of passing a singletagvalue.PR #4950: Pipeline execution may now raise different exception types depending on how step futures are awaited. If you catch exceptions around pipeline execution, review and update your error-handling logic to account for
StepExecutionExceptionbeing raised in implicit await scenarios.PR #4867: ZenML now requires
modal>=1.4.0,<2.0.0when using the Modal integration.
New ways to run code and pipelines
This release expands how you can execute work in ZenML, from async Python to arbitrary commands and new remote execution backends.
Define steps and hooks with
async def; ZenML now runs async functions on a fresh event loop for both normal and dynamic pipeline usage. PR #4913Run arbitrary commands as pipeline steps with
CommandStep(...), including non-Python commands and Python callables that do not require ZenML in the execution environment. PR #4904Invoke deployments asynchronously: a new deployment endpoint can submit a pipeline run and return immediately instead of waiting for completion. PR #4906
Sandboxes and Modal execution
ZenML now includes the core sandbox abstraction for isolated execution, plus new backend support for Kubernetes and Modal-based workloads.
Added the core
Sandboxstack component abstraction for running untrusted or generated code in isolated sessions, including a built-inlocalflavor for subprocess-based execution. PR #4866Added a
kubernetessandbox flavor where each sandbox session runs in a dedicated Kubernetes pod, with streamed command execution and support for re-attaching to running sessions. PR #4926Added a Modal orchestrator flavor so complete ZenML pipelines can run on Modal, using Modal sandboxes for orchestration and step execution. PR #4915
Integrations and deployment improvements
Several integrations and deployment paths are more flexible and production-ready.
Kubernetes deployments now merge
pod_settings.resourcesinto the deployment template context, making it possible to set pod resource limits required by cluster policies such as OPA Gatekeeper constraints. PR #4523Databricks-managed MLflow deployments now support machine-to-machine OAuth authentication via service principals. PR #4947
Performance and scalability
Common list and hydration operations should be faster and more reliable on larger ZenML deployments.
Improved list endpoint ordering so descending sorts can use matching index scans instead of forcing expensive mixed-direction database sorts. PR #4890
Added targeted database indexes for common pagination and hydration query patterns across pipeline runs, snapshots, step configurations, step runs, and artifact versions. PR #4942
Adjusted request timeout behavior so only deduplicated/cacheable requests may return a timeout or backpressure response while work continues in the background. PR #4942
Security and permissions
This release tightens authorization checks around API keys, stack deployments, secrets, and tag-resource relationships.
Service-account API key validation now handles omitted internal verification values and client-provided key values consistently, while preserving internal re-authentication behavior. PR #4920
GET /api/v1/stack-deployment/stacknow verifies READ permissions for both the returned stack and its associated service connector before returning deployment metadata. PR #4917Secret reference resolution now prevents users from attaching private secrets owned by others, or internal ZenML-managed secrets, to their own resources. PR #4923
Tag-resource endpoints now require UPDATE permissions on the referenced resource before tag relationships can be created or deleted, including batch operations. PR #4927
Tag-resource RBAC enforcement now lives in the RBAC store layer for more consistent behavior, and tag reads remain broadly available as server-wide resources. PR #4938
0.94.6 (2026-06-02)
See what's new and improved in version 0.94.6.

Infrastructure & Deployment Improvements
Enhanced GKE Private Cluster Support: Fixed GCP service connector failures when connecting to private GKE clusters that use Google's DNS-based control plane endpoint. ZenML now connects using the same method as
gcloud container clusters get-credentials --dns-endpoint, ensuring reliable access to private clusters. PR #4856
0.94.5 (2026-05-29)
See what's new and improved in version 0.94.5.

🚀 Live Event Streaming for Pipeline Runs
You can now stream custom events in real-time from your running pipelines! Call zenml.streaming.publish() from inside any step or dynamic pipeline to push events that can be consumed via Server-Sent Events (SSE). Enable this feature by setting stream_broker_implementation_source in your server configuration. The initial implementation includes a Redis-based broker with automatic catch-up, gap signaling, and idle cleanup. PR #4804
📊 Pipeline Run Statistics Endpoint
A new POST /api/v1/runs/statistics endpoint lets you query aggregated metrics across your pipeline runs. Group by status, pipeline, stack, user, time buckets (hour/day/week/month), metadata values, tags, and more. Calculate averages, sums, min/max over duration, step counts, cached steps, output artifacts, or custom numeric metadata. Perfect for building dashboards and analytics. PR #4860
🎯 Richer Weights & Biases Integration
The W&B experiment tracker now automatically adds ZenML pipeline and step metadata to your W&B runs, groups runs by pipeline execution, and records W&B identifiers back to ZenML step metadata. You can now configure custom groups, job types, run configs, explicit or deterministic run IDs, resume behavior, and pass through additional wandb.init kwargs for complete control over your experiment tracking. PR #4838
🤖 Agentic Human-in-the-Loop Pipeline Example
A new example demonstrates building dynamic agentic pipelines with human approval gates. The example shows how to plan agent tasks, fan them out with step.map(), summarize results, pause execution with zenml.wait() for human review, and branch the final action based on the decision. Includes clean lineage tracking with Annotated step outputs. PR #4849
📝 Structured Logging and OpenTelemetry Instrumentation
The ZenML server now supports structured logging with OpenTelemetry instrumentation. Configure console output with the new ZENML_CONSOLE_LOGGING_FORMAT environment variable, choosing between console, json, or text formats. Server logs use a clean structured layout with timestamps, levels, logger context, and optional JSON fields. PR #4781
🛠️ Enhanced Developer Experience
String Type Annotations: Step and pipeline definitions now support string annotations, either explicitly quoted or via
from __future__ import annotations. PR #4843Build Cache Mounting: Python package installations during Docker image building can now mount a build cache for faster builds. PR #4820
Improved Wait Condition Input: When resolving wait conditions interactively with string schemas, you can now input raw strings without quotes—ZenML detects and handles this automatically. PR #4845
Better Logging Control: Restored custom console log formatting for non-DEBUG output, added step-name prefixes in terminal output during execution (disable with
ZENML_DISABLE_STEP_NAMES_IN_LOGS=true), and kept stored logs clean and unformatted. TheZENML_LOGGING_FORMATvariable is now deprecated in favor ofZENML_CONSOLE_LOGGING_FORMAT. PR #4851
🎨 Dashboard Improvements
Improved scrolling behavior for the pipeline timeline view. PR #1053
0.94.4 (2026-05-12)
See what's new and improved in version 0.94.4.

New Databricks Step Operator
You can now run individual pipeline steps on Databricks using the new Databricks step operator PR #4648. This is useful when you want specific steps to execute in the Databricks runtime while the rest of your pipeline uses a different orchestrator. The Databricks orchestrator also now supports optional tag settings to label jobs and cluster resources for cost tracking, ownership, and governance.
Nested Dynamic Pipelines
Dynamic pipelines can now be nested, allowing you to call one dynamic pipeline from within another PR #4775. This enables more modular and reusable pipeline designs.
Enhanced Run:AI Training Workload Configuration
The Run:AI step operator now supports advanced training workload settings PR #4780, including:
Multiple mount types (PVC, ConfigMap, Secret, NFS, S3, HostPath)
Workload templates via
workload_template_idSecurity context settings (UID/GID, non-root execution, seccomp, capabilities)
Port declarations and external URL exposure
Training workload
parallelismandcompletions
Improved Kubernetes Job Failure Diagnostics
When dynamic pipeline jobs fail due to system issues (such as OOM kills), ZenML now provides richer diagnostic information PR #4800. This makes it easier to understand why Kubernetes terminated your pods.
Better Kubernetes Label Handling
Kubernetes string handling has been improved with separate sanitization for DNS-style names/keys and looser label-value rules for metadata like run, pipeline, and step IDs PR #4756. This makes it easier to navigate through runs in Kubernetes.
Increased Secret Size Limit
The maximum allowed size for ZenML secrets stored in the SQL secrets store has been increased to 64KB PR #4769. The limit applies to the combined size of all keys and values in a secret object.
Dashboard: Parent Run Display
The dashboard now displays parent run information in the run details view when available PR #1050.
0.94.3 (2026-04-24)
See what's new and improved in version 0.94.3.

🚀 New Features
Podman Support & Container Engine Abstraction
ZenML now supports Podman as an alternative to Docker for container image management. A new ContainerEngine abstraction has been introduced to make it easier to work with different OCI-compatible container runtimes. This gives you more flexibility in choosing your container tooling, especially in environments where Docker isn't available or preferred. PR #4651
Resource Pools (Pro only)
Introducing Resource Pools - a new way to manage and organize compute resources in ZenML. This feature includes full SDK methods, CLI commands, and API endpoints to create and manage resource pools and their associated objects, giving you better control over resource allocation across your ML workflows. PR #4465
Platform Event Triggers (Pro only)
You can now set up event-based triggers that automatically execute downstream workflows based on ZenML platform events, such as when a pipeline run completes. This enables powerful automation patterns and reactive workflows without manual intervention. Full backend management including CLI and SDK support is now available. PR #4692
Server-Side Pipeline Replays (Pro only)
Pipeline runs can now be replayed from the server with advanced capabilities:
Skip specific steps - steps won't re-execute even if cache was disabled or inputs changed
Override step input artifacts - go beyond parameter overrides and replace inputs that came from upstream steps in the original run
This gives you fine-grained control over re-executing parts of your pipelines. PR #4716
Multiple Components Per Stack Type
Stacks can now include multiple components of the same type for Alerters, Step Operators, and Experiment Trackers. You can designate one as the default while having others available for specific use cases, providing more flexibility in stack composition. PR #4671
Kubernetes Gateway API Support
The ZenML server can now be exposed via Gateway API HTTPRoute resources as an alternative to Ingress. Both Ingress and Gateway can be enabled simultaneously, making it easy to migrate from Ingress to Gateway API with zero downtime. PR #4726
✨ Enhancements
Improved Trigger Management
Triggers now track per-snapshot dispatch state showing whether the last run succeeded, was skipped due to concurrency policy, or failed
Failed dispatches store richer error context including message, type, severity, stack trace, and timestamps
New acknowledge flow lets you clear stored error context without re-attaching triggers or changing configuration
Schedule Stop Criteria
Schedules now support a max-runs limit to automatically stop after a specified number of executions per snapshot, giving you better control over scheduled pipeline runs. PR #4752
Non-Blocking Concurrent Steps
Dynamic pipelines with concurrent steps now execute more efficiently. Waiting for step inputs happens asynchronously instead of blocking the main thread, significantly improving pipeline execution performance when using concurrent steps. PR #4699
0.94.2 (2026-04-08)
See what's new and improved in version 0.94.2.

🎨 Dashboard Enhancements
The ZenML dashboard now includes a Run Summary View that provides a comprehensive overview of your pipeline runs at a glance PR #1029. Timeline rows now automatically resize for better visualization of your pipeline execution history PR #1028.
🔧 Pipeline & Trigger Improvements
Artifact Name Substitutions for Dynamic Pipelines: You can now use artifact name substitutions in dynamic pipelines, making it easier to reference and manage artifacts programmatically PR #4668.
Enhanced Trigger Configuration: Triggered runs now follow a cleaner snapshot.source pattern. You can provide a configuration object to customize parameters for all triggered runs in an attachment, giving you more control over automated pipeline executions PR #4610.
⚠️ Deprecation Notice
Helm Chart Configuration Update: The top-level zenml: values key in the ZenML Helm chart has been renamed to server: PR #4637. Your existing values files will continue to work — the chart automatically merges both keys for backwards compatibility. If both keys are present, zenml: takes precedence for overlapping fields. The zenml: key is deprecated and will be removed in a future release; we recommend migrating to server: in your Helm configurations.
0.94.1 (2026-03-19)
See what's new and improved in version 0.94.1.

🎯 Pipeline Execution Control
Pause and Resume Pipeline Runs: Introduced
zenml.wait(...)to pause dynamic pipelines while waiting for external inputs, automatically freeing resources until the input is provided. Runs can be resumed automatically (when using remote orchestrators with snapshot support) or manually viazenml pipeline runs resume <ID>. PR #4588Override Step Inputs on Replay: You can now override step inputs when replaying a pipeline run, giving you more flexibility to rerun pipelines with different data. PR #4590
🔧 Materializers and Data Handling
Dataclass Materializer: Added a built-in materializer for JSON-serializable dataclasses, making it easier to pass structured data between steps. PR #4600
LakeFS Data Versioning Example: New example demonstrating the "pass references, not data" pattern for terabyte-scale datasets. ZenML steps exchange lightweight LakeFS pointers while actual data stays in LakeFS, accessed via its S3-compatible gateway. PR #4559
☁️ Infrastructure and Deployment
Helm Environment Variable Overrides: Environment variables specified in
zenml.environment,zenml.secretEnvironment, and worker deployment configurations can now override computed settings from the Helm chart. PR #4595Secret Environment Variables in Helm: Added support for injecting secret environment variables into the ZenML server deployment via Helm without committing secrets to values.yaml, enabling better GitOps workflows. PR #4606
Docker Build Arguments: Build arguments defined in
DockerSettingsare now properly declared withARGinstructions in auto-generated Dockerfiles. PR #4612
🔐 Authentication and Credentials
Improved GCP Credentials Refresh: Implemented native GCP credentials refresh using service connector logic, replacing periodic expiration checks for more reliable OAuth2 credential handling. PR #4527
📊 Pipeline Configuration
Step Parameter Schema Storage: Step parameter specifications are now stored for better schema validation when triggering pipeline snapshots. PR #4591
📦 Dependencies
Updated Pydantic to version 2.12.5. PR #4552
0.94.0 (2026-03-04)
See what's new and improved in version 0.94.0.

Breaking Changes
Old endpoints and client methods for legacy triggers, actions and event sources have been removed. This shouldn't affect you unless you explicitly used those endpoints or methods in your code.
Custom step operator flavors must implement new
submit_stepandget_step_statusmethods to work with dynamic pipelines. The legacylaunchmethod will only work in static pipelines as a fallback. The Spark step operator is not yet compatible with dynamic pipelines. PR #4515
🚀 New Integrations
Run:AI Step Operator: ZenML now supports running individual pipeline steps on Run:AI clusters with fractional GPU allocation, enabling more efficient resource utilization for ML workloads. PR #4439
✨ New Features
Step and Pipeline Replays: You can now replay existing step or pipeline runs with the same inputs and configuration. When replaying a pipeline run, you can specify which steps to skip and reuse from the original run. A debug mode is also available to run replays on your active stack with a local orchestrator. PR #4456
Triggers and Native Schedules (PRO): Introduced the
Triggerconcept for automated pipeline execution. The first supported trigger type is Schedules, which offers lifecycle management, automatic synchronization with orchestrators, and centralized management across stacks. PR #4482Step Run Filtering by Version: Added the ability to filter step runs by version, making it easier to track and manage specific versions of your pipeline steps. PR #4518
🔧 Improvements
Enhanced Dynamic Pipeline Monitoring: Improved the execution and monitoring of isolated steps in dynamic pipelines. Step submission is now separated from monitoring, preventing thread blocking during step execution. PR #4369
SkyPilot Integration Update: Updated the SkyPilot integration to support version 0.11.x, including migration to the new async API and support for new resource settings. PR #4462
Kubernetes Retry Configuration: Added configurable timeout options for Kubernetes orchestrator and step operator API calls, ensuring proper retry behavior and preventing unnecessary hanging. PR #4525
Git Submodule Support: Code archives now include files from git submodules when uploading to the artifact store, ensuring complete code tracking for repositories with submodules. PR #4496
0.93.3 (2026-02-19)
See what's new and improved in version 0.93.3.

Performance Improvements
This release includes significant performance optimizations for the ZenML server, particularly when handling large-scale deployments:
Improved database query efficiency: Rewrote filtering queries to eliminate unnecessary sorting during item counting, removed inefficient DISTINCT statements on multiple columns, and optimized OR subqueries for better database performance at scale. PR #4449
Enhanced API transaction management: Moved cleanup of expired transactions to an independent background thread that runs periodically, significantly improving API response times especially for large payloads like pipeline snapshots with many steps. PR #4453
Logging Enhancements
Logging capabilities have been expanded with new features and improvements:
Added new
createandupdateendpoints for logs with support for UUIDs inStepRunRequestandPipelineRunRequestIntroduced workspace ID and name to pipeline run log metadata (with backward compatibility)
Added
zenml.event.typeto error messages for better context trackingIntroduced environment variable to manage maximum log entries per request
Dashboard Updates
Added elapsed time display to step nodes in the DAG visualization for better pipeline monitoring PR #994
0.93.2 (2026-01-29)
See what's new and improved in version 0.93.2.

🎨 Dashboard Enhancements
The ZenML Dashboard now provides better visibility into your pipelines and infrastructure:
Download Pipeline Code: You can now download the code used for a pipeline snapshot directly from the dashboard. A new Download button appears in the "Code Path" section on both the Pipeline Run details page and the Step details sheet, making it easy to retrieve and review the exact code that was executed. PR #4401, PR #989
Stack & Component Labels: Labels attached to stacks and components are now visible in the dashboard, making it easier to organize and identify your infrastructure resources. PR #992
🔄 Dynamic Pipeline Improvements
Dynamic pipelines are now more robust and easier to work with:
Proper Environment Configuration: The pipeline environment is now correctly set while running the entrypoint function of dynamic pipelines, ensuring consistent behavior across different execution contexts. PR #4420
🤖 Developer Experience
Claude Code Plugin: A new ZenML Quick Wins skill for Claude Code helps you implement MLOps best practices directly in your AI-assisted coding workflow. The plugin is available through the Claude Code plugin marketplace and includes comprehensive documentation for multiple AI coding tools. PR #4426
0.93.1 (2026-01-14)
See what's new and improved in version 0.93.1.

🎛️ Schedule Management Enhancements
You can now pause and resume pipeline schedules directly from the CLI, giving you better control over automated pipeline executions. Use the new commands to activate or deactivate schedules on demand:
Currently available for the Kubernetes orchestrator. PR #4328
Schedules now support archiving as a soft-delete operation. When you delete a schedule, it's archived instead of permanently removed, preserving historical references so your pipeline runs maintain their schedule associations. PR #4339
🖥️ Dashboard Improvements
Stack Management: You can now update existing stacks directly from the UI without having to delete and recreate them. A new dedicated stack update page lets you add or replace stack components (orchestrators, artifact stores, container registries, etc.) efficiently. PR #978
Step Cache Management: View and manage step cache expiration directly from the step details panel. The cache expiration field shows when a step's cache will expire (or "Never" if no expiration is set), with expired caches clearly marked. You can also manually invalidate a step's cache with a single click. PR #976
Enhanced Logs Experience: Pipeline runs now have a dedicated logs page with a sidebar for navigating between run-level and step logs. The new logs viewer features virtualized rendering for better performance with large outputs, search and filtering capabilities, and step duration display. PR #985
⚡ Performance & Reliability
Kubernetes Orchestrator Improvements: The Kubernetes orchestrator now runs more efficiently with configurable DAG runner workers, optimized cache candidate fetching, and better error handling for failed step pods. PR #4368
Database Backup Speed: A new mydumper/myloader backup strategy delivers dramatically faster operations:
30x faster database backups
2.5x faster database restores
10x lower storage space requirements
🚀 Orchestrator Features
AzureML Dynamic Pipelines: Dynamic pipelines are now fully supported on the AzureML orchestrator, expanding your options for flexible pipeline execution. PR #4363
Kubernetes Init Container Templating: When configuring init containers for the Kubernetes orchestrator, you can now use an "{{ image }}" placeholder that will be automatically replaced with the actual orchestration/step container image. PR #4361
0.93.0 (2025-12-16)
See what's new and improved in version 0.93.0.

Breaking Changes
The logging system has been completely redesigned with a new log store abstraction that now captures stdout, stderr, and all logger outputs more comprehensively. If you have custom integrations that relied on the previous logging behavior or accessed logs directly from the artifact store, you may need to update your code to use the new log store APIs. PR #4111
The REST API endpoint
/api/v1/pipelines/<ID>/runshas been removed. Use/api/v1/runs?pipeline_id=<ID>instead to fetch runs for a specific pipeline. PR #4350The
logsfield has been removed from the response models of pipeline runs and steps. Additionally, RBAC checks for fetching logs, downloading artifacts, and visualizations have been tightened. If you were accessing logs through these response models, you will need to use the dedicated log fetching endpoints instead. PR #4347
Enhanced CLI Experience
The ZenML CLI now provides a more flexible and user-friendly experience with improved table rendering and output options. Tables are now more aesthetically pleasing with intelligent column sizing, and you can pipe CLI output in multiple formats (JSON, YAML, CSV, TSV) by properly separating stdout and stderr streams. This makes it easier to integrate ZenML commands into scripts and automation workflows. PR #4241
Dynamic Pipeline Support
Dynamic pipelines can now be deployed and run with the local Docker orchestrator, including support for asynchronous execution. This expands the flexibility of local development and testing workflows, allowing you to leverage dynamic pipeline patterns without requiring cloud infrastructure. PR #4294, PR #4300
Pipeline Run Tracking
Each pipeline run now includes an index attribute that tracks its position within the pipeline's execution history, making it easier to identify and reference specific runs in a sequence. PR #4288
Orchestrator Health Monitoring
The Kubernetes orchestrator now includes enhanced health monitoring capabilities with configurable heartbeat thresholds. Steps that become unhealthy are preemptively stopped, and pipeline tokens are automatically invalidated when pipelines enter an unhealthy state, improving reliability and resource management. PR #4247
New Integrations
Alibaba Cloud Storage: Added support for Alibaba Cloud OSS as an artifact store, expanding ZenML's cloud storage options. PR #4289
Generic OTEL Log Store: Introduced a new log store flavor that can connect to any OTEL/HTTP/JSON compatible log intake endpoint, enabling integration with a wider range of observability platforms. PR #4309
Azure ML Enhancements
The AzureML orchestrator and step operator now support shared memory size configuration, giving you more control over resource allocation for your workloads. PR #4334
0.92.0 (2025-12-02)
See what's new and improved in version 0.92.0.

Dynamic Pipeline Support Expansion
This release significantly expands support for dynamic pipelines across multiple orchestrators:
AWS Sagemaker Orchestrator: Added full support for running dynamic pipelines with seamless transition from existing settings and faster execution through direct use of training jobs. PR #4232
Vertex AI Orchestrator: Dynamic pipelines are now fully supported on Google Cloud's Vertex AI platform. PR #4246
Kubernetes Orchestrator: Improved dynamic pipeline handling by eliminating unnecessary pod restarts. PR #4261
Snapshot Execution: For Pro users, the new release enabled running snapshots of dynamic pipelines from the server with support for specifying pipeline parameters. PR #4253
GCP Image Builder Regional Support
Added regional location support to the GCP Image Builder, allowing you to specify Cloud Build regions for improved performance and compliance:
Optional
locationparameter for specifying Cloud Build regionUses regional Cloud Build endpoint (
{location}-cloudbuild.googleapis.com) when location is setMaintains backward compatibility with global endpoint as default
Includes input validation for location parameter
Integration Updates
0.91.2 (2025-11-19)
See what's new and improved in version 0.91.2.

Kubernetes Deployer
Deploy your pipelines directly on Kubernetes
Full integration with Kubernetes orchestrator
MLflow 3.0 Support
Added support for the latest MLflow version
Improved compatibility with modern MLflow features
S3 Artifact Store Fixes
Fixed compatibility with custom S3 backends
Improved SSL certificate handling for RestZenStore
Enhanced Weights & Biases experiment tracker reliability
UI Updates
Remove Video Modal (#943)
Update Dependencies (CVE) (#945)
Adjust text-color (#947)
Sanitize Dockerfile (#948)
0.91.1 (2025-11-11)
See what's new and improved in version 0.91.1.

Hugging Face Deployer
Deploy pipelines directly to Hugging Face Spaces
Seamless integration with Hugging Face infrastructure
Dynamic Pipelines (Experimental)
Introduced v1 of dynamic pipelines
Early feedback welcome for this experimental feature
Kubernetes Orchestrator Enhancements
Container security context configuration
Skip owner references option
Improved deployment reliability
UI Updates
Display Deployment in Run Detail (#919)
Announcements Widget (#926)
Add Resize Observer to HTML Viz (#928)
Adjust Overview Pipelines (#914)
Fix Panel background (#882)
Input Styling (#911)
Display Schedules (#879)
0.91.0 (2025-10-25)
See what's new and improved in version 0.91.0.

Local Deployer
Deploy pipelines locally with full control
Perfect for development and testing workflows
Advanced Caching System
File and object-based cache invalidation
Cache expiration for bounded lifetime
Custom cache functions for advanced logic
Deployment Visualizations
Attach custom visualizations to deployments
Fully customizable deployment server settings
Enhanced deployment management
Python 3.13 Support
Full compatibility with Python 3.13
MLX array materializer for Apple Silicon
UI Updates
Deployment Playground: Easier to invoke and test deployments (#861)
Create Snapshots: Create snapshots directly from the UI (#856)
GitHub-Flavored Markdown support (#876)
Resizable Panels (#873)
Breaking Changes
Dropped Python 3.9 support - upgrade to Python 3.10+ (#4053)
0.90.0 (2025-10-02)
See what's new and improved in version 0.90.0.

Pipeline Snapshots & Deployments
Capture immutable snapshots of pipeline code and configuration
Deploy pipelines as HTTP endpoints for online inference
Docker, AWS, and GCP deployer implementations
Runtime Environment Variables
Configure environment variables when running pipelines
Support for ZenML secrets in runtime configuration
Dependency Management Improvements
Reduced base package dependencies
Local database dependencies moved to
zenml[local]extraJAX array materializer support
UI Updates
Pipeline Snapshots & Deployments: Track entities introduced in ZenML 0.90.0 (#814)
Breaking Changes
Client-Server compatibility: Must upgrade both simultaneously
Run templates need to be recreated
Base package no longer includes local database dependencies - install
zenml[local]if needed (#3916)
0.85.0 (2025-09-12)
See what's new and improved in version 0.85.0.

Pipeline Execution Modes
Flexible failure handling configuration
Control what happens when steps fail
Better pipeline resilience
Value-Based Caching
Cache artifacts based on content/value, not just ID
More intelligent cache reuse
Cache policies for granular control
Airflow 3.0 Support
Full compatibility with Apache Airflow 3.0
Access to latest Airflow features and improvements
UI Updates
Timeline View: New way to visualize pipeline runs alongside the DAG (#799)
Client-Side Structured Logs (#801)
Default Value for Arrays (#798)
Breaking Changes
Local orchestrator now continues execution after step failures
Docker package installer default switched from pip to uv (#3935)
Log endpoint format changed (#3845)
0.84.3 (2025-08-27)
See what's new and improved in version 0.84.3.

ZenML Pro Service Account Authentication
CLI login support via
zenml login --api-keyService account API keys for programmatic access
Organization-level access for automated workflows
ZenML Pro Service Account Authentication
CLI login support via
zenml login --api-keyService account API keys for programmatic access
Organization-level access for automated workflows
0.84.2 (2025-08-06)
See what's new and improved in version 0.84.2.

Kubernetes Orchestrator Improvements
Complete rework using Jobs instead of raw pods
Better robustness and automatic restarts
Significantly faster pipeline compilation
Kubernetes Orchestrator Improvements
Complete rework using Jobs instead of raw pods
Better robustness and automatic restarts
Significantly faster pipeline compilation
0.84.1 (2025-07-30)
See what's new and improved in version 0.84.1.

Step Exception Handling
Improved collection of exception information
Better debugging capabilities
External Service Accounts
Added support for external service accounts
Improved flexibility
Kubernetes Orchestrator Enhancements
Schedule management capabilities
Better error handling
Enhanced pod monitoring
Dynamic Fan-out/Fan-in
Support for dynamic patterns with run templates
More flexible pipeline architectures
Step Exception Handling
Improved collection of exception information
Better debugging capabilities
External Service Accounts
Added support for external service accounts
Improved flexibility
Kubernetes Orchestrator Enhancements
Schedule management capabilities
Better error handling
Enhanced pod monitoring
Dynamic Fan-out/Fan-in
Support for dynamic patterns with run templates
More flexible pipeline architectures
0.84.0 (2025-07-11)
See what's new and improved in version 0.84.0.

Early Pipeline Stopping
Stop pipelines early with Kubernetes orchestrator
Better resource management
Step Retries
Configurable step retry mechanisms
Improved pipeline resilience
Step Status Refresh
Real-time status monitoring
Enhanced step status refresh capabilities
Performance Improvements
Thread-safe RestZenStore operations
Server-side processing improvements
Enhanced pipeline/step run fetching
UI Updates
Breaking Changes
Kubernetes Orchestrator Compatibility: Client and orchestrator pod versions must match exactly
Last updated
Was this helpful?