Skip to content

zenml

v0.96.2 Security

This release includes 3 security fixes for security teams reviewing exposed deployments.

✓ No known CVEs patched
Read the diff → Tool health → What is this tool? →
This release patches 3 known CVEs

Topics

agentops agents ai automl data-science machine-learning
+12 more
devops-tools genai llm llmops metadata-tracking mlops pipelines production-ready pytorch tensorflow workflow zenml

Affected surfaces

auth deps

ReleasePort's take

Moderate signal
editorial:auto 9d

The release revokes authentication tokens after password changes and API key rotations.

Why it matters: Revoking tokens after credential rotation mitigates risk of unauthorized access; implement immediately for affected services.

Summary

AI summary

Broad release touches Security and dependencies, Dynamic pipelines, Performance and scalability, and Integrations and deployment.

Changes in this release

Security High

Revokes tokens after password changes and API key rotations.

Revokes tokens after password changes and API key rotations.

Source: llm_adapter@2026-07-17

Confidence: high

Security Medium

Updates FastAPI, Starlette, and OpenTelemetry dependencies for security fixes.

Updates FastAPI, Starlette, and OpenTelemetry dependencies for security fixes.

Source: granite4.1:30b@2026-07-17-audit

Confidence: low

Breaking High

Reserves `start_after` as a keyword for dynamic pipeline steps.

Reserves `start_after` as a keyword for dynamic pipeline steps.

Source: llm_adapter@2026-07-17

Confidence: high

Feature Medium

Adds explicit `start_after` ordering for dynamic pipeline steps.

Adds explicit `start_after` ordering for dynamic pipeline steps.

Source: llm_adapter@2026-07-17

Confidence: high

Feature Medium

Allows configuring raw values as parameters in dynamic pipelines.

Allows configuring raw values as parameters in dynamic pipelines.

Source: llm_adapter@2026-07-17

Confidence: high

Feature Medium

Introduces `CONTINUE_ON_FAILURE` execution mode for dynamic pipelines.

Introduces `CONTINUE_ON_FAILURE` execution mode for dynamic pipelines.

Source: llm_adapter@2026-07-17

Confidence: high

Feature Medium

Adds DigitalOcean Spaces artifact store and DOCR container registry integration.

Adds DigitalOcean Spaces artifact store and DOCR container registry integration.

Source: llm_adapter@2026-07-17

Confidence: high

Feature Medium

Supports arbitrary `project_metadata` on projects.

Supports arbitrary `project_metadata` on projects.

Source: llm_adapter@2026-07-17

Confidence: low

Feature Medium

Exposes server logging options and OpenTelemetry settings in the ZenML Helm chart.

Exposes server logging options and OpenTelemetry settings in the ZenML Helm chart.

Source: granite4.1:30b@2026-07-17-audit

Confidence: low

Feature Low

Enables deletion of artifact version data via the server API.

Enables deletion of artifact version data via the server API.

Source: granite4.1:30b@2026-07-17-audit

Confidence: low

Performance Medium

Streams cross‑filesystem copies in bounded chunks, reducing peak memory usage.

Streams cross‑filesystem copies in bounded chunks, reducing peak memory usage.

Source: llm_adapter@2026-07-17

Confidence: high

Performance Medium

Caches common responses, reducing server requests during pipeline runs.

Caches common responses, reducing server requests during pipeline runs.

Source: llm_adapter@2026-07-17

Confidence: high

Performance Medium

Optimizes DAG endpoint, halving latency for large pipeline graphs.

Optimizes DAG endpoint, halving latency for large pipeline graphs.

Source: llm_adapter@2026-07-17

Confidence: high

Bugfix Medium

Handles in‑memory Docker credentials correctly with existing local entries.

Handles in‑memory Docker credentials correctly with existing local entries.

Source: granite4.1:30b@2026-07-17-audit

Confidence: low

Bugfix Medium

Removes overridden step parameters from replay configurations.

Removes overridden step parameters from replay configurations.

Source: granite4.1:30b@2026-07-17-audit

Confidence: low

Bugfix Medium

Replaces dict‑valued pipeline parameters instead of merging with defaults in deployments.

Replaces dict‑valued pipeline parameters instead of merging with defaults in deployments.

Source: granite4.1:30b@2026-07-17-audit

Confidence: low

Bugfix Low

Excludes root `.dockerignore` from build context archives for remote builders.

Excludes root `.dockerignore` from build context archives for remote builders.

Source: granite4.1:30b@2026-07-17-audit

Confidence: low

Bugfix Low

Avoids race condition showing dynamic step runs before config commit.

Avoids race condition showing dynamic step runs before config commit.

Source: granite4.1:30b@2026-07-17-audit

Confidence: low

Bugfix Low

Prevents SSH orchestrator container name collisions on re‑runs.

Prevents SSH orchestrator container name collisions on re‑runs.

Source: granite4.1:30b@2026-07-17-audit

Confidence: low

Full changelog

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 that start_after is now a reserved step keyword, so steps that previously used a parameter with this name will need to be updated. PR #4995
  • More 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 0 to preserve existing behavior, while explicit APIs such as with_options(parameters=...) and ExternalArtifact(...) remain available when you want to force either behavior. PR #5079
  • Improved dynamic execution semantics: Dynamic pipelines now support CONTINUE_ON_FAILURE execution 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 digitalocean integration 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 #5054
  • Helm 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_metadata on 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, including PathMaterializer, directory copies, integration materializers, and code archive upload/download flows. PR #5031
  • Fewer 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 to 0.46.0 to pick up security fixes, and updates OpenTelemetry packages for compatibility. The update also removes an unused fastapi_utils dependency and cleans up deprecated FastAPI response and lifespan usage. PR #5017 PR #5060
Fixed
  • Token invalidation after credential changes: User tokens issued before a password change are now rejected, and tokens derived from API keys are tied to the key generation so rotated keys no longer leave stale sessions usable. The dashboard also correctly rotates API keys when a non-zero retention period is configured. PR #5025 PR #1088
  • Docker credentials supplied at runtime: ZenML now properly handles in-memory Docker credentials when a local Docker credential store already has entries for the same registry. This prevents the Docker Python client from silently preferring stale local credentials over credentials passed through ZenML. PR #5023
  • Remote image builds with restrictive .dockerignore files: ZenML no longer includes the root .dockerignore in generated build context archives for remote builders. This fixes builds on AWS CodeBuild, GCP Cloud Build, Kaniko, and similar builders when allowlist-style ignore patterns would otherwise exclude ZenML-generated files. PR #5033
  • Cleaner replay configurations: When replaying a pipeline run, ZenML now removes step parameters from the configuration if they are overridden by an input artifact. The displayed configuration no longer contains outdated values that were not actually used as step inputs. PR #5040
  • Deployment invocation with dict parameters: Dict-valued pipeline parameters sent to a deployment /invoke endpoint now replace compiled defaults instead of being recursively merged with them. This matches normal pipeline invocation behavior and prevents default keys from leaking into step inputs. PR #5042
  • Dynamic pipeline DAG race condition: ZenML now avoids a race where a step run could be visible in the database before its configuration was committed. This prevents intermittent 500 errors from the DAG endpoint while dynamic pipeline steps are being created. PR #5053
  • SSH orchestrator re-runs: SSH orchestrator container and Compose service names now avoid collisions across multiple runs of the same snapshot. Re-running from the dashboard, templates, or concurrent triggers no longer fails because an old container with the same name still exists on the host. PR #5082

What's Changed

  • Add version 0.96.0 to legacy docs by @github-actions[bot] in https://github.com/zenml-io/zenml/pull/5021
  • Remove placeholder data on queue full errors by @Json-Andriopoulos in https://github.com/zenml-io/zenml/pull/5027
  • Support secret references in secret strings by @schustmi in https://github.com/zenml-io/zenml/pull/5024
  • Bump FastAPI version by @schustmi in https://github.com/zenml-io/zenml/pull/5017
  • Expire tokens after password changes and API key rotations by @stefannica in https://github.com/zenml-io/zenml/pull/5025
  • Fix the in-memory docker credentials properly by @stefannica in https://github.com/zenml-io/zenml/pull/5023
  • Remove deprecated workspace-local service accounts in ZenML Pro by @stefannica in https://github.com/zenml-io/zenml/pull/5032
  • Stream cross-filesystem file copies in chunks by @kounelisagis in https://github.com/zenml-io/zenml/pull/5031
  • Misc query improvements by @schustmi in https://github.com/zenml-io/zenml/pull/5035
  • Don't include dockerignore in build context archive by @schustmi in https://github.com/zenml-io/zenml/pull/5033
  • Reduce unnecessary server requests by @schustmi in https://github.com/zenml-io/zenml/pull/5036
  • Remove shadowed step parameters when replaying by @schustmi in https://github.com/zenml-io/zenml/pull/5040
  • Allow workspace service accounts for a little while longer by @stefannica in https://github.com/zenml-io/zenml/pull/5041
  • Fix dict parameter overrides when invoking deployments by @kounelisagis in https://github.com/zenml-io/zenml/pull/5042
  • Move task-specific guidance out of root CLAUDE.md by @strickvl in https://github.com/zenml-io/zenml/pull/5049
  • Trim Codex agent instructions by @strickvl in https://github.com/zenml-io/zenml/pull/5050
  • Fix duplicated word in service connector login output by @kounelisagis in https://github.com/zenml-io/zenml/pull/5046
  • feat: added logging and otel support to helm charts by @amitvikramraj in https://github.com/zenml-io/zenml/pull/5048
  • Support deleting artifact data from server API by @Json-Andriopoulos in https://github.com/zenml-io/zenml/pull/5034
  • Fix dynamic pipeline step config race condition by @schustmi in https://github.com/zenml-io/zenml/pull/5053
  • Fix broken docstring checks & instructions by @Json-Andriopoulos in https://github.com/zenml-io/zenml/pull/5058
  • Updated docs to include K8s distros by @AlexejPenner in https://github.com/zenml-io/zenml/pull/5061
  • fix: decouple the zenml logging level setting from ZENML_DEBUG env var by @amitvikramraj in https://github.com/zenml-io/zenml/pull/5062
  • Always track pipeline image when using skip_build=True by @schustmi in https://github.com/zenml-io/zenml/pull/5069
  • Improve DAG endpoint performance by @schustmi in https://github.com/zenml-io/zenml/pull/5051
  • Fix truncated dashboard URLs in CLI output by @kounelisagis in https://github.com/zenml-io/zenml/pull/5045
  • Dynamic pipeline start ordering by @schustmi in https://github.com/zenml-io/zenml/pull/4995
  • Allow requesting extra step metadata in dag endpoint by @schustmi in https://github.com/zenml-io/zenml/pull/5070
  • Narrow exception handling in list projects CLI to RuntimeError by @qubeena07 in https://github.com/zenml-io/zenml/pull/5074
  • feat: bumped otel version to support fastapi 0.138.0 version by @amitvikramraj in https://github.com/zenml-io/zenml/pull/5060
  • Allow passing raw values as step parameters in dynamic pipelines by @schustmi in https://github.com/zenml-io/zenml/pull/5079
  • Dynamic pipeline improvements by @schustmi in https://github.com/zenml-io/zenml/pull/5052
  • Fix/mlflow model registry crash by @Json-Andriopoulos in https://github.com/zenml-io/zenml/pull/5072
  • Fix SSH orchestrator container name collisions on pipeline re-runs by @kounelisagis in https://github.com/zenml-io/zenml/pull/5082
  • In-process execution caching by @schustmi in https://github.com/zenml-io/zenml/pull/5038
  • Add DigitalOcean integration (Spaces artifact store, DOCR container registry) by @htahir1 in https://github.com/zenml-io/zenml/pull/5054
  • Add project metadata by @strickvl in https://github.com/zenml-io/zenml/pull/5086
  • Prepare release 0.96.2 by @github-actions[bot] in https://github.com/zenml-io/zenml/pull/5092

New Contributors

  • @kounelisagis made their first contribution in https://github.com/zenml-io/zenml/pull/5031

Full Changelog: https://github.com/zenml-io/zenml/compare/0.96.1...0.96.2

Breaking Changes

  • `start_after` is now a reserved keyword in dynamic pipeline steps; existing code using this name as a parameter must be updated.

Security Fixes

  • FastAPI upgraded to 0.138.0, Starlette minimum raised to 0.46.0 (includes security fixes)
  • Token invalidation after password changes and API key rotations
  • In‑memory Docker credentials now correctly override local stale entries

Weekly OSS security release digest.

The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.

No spam, unsubscribe anytime.

Share this release

Track zenml

Get notified when new releases ship.

Sign up free

About zenml

ZenML : One AI Platform from Pipelines to Agents. https://zenml.io.

All releases →

Related context

Related tools

Beta — feedback welcome: [email protected]