# ZenML 0.96.3 - Product: ZenML (https://whatsnew.fyi/product/zenml) - Vendor: ZenML - Date: 2026-08-07 - Version: 0.96.3 - Original notes: https://github.com/zenml-io/zenml/releases/tag/0.96.3 - Permalink: https://whatsnew.fyi/product/zenml/releases/0.96.3 What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. --- - **added** — Command steps can now run across multiple Kubernetes pods with the Kubernetes step operator by setting pod_count in KubernetesStepOperatorSettings to launch the step as an indexed job - **added** — ZenML now includes a local Docker sandbox with a unified settings model for containerized sandboxes, supporting file upload and download for testing containerized ZenML behavior locally - **added** — The Helm chart now supports server.pro.enrollmentKeySecretRef to inject ZenML Pro enrollment keys from an existing Kubernetes Secret - **added** — zenml login now accepts --stack flag to connect to a server and immediately set the active stack in one command - **added** — The dashboard timeline now shows steps that were not started because a run was cancelled and supports filtering for Not Started - **changed** — Cloudpickle-materialized artifacts now store a SHA-256 hash when written and validate that hash before loading - **changed** — Secret values in the dashboard no longer expand indefinitely in the UI and are truncated for readability with a direct copy action available - **changed** — Local SQL stores backed by SQLite now wait up to 60 seconds for write locks instead of Python's 5-second default - **fixed** — Artifact version deletion now correctly applies project scope when checking whether an artifact is unused on remote deployed servers - **fixed** — Exception reporting now includes the full traceback lineage instead of only the final exception traceback - **fixed** — Kubernetes orchestrator pods are no longer retried when the pipeline run is already in a finished state that cannot be retried - **fixed** — Prefix-based lookups now keep scoped and default filters properly constrained when matching by ID or name prefix - **fixed** — Generic and stack-deployment tokens now preserve the original service account or device provenance used to create them - **fixed** — ZenML's MLflow experiment tracker now behaves more reliably when managed runtimes inject MLflow environment variables such as MLFLOW_RUN_ID - **fixed** — Existing workspace-level API keys remain valid when a workspace service account is adopted by an organization-level service account with the same name ###### 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_count` in `KubernetesStepOperatorSettings` to launch the step as an indexed job, making it easier to distribute command-style workloads across pods. [PR #5104](https://github.com/zenml-io/zenml/pull/5104) - **Local 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](https://github.com/zenml-io/zenml/pull/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 #5123](https://github.com/zenml-io/zenml/pull/5123) - **Cloudpickle 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](https://github.com/zenml-io/zenml/pull/5103) ###### CLI and dashboard UX - **Select a stack during login**: `zenml login` now 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 #5125](https://github.com/zenml-io/zenml/pull/5125) - **Improved 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](https://github.com/zenml-io/zenml-dashboard/pull/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](https://github.com/zenml-io/zenml-dashboard/pull/1108)
Fixed - **Fewer SQLite lock failures for local stores**: Local SQL stores backed by SQLite now wait up to 60 seconds for write locks instead of using Python’s 5-second default. This reduces `sqlite3.OperationalError: database is locked` failures when concurrent steps, such as mapped dynamic pipeline steps, finish and publish artifacts at the same time. [PR #5096](https://github.com/zenml-io/zenml/pull/5096) - **Artifact deletion on deployed servers**: Artifact version deletion now correctly applies project scope when checking whether an artifact is unused. This fixes deletion through the API on remote deployed servers where the default project is disabled. [PR #5100](https://github.com/zenml-io/zenml/pull/5100) - **Complete exception tracebacks**: Exception reporting now includes the full traceback lineage instead of only the final exception traceback. This makes chained failures easier to debug because the original cause is preserved alongside the final error. [PR #5098](https://github.com/zenml-io/zenml/pull/5098) - **Smarter Kubernetes dynamic pipeline retries**: Kubernetes orchestrator pods are no longer retried when the pipeline run is already in a finished state that cannot be retried. This avoids unnecessary pod restarts that would immediately exit with `Run is already finished.` [PR #5107](https://github.com/zenml-io/zenml/pull/5107) _[Truncated at 4000 characters — full notes: https://github.com/zenml-io/zenml/releases/tag/0.96.3]_