# ZenML 0.95.0 - Product: ZenML (https://whatsnew.fyi/product/zenml) - Vendor: ZenML - Date: 2026-06-17 - Version: 0.95.0 - Original notes: https://github.com/zenml-io/zenml/releases/tag/0.95.0 - Permalink: https://whatsnew.fyi/product/zenml/releases/0.95.0 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** — Define steps and hooks with async def; ZenML now runs async functions on a fresh event loop for both normal and dynamic pipeline usage - **added** — Run arbitrary commands as pipeline steps with CommandStep(...), including non-Python commands and Python callables that do not require ZenML in the execution environment - **added** — Invoke deployments asynchronously: a new deployment endpoint can submit a pipeline run and return immediately instead of waiting for completion - **added** — Added the core Sandbox stack component abstraction for running untrusted or generated code in isolated sessions, including a built-in local flavor for subprocess-based execution - **added** — Added a kubernetes sandbox flavor where each sandbox session runs in a dedicated Kubernetes pod, with streamed command execution and support for re-attaching to running sessions - **added** — Added a Modal orchestrator flavor so complete ZenML pipelines can run on Modal, using Modal sandboxes for orchestration and step execution - **changed** — ZenML now supports Python 3.14, and environments using the local or server extras must accommodate the SQLModel upgrade from 0.18.0 to 0.38.0 - **changed** — Local MLflow tracking now uses a SQLite backend by default when no tracking_uri is configured - **changed** — ZenML now requires opentelemetry-sdk==1.40.0 instead of 1.38.0 - **changed** — Step and pipeline hooks have been reworked into a new lifecycle-based hook system with persisted hook invocation records - **changed** — ZenML server rate limiting no longer trusts raw X-Forwarded-For headers by default - **changed** — CLI list commands now return the newest items first by default instead of the oldest first - **changed** — Kubernetes deployments now merge pod_settings.resources into the deployment template context - **changed** — Databricks-managed MLflow deployments now support machine-to-machine OAuth authentication via service principals - **changed** — Improved list endpoint ordering so descending sorts can use matching index scans instead of forcing expensive mixed-direction database sorts - **changed** — ZenML now requires modal>=1.4.0,<2.0.0 when using the Modal integration - **removed** — The deprecated singular tag field has been removed from TaggableFilters - **fixed** — Pipeline execution may now raise different exception types depending on how step futures are awaited - **added** — Added targeted database indexes for common pagination and hydration query patterns across pipeline runs, snapshots, step configurations, step runs, and artifact versions - **changed** — Adjusted request timeout behavior so only deduplicated/cacheable requests may return a timeout or backpressure response while work continues in the background ###### Known Issues * Enabling debug logs while having a GCP, Azure or S3 artifact log store will cause a deadlock at the end of a pipeline or step run. Fixed in `0.95.1`. ###### Breaking Changes * [PR #4844](https://github.com/zenml-io/zenml/pull/4844): ZenML now supports Python 3.14, and environments using the `local` or `server` extras 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](https://github.com/zenml-io/zenml/pull/4900): Local MLflow tracking now uses a SQLite backend by default when no `tracking_uri` is configured. New tracking metadata is stored in `/mlflow.db` and 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](https://github.com/zenml-io/zenml/pull/4790): ZenML now requires `opentelemetry-sdk==1.40.0` instead of 1.38.0. If your environment pins OpenTelemetry packages, update them to compatible versions before upgrading ZenML. * [PR #4875](https://github.com/zenml-io/zenml/pull/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](https://github.com/zenml-io/zenml/pull/4919): ZenML server rate limiting no longer trusts raw `X-Forwarded-For` headers 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](https://github.com/zenml-io/zenml/pull/4459): CLI `list` commands 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](https://github.com/zenml-io/zenml/pull/4566): The deprecated singular `tag` field has been removed from `TaggableFilter`s. Update any API or client code to use the supported tag filtering format instead of passing a single `tag` value. * [PR #4950](https://github.com/zenml-io/zenml/pull/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 `StepExecutionException` being raised in implicit await scenarios. * [PR #4867](https://github.com/zenml-io/zenml/pull/4867): ZenML now requires `modal>=1.4.0,<2.0.0` when 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 #4913](https://github.com/zenml-io/zenml/pull/4913) - Run arbitrary commands as pipeline steps with `CommandStep(...)`, including non-Python commands and Python callables that do not require ZenML in the execution environment. [PR #4904](https://github.com/zenml-io/zenml/pull/4904) - Invoke deployments asynchronously: a new deployment endpoint can submit a pipeline run and return immediately instead of waiting for completion. [PR #4906](https://github.com/zenml-io/zenml/pull/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 `Sandbox` stack component abstraction for running untrusted or generated code in isolated sessions, including a _[Truncated at 4000 characters — full notes: https://github.com/zenml-io/zenml/releases/tag/0.95.0]_