Server & SDK
Changelog for ZenML OSS and ZenML UI.
Stay up to date with the latest features, improvements, and fixes in ZenML OSS.
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
Fixed
Docker Build Requirements: Resolved an issue where ZenML would fail when no container engine was available, even when users explicitly set
skip_build=Truein their DockerSettings. The build checksum computation now correctly respects the skip_build flag. PR #4879
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
Fixed
Pipeline runs now properly fail when the user pipeline function cannot be imported (e.g., due to missing packages), instead of staying in a
runningstate indefinitely. PR #4832Keyboard interrupts during active wait conditions are now handled more gracefully, preventing unclear error messages when the server transitions to
STOPPEDstatus. PR #4835Fixed a copy-paste bug in the user update endpoint where admins couldn't activate or deactivate user accounts—the code was incorrectly writing
is_admininstead ofactiveto the safe update object. PR #4839
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.
Fixed
Signal handling during step execution: Signal handlers are now properly unregistered after step execution, preventing strange errors when running many sync steps or interrupting pipelines PR #4784. Dynamic pipeline steps running in isolated environments or step operators are no longer affected by signal handling from the orchestrator.
RBAC performance: Fixed redundant RBAC permission checks during response model dehydration PR #4797. Previously, when permissions were already prefetched and denied, additional RBAC requests were sent unnecessarily for each sub-model.
Keyword-only arguments in steps: Step functions can now use keyword-only arguments without causing failures PR #4798.
Kubernetes orchestrator settings: Fixed step pod configuration by replacing legacy hardcoded
orchestrator.kuberneteslookups with properorchestrator.get_settings(...)calls PR #4803. Step pods now correctly apply orchestrator settings from canonical component keys while maintaining backward compatibility.
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
🐛 Fixed
Run status updates: Fixed a bug where pipeline runs weren't properly marked as failed when a step pod failed after initially reporting success PR #4747
Secret visibility updates: You can now properly update secrets from private to public using the CLI or client PR #4755
Logs for restarted runs: Removed the unique constraint from logs schema to allow log entries for repeated executions of the same pipeline run PR #4729
Air-gapped performance: Flavor model generation no longer calls PyPI to resolve ZenML versions, improving performance in air-gapped environments PR #4744
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.
Fixed
Schedule Management: Fixed issues where deletion by ID prefix wasn't working for archived schedules, and reusing an archived schedule name was incorrectly blocked. Documentation has been updated to clarify schedule behavior post-deletion, including archived schedule renaming, hard deletion guidelines, and discovery of archived objects PR #4641.
Input Artifact Handling: Resolved a bug where a list of input artifacts containing a single item was incorrectly treated as a scalar input artifact, causing materializer type incompatibility errors PR #4679.
HTTP Request Optimization: The system now dynamically reduces chunk size when fetching many steps to avoid HTTP 414 (URI Too Long) errors PR #4553.
Dashboard Deployment Stability: Fixed a template loading issue in the FastAPI deployment app's dashboard that could cause
TypeError: unhashable type: 'dict'on certain environments (e.g., Kubernetes with newer Jinja2 versions), preventing the server from starting when the dashboard was enabled PR #4649.
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
Fixed
Exception Handling for Isolated Steps: Isolated steps in dynamic pipelines now raise the correct exception types instead of always wrapping them in
RuntimeError, making error handling more intuitive and consistent. PR #4589Kubernetes API Request Timeout: Fixed typing issue in the Kubernetes orchestrator and step operator to ensure
api_request_timeoutis properly applied as an integer value. PR #4605Client-Server Compatibility: Resolved compatibility issue with clients
<=0.92.0by not passing both pipeline run ID and step run ID to logs requests. PR #4614Dynamic Pipeline Monitoring: Fixed dictionary size change error that occurred when the main thread modified the
_steps_to_monitordictionary while the monitoring thread was iterating over it. PR #4619Step Config Template Parameters: Step parameters defined in config templates now correctly take precedence over function default values in dynamic pipelines. PR #4624
📦 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
Fixed
Fixed handling of variadic keyword arguments in pipeline functions, ensuring they are properly flattened before being passed to the pipeline. PR #4528
Fixed Azure integration dependencies by limiting the
azure-mgmt-resourceversion to avoid compatibility issues with the 25.0.0 package split. PR #4516Fixed handling of external artifacts with
Nonevalues and reduced chunk size when fetching many step runs to avoid URI too large errors. PR #4551
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
Fixed
Critical data loss bug: Fixed a critical issue in
download_artifact_files_from_responsethat caused silent data corruption when downloading artifacts larger than 8KB. The bug resulted in up to 98%+ data loss for large artifacts by only preserving the last chunk of data. PR #4422ZenML Pro migration: Fixed an issue where cookies from local user accounts persisted after migrating a ZenML OSS server to ZenML Pro via organization enrollment, preventing access to migrated resources in the UI. The server now properly rejects these stale cookies. PR #4473
UV-only environments: Fixed pipeline run crashes in environments using only
uvwithoutpipinstalled. ZenML now falls back touv pip freezewhenpip freezeis unavailable for collecting environment metadata. Also addedUV_FREEZEas an export method for Docker builds. PR #4484Kubernetes credential expiration: Fixed an issue where Kubernetes credentials issued by service connectors expired while monitoring long-running jobs, causing monitoring failures. Credentials are now properly refreshed during job monitoring. PR #4493
Improved CLI messaging when attempting to activate a stack without proper permissions
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
Fixed
🚀 Performance & Scalability
Artifact Download Fix: Resolved an issue where artifact version downloads were failing due to incorrect RBAC checks on the download endpoint. PR #4401
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
Fixed
Fixed per-step compute settings not being applied correctly PR #4362
Fixed database migration script to handle pipelines with zero runs PR #4360
Fixed working directory in dynamic pipeline containers (was
/zenmlinstead of/app) PR #4379Fixed pipeline run status updates in
CONTINUE_ON_FAILUREexecution mode PR #4379Fixed component setting shortcut keys when running snapshots PR #4379
Improved error messages during source validation and for string type annotations PR #4359
Fixed log storage in Kubernetes orchestrator by propagating context vars to DAG runner threads PR #4359
Pipeline source code now included for runs triggered by snapshots/deployments PR #4359
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
Fixed
MLflow Experiment Tracker: Fixed crashes when attempting to resume non-existent runs on Azure ML. The tracker now validates cached run IDs and gracefully creates new runs when necessary. PR #4227
Kubernetes Service Connector: Resolved failures in the ZenML server related to the Kubernetes service connector caused by incompatible urllib3 and kubernetes client library versions. PR #4312
Datadog Log Store: Improved log fetching with proper pagination support, handling the Datadog API's 1000-log limit per request through cursor-based iteration. PR #4314
Deployment Log Flushing: Eliminated blocking behavior when flushing logs during deployment invocations, preventing potential hangs at pipeline completion. PR #4354
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
Improved
Enhanced
step.map(...)andstep.product(...)to return a single future object instead of a list of futures, simplifying the API for step invocations. PR #4261Improved placeholder run handling to prevent potential issues in dynamic pipeline execution. PR #4261
Added better typing for Docker build options with a new class to help with conversions between SDK and CLI. PR #4262
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
Read the documentation | PR #4074
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)
Fixed
Port reuse for local deployments
Parallel deployment invocations
Keyboard interrupt handling during monitoring
Case-sensitivity issues when updating entity names (#4140)
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
Read the documentation | PR #4040
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
Learn more about Snapshots | Learn more about Deployments
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
Read the documentation | PR #3874
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
PR #3758 | PR #3762 | PR #3776
UI Updates
Breaking Changes
Kubernetes Orchestrator Compatibility: Client and orchestrator pod versions must match exactly
Last updated
Was this helpful?