From adbce277e9345738cb8f4726aa7ef5e66d87f8fe Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 2 Jul 2026 21:58:50 +0200 Subject: [PATCH 1/5] Add version 0.96.0 to legacy docs (#5021) Co-authored-by: ZenML GmbH (cherry picked from commit 2de41efef8aaf1656e4b5fa9124cf7e10cea0175) --- docs/book/reference/legacy-docs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/book/reference/legacy-docs.md b/docs/book/reference/legacy-docs.md index f58b005ec1c..7109deb3079 100644 --- a/docs/book/reference/legacy-docs.md +++ b/docs/book/reference/legacy-docs.md @@ -5,6 +5,6 @@ icon: user-bounty-hunter # Legacy docs -
0.95.1https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.95.1/
0.95.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.95.0/
0.94.6https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.94.6/
0.94.5https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.94.5/
0.94.4https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.94.4/
0.94.3https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.94.3/
0.94.2https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.94.2/
0.94.1https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.94.1/
0.94.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.94.0/
0.93.3https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.93.3/
0.93.2https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.93.2/
0.93.1https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.93.1/
0.93.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.93.0/
0.92.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.92.0/
0.91.2https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.91.2/
0.91.1https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.91.1/
0.91.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.91.0/
0.90.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.90.0/
0.85.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.85.0/
0.84.3https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.84.3/
0.84.2https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.84.2/
0.84.1https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.84.1/
0.84.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.84.0/
0.83.1https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.83.1/
0.83.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.83.0/
0.82.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.82.0/
0.81.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.81.0/
0.80.2https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.80.2/
0.80.1https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.80.1/
0.80.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.80.0/
0.75.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.75.0/
0.74.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.74.0/
0.73.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.73.0/
0.72.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.72.0
0.71.0https://zenml-io.gitbook.io/zenml-legacy-documentation/0.71.0
0.70.0https://zenml-io.gitbook.io/zenml-legacy-documentation/0.70.0
0.68.1https://zenml-io.gitbook.io/zenml-legacy-documentation/0.68.1
0.68.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.68.0/
0.67.0https://app.gitbook.com/o/-MCl1Hlw9oU4xibZ-ymf/s/IAT17KUXNgudlhTyCPn4/
0.66.0https://zenml-io.gitbook.io/zenml-legacy-documentation/0.66.0
0.65.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.65.0/
0.64.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.64.0/
0.63.0https://app.gitbook.com/o/-MCl1Hlw9oU4xibZ-ymf/s/N7uiChp9LXuqoNrLj3U3/
0.62.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.62.0/
0.61.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.61.0
0.60.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.60.0/
0.58.2https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.58.2/
0.58.1https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.58.1/
0.58.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.58.0
0.57.1https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.57.1
0.57.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.57.0
0.56.4https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.56.4
0.56.3https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.56.3
0.56.2https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.56.2
0.56.1https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.56.1
0.55.5https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.55.5
0.55.4https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.55.4
0.55.3https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.55.3
0.55.2https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.55.2
0.55.1https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.55.1
0.55.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.55.0
0.54.1https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.54.1
0.54.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.54.0
0.53.1https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.53.1
0.53.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.53.0
0.52.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.52.0
0.51.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.51.0
0.50.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.50.0
0.47.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.47.0-legacy
0.46.1https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.46.1-legacy
0.46.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.46.0-legacy
0.45.6https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.45.6-legacy
0.45.5https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.45.5-legacy
0.45.4https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.45.4-legacy
0.45.3https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.45.3-legacy
0.45.2https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.45.2-legacy
0.44.4https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.44.4-legacy
0.44.3https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.44.3-legacy
0.44.2https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.44.2-legacy
0.44.1https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.44.1-legacy
0.43.1https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.43.1-legacy
0.43.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.43.0-legacy
0.42.2https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.42.2-legacy
0.42.1https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.42.1-legacy
0.42.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.42.0-legacy
0.41.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.41.0-legacy
0.40.3https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.40.3-legacy
0.40.2https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.40.2-legacy
0.40.1https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.40.1-legacy
0.40.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.40.0-legacy
0.39.1https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.39.1-legacy
0.39.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.39.0-legacy
0.38.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.38.0-legacy
0.37.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.37.0-legacy
0.36.1https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.36.1-legacy
0.36.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.36.0-legacy
0.35.1https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.35.1-legacy
0.35.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.35.0-legacy
0.34.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.34.0-legacy
0.33.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.33.0-legacy
0.32.1https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.32.1-legacy
0.32.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.32.0-legacy
0.31.1https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.31.1-legacy
0.31.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.31.0-legacy
0.30.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.30.0-legacy
0.20.5https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.20.5-legacy
0.20.4https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.20.4-legacy
0.20.3https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.20.3-legacy
0.20.2https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.20.2-legacy
0.20.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.20.0-legacy
0.13.2https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.13.2
0.13.1https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.13.1
0.13.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.13.0
0.12.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.12.0
0.11.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.11.0
0.10.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.10.0
+
0.96.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.96.0/
0.95.1https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.95.1/
0.95.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.95.0/
0.94.6https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.94.6/
0.94.5https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.94.5/
0.94.4https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.94.4/
0.94.3https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.94.3/
0.94.2https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.94.2/
0.94.1https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.94.1/
0.94.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.94.0/
0.93.3https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.93.3/
0.93.2https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.93.2/
0.93.1https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.93.1/
0.93.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.93.0/
0.92.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.92.0/
0.91.2https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.91.2/
0.91.1https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.91.1/
0.91.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.91.0/
0.90.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.90.0/
0.85.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.85.0/
0.84.3https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.84.3/
0.84.2https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.84.2/
0.84.1https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.84.1/
0.84.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.84.0/
0.83.1https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.83.1/
0.83.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.83.0/
0.82.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.82.0/
0.81.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.81.0/
0.80.2https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.80.2/
0.80.1https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.80.1/
0.80.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.80.0/
0.75.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.75.0/
0.74.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.74.0/
0.73.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.73.0/
0.72.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.72.0
0.71.0https://zenml-io.gitbook.io/zenml-legacy-documentation/0.71.0
0.70.0https://zenml-io.gitbook.io/zenml-legacy-documentation/0.70.0
0.68.1https://zenml-io.gitbook.io/zenml-legacy-documentation/0.68.1
0.68.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.68.0/
0.67.0https://app.gitbook.com/o/-MCl1Hlw9oU4xibZ-ymf/s/IAT17KUXNgudlhTyCPn4/
0.66.0https://zenml-io.gitbook.io/zenml-legacy-documentation/0.66.0
0.65.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.65.0/
0.64.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.64.0/
0.63.0https://app.gitbook.com/o/-MCl1Hlw9oU4xibZ-ymf/s/N7uiChp9LXuqoNrLj3U3/
0.62.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.62.0/
0.61.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.61.0
0.60.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.60.0/
0.58.2https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.58.2/
0.58.1https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.58.1/
0.58.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.58.0
0.57.1https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.57.1
0.57.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.57.0
0.56.4https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.56.4
0.56.3https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.56.3
0.56.2https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.56.2
0.56.1https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.56.1
0.55.5https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.55.5
0.55.4https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.55.4
0.55.3https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.55.3
0.55.2https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.55.2
0.55.1https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.55.1
0.55.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.55.0
0.54.1https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.54.1
0.54.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.54.0
0.53.1https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.53.1
0.53.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.53.0
0.52.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.52.0
0.51.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.51.0
0.50.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.50.0
0.47.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.47.0-legacy
0.46.1https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.46.1-legacy
0.46.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.46.0-legacy
0.45.6https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.45.6-legacy
0.45.5https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.45.5-legacy
0.45.4https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.45.4-legacy
0.45.3https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.45.3-legacy
0.45.2https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.45.2-legacy
0.44.4https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.44.4-legacy
0.44.3https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.44.3-legacy
0.44.2https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.44.2-legacy
0.44.1https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.44.1-legacy
0.43.1https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.43.1-legacy
0.43.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.43.0-legacy
0.42.2https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.42.2-legacy
0.42.1https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.42.1-legacy
0.42.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.42.0-legacy
0.41.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.41.0-legacy
0.40.3https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.40.3-legacy
0.40.2https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.40.2-legacy
0.40.1https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.40.1-legacy
0.40.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.40.0-legacy
0.39.1https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.39.1-legacy
0.39.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.39.0-legacy
0.38.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.38.0-legacy
0.37.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.37.0-legacy
0.36.1https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.36.1-legacy
0.36.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.36.0-legacy
0.35.1https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.35.1-legacy
0.35.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.35.0-legacy
0.34.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.34.0-legacy
0.33.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.33.0-legacy
0.32.1https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.32.1-legacy
0.32.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.32.0-legacy
0.31.1https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.31.1-legacy
0.31.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.31.0-legacy
0.30.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.30.0-legacy
0.20.5https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.20.5-legacy
0.20.4https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.20.4-legacy
0.20.3https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.20.3-legacy
0.20.2https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.20.2-legacy
0.20.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.20.0-legacy
0.13.2https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.13.2
0.13.1https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.13.1
0.13.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.13.0
0.12.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.12.0
0.11.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.11.0
0.10.0https://zenml-io.gitbook.io/zenml-legacy-documentation/v/0.10.0
ZenML Scarf
From d4e4b3f71ea27c4ab0bb838f0efba709946794a1 Mon Sep 17 00:00:00 2001 From: Alexej Penner Date: Fri, 10 Jul 2026 16:43:06 +0200 Subject: [PATCH 2/5] Updated docs to include K8s distros (#5061) * Updated docs to include K8s distros * Adjusted for accuracy and clarity * Also added to pro section --- docs/book/component-guide/orchestrators/kubernetes.md | 11 ++++++++--- .../deploying-zenml/deploy-with-helm.md | 4 +++- .../zenml-pro/deploy-control-plane-k8s.md | 2 ++ .../getting-started/zenml-pro/deploy-prerequisites.md | 4 +++- .../getting-started/zenml-pro/deploy-workspace-k8s.md | 2 ++ 5 files changed, 18 insertions(+), 5 deletions(-) diff --git a/docs/book/component-guide/orchestrators/kubernetes.md b/docs/book/component-guide/orchestrators/kubernetes.md index db4a1f5a1ed..202849ae073 100644 --- a/docs/book/component-guide/orchestrators/kubernetes.md +++ b/docs/book/component-guide/orchestrators/kubernetes.md @@ -6,6 +6,8 @@ description: Orchestrating your pipelines to run on Kubernetes clusters. Using the ZenML `kubernetes` integration, you can orchestrate and scale your ML pipelines on a [Kubernetes](https://kubernetes.io/) cluster without writing a single line of Kubernetes code. +The orchestrator uses standard Kubernetes APIs and works on managed cloud clusters (EKS, GKE, AKS), enterprise platforms like Red Hat OpenShift and SUSE Rancher, and self-managed clusters on-premises or in your own cloud. + This Kubernetes-native orchestrator is a minimalist, lightweight alternative to other distributed orchestrators like Airflow or Kubeflow. Overall, the Kubernetes orchestrator is quite similar to the Kubeflow orchestrator in that it runs each pipeline step in a separate Kubernetes pod. However, the orchestration of the different pods is not done by Kubeflow but by a separate master pod that orchestrates the step execution via topological sort. @@ -20,15 +22,18 @@ This component is only meant to be used within the context of a [remote ZenML de You should use the Kubernetes orchestrator if: +* you already have a Kubernetes cluster—managed cloud, Red Hat OpenShift, SUSE Rancher, or self-managed on-premises. * you're looking for a lightweight way of running your pipelines on Kubernetes. * you're not willing to maintain [Kubeflow Pipelines](kubeflow.md) on your Kubernetes cluster. * you're not interested in paying for managed solutions like [Vertex](vertex.md). ## How to deploy it -The Kubernetes orchestrator requires a Kubernetes cluster in order to run. There are many ways to deploy a Kubernetes cluster using different cloud providers or on your custom infrastructure, and we can't possibly cover all of them, but you can check out our [our production guide](https://docs.zenml.io/user-guides/production-guide). +The Kubernetes orchestrator requires a Kubernetes cluster (version 1.21 or higher recommended). + +There are many ways to deploy a Kubernetes cluster using different cloud providers or on your custom infrastructure, and we can't possibly cover all of them, but you can check out our [production guide](https://docs.zenml.io/user-guides/production-guide). -If the above Kubernetes cluster is deployed remotely on the cloud, then another pre-requisite to use this orchestrator would be to deploy and connect to a [remote ZenML server](https://docs.zenml.io/getting-started/deploying-zenml/). +If the Kubernetes cluster is deployed remotely, another prerequisite is to deploy and connect to a [remote ZenML server](https://docs.zenml.io/getting-started/deploying-zenml/). ## How to use it @@ -42,7 +47,7 @@ To use the Kubernetes orchestrator, we need: * [Docker](https://www.docker.com) installed and running. * A [remote artifact store](../artifact-stores/README.md) as part of your stack. * A [remote container registry](../container-registries/README.md) as part of your stack. -* A Kubernetes cluster [deployed](kubernetes.md#how-to-deploy-it) +* A Kubernetes cluster [deployed](kubernetes.md#how-to-deploy-it) (version 1.21 or higher recommended) * [kubectl](https://kubernetes.io/docs/tasks/tools/#kubectl) installed and the name of the Kubernetes configuration context which points to the target cluster (i.e. run`kubectl config get-contexts` to see a list of available contexts) . This is optional (see below). {% hint style="info" %} diff --git a/docs/book/getting-started/deploying-zenml/deploy-with-helm.md b/docs/book/getting-started/deploying-zenml/deploy-with-helm.md index f132952e6c2..f27dcc320c5 100644 --- a/docs/book/getting-started/deploying-zenml/deploy-with-helm.md +++ b/docs/book/getting-started/deploying-zenml/deploy-with-helm.md @@ -6,13 +6,15 @@ description: Deploying ZenML in a Kubernetes cluster with Helm. If you wish to manually deploy and manage ZenML in a Kubernetes cluster of your choice, ZenML also includes a Helm chart among its available deployment options. +The chart uses standard Kubernetes APIs and works on managed cloud clusters (EKS, GKE, AKS), enterprise platforms like Red Hat OpenShift and SUSE Rancher, and self-managed clusters on-premises or in your own cloud. + You can find the chart on this [ArtifactHub repository](https://artifacthub.io/packages/helm/zenml/zenml), along with the templates, default values and instructions on how to install it. Read on to find detailed explanations on prerequisites, configuration, and deployment scenarios. ## Prerequisites You'll need the following: -* A Kubernetes cluster +* A Kubernetes cluster (version 1.21 or higher recommended) * Optional, but recommended: a MySQL-compatible database reachable from the Kubernetes cluster (e.g. one of the managed databases offered by Google Cloud, AWS, or Azure). A MySQL server version of 8.0 or higher is required * the [Kubernetes client](https://kubernetes.io/docs/tasks/tools/#kubectl) already installed on your machine and configured to access your cluster * [Helm](https://helm.sh/docs/intro/install/) installed on your machine diff --git a/docs/book/getting-started/zenml-pro/deploy-control-plane-k8s.md b/docs/book/getting-started/zenml-pro/deploy-control-plane-k8s.md index e947cfd6438..2246a490a4d 100644 --- a/docs/book/getting-started/zenml-pro/deploy-control-plane-k8s.md +++ b/docs/book/getting-started/zenml-pro/deploy-control-plane-k8s.md @@ -17,6 +17,8 @@ layout: This guide provides step-by-step instructions for deploying ZenML Pro on Kubernetes using Helm charts. All components run within your infrastructure with zero external dependencies. +ZenML Pro deployments use standard Kubernetes APIs and work on managed cloud clusters (EKS, GKE, AKS), enterprise platforms like Red Hat OpenShift and SUSE Rancher, and self-managed clusters on-premises or in your own cloud. + ## Deployment Architecture All components run entirely within your Kubernetes cluster and infrastructure: diff --git a/docs/book/getting-started/zenml-pro/deploy-prerequisites.md b/docs/book/getting-started/zenml-pro/deploy-prerequisites.md index 58e52da73fe..ca93eed11c7 100644 --- a/docs/book/getting-started/zenml-pro/deploy-prerequisites.md +++ b/docs/book/getting-started/zenml-pro/deploy-prerequisites.md @@ -238,12 +238,14 @@ The Control Plane and Workspace Server components are completely independent fro | Infrastructure Type | Support Level | |---------------------|---------------| -| Kubernetes (managed or self-hosted, 1.24+) | ✅ Officially supported and documented | +| Kubernetes (1.24+) | ✅ Officially supported and documented | | Container-as-a-Service (ECS, Cloud Run, etc.) | ⚠️ Possible but not documented | | Serverless containers (Fargate, Lambda, etc.) | ⚠️ Possible but not documented | | Virtual machines with Docker (VMware, VirtualBox, etc.) | ⚠️ Possible but not documented | | Docker-compose | ✅ Can be provided upon request for local testing purposes | +These Helm-based deployments use standard Kubernetes APIs and work on managed cloud clusters (EKS, GKE, AKS), enterprise platforms like Red Hat OpenShift and SUSE Rancher, and self-managed clusters on-premises or in your own cloud. + {% hint style="warning" %} While ZenML Pro can theoretically run on any container orchestration platform, only Kubernetes deployments are officially fully supported and documented. If you require a different deployment target, please contact [cloud@zenml.io](mailto:cloud@zenml.io) to discuss your requirements. {% endhint %} diff --git a/docs/book/getting-started/zenml-pro/deploy-workspace-k8s.md b/docs/book/getting-started/zenml-pro/deploy-workspace-k8s.md index 64f292cbd81..0d82a6dd3fe 100644 --- a/docs/book/getting-started/zenml-pro/deploy-workspace-k8s.md +++ b/docs/book/getting-started/zenml-pro/deploy-workspace-k8s.md @@ -17,6 +17,8 @@ layout: This guide provides step-by-step instructions for deploying ZenML Pro workspaces on Kubernetes using Helm and enrolling them in the ZenML Pro control plane. +ZenML Pro workspace deployments use standard Kubernetes APIs and work on managed cloud clusters (EKS, GKE, AKS), enterprise platforms like Red Hat OpenShift and SUSE Rancher, and self-managed clusters on-premises or in your own cloud. + ## Prerequisites From 8f98065ba9806b3fd014b6c326881a6b90b2ecab Mon Sep 17 00:00:00 2001 From: hrushi2602-racr Date: Wed, 15 Jul 2026 11:41:02 +0530 Subject: [PATCH 3/5] WIP: Add hash-truncation to fix Vertex scheduler name limit (#2262) --- .../gcp/orchestrators/vertex_orchestrator.py | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/src/zenml/integrations/gcp/orchestrators/vertex_orchestrator.py b/src/zenml/integrations/gcp/orchestrators/vertex_orchestrator.py index b5aa67e63ee..6967f3d04b6 100644 --- a/src/zenml/integrations/gcp/orchestrators/vertex_orchestrator.py +++ b/src/zenml/integrations/gcp/orchestrators/vertex_orchestrator.py @@ -33,6 +33,7 @@ import re import types import urllib +import hashlib from typing import ( TYPE_CHECKING, Any, @@ -128,6 +129,24 @@ STEP_JOB_NAME_METADATA_KEY = "job_name" +def sanitize_vertex_job_name(pipeline_name: str, max_length: int = 64) -> str: + """ + Truncates a pipeline name to fit Vertex AI limits while ensuring uniqueness. + """ + if len(pipeline_name) <= max_length: + return pipeline_name + + full_hash = hashlib.md5(pipeline_name.encode('utf-8')).hexdigest() + + short_hash = full_hash[:8] + keep_length = max_length - len(short_hash) - 1 + + truncated_name = pipeline_name[:keep_length] + final_name = f"{truncated_name}-{short_hash}" + + return final_name + + def _clean_pipeline_name(pipeline_name: str) -> str: """Clean pipeline name to be a valid Vertex AI Pipeline name. @@ -529,7 +548,7 @@ def _create_dynamic_pipeline() -> Any: step_name_to_dynamic_component[step_name] = component @dsl.pipeline( # type: ignore[misc] - display_name=orchestrator_run_name, + display_name=sanitize_vertex_job_name(orchestrator_run_name), ) def dynamic_pipeline() -> None: """Dynamic pipeline.""" @@ -880,7 +899,7 @@ def _upload_and_run_pipeline( # Instantiate the Vertex AI Pipelines job run = aiplatform.PipelineJob( - display_name=pipeline_name, + display_name=sanitize_vertex_job_name(pipeline_name), template_path=pipeline_file_path, job_id=job_id, pipeline_root=self._pipeline_root, From 150f873107437af88dbe044d7d45b5a475eee13c Mon Sep 17 00:00:00 2001 From: hrushi2602-racr Date: Thu, 16 Jul 2026 11:45:27 +0530 Subject: [PATCH 4/5] Refactor orchestrator and vertex job names to use centralized string utility --- .../gcp/orchestrators/vertex_orchestrator.py | 32 ++++++++++--------- src/zenml/orchestrators/utils.py | 32 +++++++++---------- src/zenml/utils/string_utils.py | 26 +++++++++++++++ 3 files changed, 59 insertions(+), 31 deletions(-) diff --git a/src/zenml/integrations/gcp/orchestrators/vertex_orchestrator.py b/src/zenml/integrations/gcp/orchestrators/vertex_orchestrator.py index 6967f3d04b6..a7c8db96f5e 100644 --- a/src/zenml/integrations/gcp/orchestrators/vertex_orchestrator.py +++ b/src/zenml/integrations/gcp/orchestrators/vertex_orchestrator.py @@ -32,6 +32,7 @@ import os import re import types +import re import urllib import hashlib from typing import ( @@ -112,6 +113,7 @@ StepOperatorEntrypointConfiguration, ) from zenml.utils.io_utils import get_global_config_directory +from zenml.utils.string_utils import append_random_suffix if TYPE_CHECKING: from zenml.config.base_settings import BaseSettings @@ -129,22 +131,22 @@ STEP_JOB_NAME_METADATA_KEY = "job_name" -def sanitize_vertex_job_name(pipeline_name: str, max_length: int = 64) -> str: - """ - Truncates a pipeline name to fit Vertex AI limits while ensuring uniqueness. - """ - if len(pipeline_name) <= max_length: - return pipeline_name - - full_hash = hashlib.md5(pipeline_name.encode('utf-8')).hexdigest() +def sanitize_vertex_job_name(job_name: str) -> str: + """Sanitizes the Vertex AI job name to comply with GCP requirements.""" - short_hash = full_hash[:8] - keep_length = max_length - len(short_hash) - 1 - - truncated_name = pipeline_name[:keep_length] - final_name = f"{truncated_name}-{short_hash}" - - return final_name + job_name = job_name.lower() + job_name = job_name.replace("_", "-").replace(" ", "-") + job_name = re.sub(r'[^a-z0-9\-]', '', job_name) + + if not job_name or not job_name[0].isalpha(): + job_name = f"j-{job_name}" + + return append_random_suffix( + original_string=job_name, + suffix_length=5, + max_length=64, + separator="-" + ) def _clean_pipeline_name(pipeline_name: str) -> str: diff --git a/src/zenml/orchestrators/utils.py b/src/zenml/orchestrators/utils.py index 25f6c296967..72613f33cf6 100644 --- a/src/zenml/orchestrators/utils.py +++ b/src/zenml/orchestrators/utils.py @@ -35,6 +35,7 @@ from zenml.enums import APITokenType, AuthScheme, StackComponentType, StoreType from zenml.logger import get_logger from zenml.stack import StackComponent +from zenml.utils.string_utils import append_random_suffix logger = get_logger(__name__) @@ -64,24 +65,23 @@ def get_orchestrator_run_name( Returns: The orchestrator run name. """ - suffix_length = 32 - pipeline_name = f"{pipeline_name}_" + if max_length and max_length < 8: + raise ValueError( + "Maximum length for orchestrator run name must be 8 or above." + ) + suffix_length = 32 if max_length: - if max_length < 8: - raise ValueError( - "Maximum length for orchestrator run name must be 8 or above." - ) - - # Make sure we always have a certain suffix to guarantee no overlap - # with other runs - suffix_length = min(32, max(8, max_length - len(pipeline_name))) - pipeline_name = pipeline_name[: (max_length - suffix_length)] - - suffix = "".join(random.choices("0123456789abcdef", k=suffix_length)) - - return f"{pipeline_name}{suffix}" - + # The -1 accounts for the "_" separator added by the utility function + suffix_length = min(32, max(8, max_length - len(pipeline_name) - 1)) + + return append_random_suffix( + original_string=pipeline_name, + suffix_length=suffix_length, + max_length=max_length, + separator="_", + charset="0123456789abcdef" # <--- Ensures 100% backward compatibility + ) def is_setting_enabled( is_enabled_on_step: Optional[bool], diff --git a/src/zenml/utils/string_utils.py b/src/zenml/utils/string_utils.py index 3cee230e1e2..4f9f1b7963c 100644 --- a/src/zenml/utils/string_utils.py +++ b/src/zenml/utils/string_utils.py @@ -27,6 +27,32 @@ V = TypeVar("V", bound=Any) +def append_random_suffix( + original_string: str, + suffix_length: int, + max_length: Optional[int] = None, + separator: str = "-", + charset: str = string.ascii_lowercase + string.digits +) -> str: + """ + Appends a random suffix to a string, truncating the original if necessary. + """ + # Use the provided charset instead of hardcoding alphanumeric + suffix = ''.join(random.choices(charset, k=suffix_length)) + + if max_length is not None: + allowed_original_length = max_length - len(separator) - suffix_length + + if allowed_original_length > 0: + original_string = original_string[:allowed_original_length] + else: + return suffix[:max_length] + + if original_string: + return f"{original_string}{separator}{suffix}" + return suffix + + def get_human_readable_time(seconds: float) -> str: """Convert seconds into a human-readable string. From 4b433941c02823d9c3c72509875d0eac933c52ea Mon Sep 17 00:00:00 2001 From: hrushi2602-racr Date: Sat, 18 Jul 2026 12:50:04 +0530 Subject: [PATCH 5/5] minor changes requested --- .../gcp/orchestrators/vertex_orchestrator.py | 6 ++---- src/zenml/orchestrators/utils.py | 4 ++-- src/zenml/utils/string_utils.py | 16 ++++++++++++---- 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/zenml/integrations/gcp/orchestrators/vertex_orchestrator.py b/src/zenml/integrations/gcp/orchestrators/vertex_orchestrator.py index a7c8db96f5e..985baaa0d72 100644 --- a/src/zenml/integrations/gcp/orchestrators/vertex_orchestrator.py +++ b/src/zenml/integrations/gcp/orchestrators/vertex_orchestrator.py @@ -29,12 +29,11 @@ # permissions and limitations under the License. """Implementation of the VertexAI orchestrator.""" +import hashlib import os import re import types -import re import urllib -import hashlib from typing import ( TYPE_CHECKING, Any, @@ -133,10 +132,9 @@ def sanitize_vertex_job_name(job_name: str) -> str: """Sanitizes the Vertex AI job name to comply with GCP requirements.""" - job_name = job_name.lower() job_name = job_name.replace("_", "-").replace(" ", "-") - job_name = re.sub(r'[^a-z0-9\-]', '', job_name) + job_name = re.sub(r"[^a-z0-9\-]", "", job_name) if not job_name or not job_name[0].isalpha(): job_name = f"j-{job_name}" diff --git a/src/zenml/orchestrators/utils.py b/src/zenml/orchestrators/utils.py index 72613f33cf6..b159f20d745 100644 --- a/src/zenml/orchestrators/utils.py +++ b/src/zenml/orchestrators/utils.py @@ -79,8 +79,8 @@ def get_orchestrator_run_name( original_string=pipeline_name, suffix_length=suffix_length, max_length=max_length, - separator="_", - charset="0123456789abcdef" # <--- Ensures 100% backward compatibility + separator="", + charset="0123456789abcdef" ) def is_setting_enabled( diff --git a/src/zenml/utils/string_utils.py b/src/zenml/utils/string_utils.py index 4f9f1b7963c..1a3cc7e42a4 100644 --- a/src/zenml/utils/string_utils.py +++ b/src/zenml/utils/string_utils.py @@ -34,11 +34,19 @@ def append_random_suffix( separator: str = "-", charset: str = string.ascii_lowercase + string.digits ) -> str: + """Appends a random suffix to a string, truncating the original if necessary. + + Args: + original_string: The base string to modify. + suffix_length: The length of the random suffix to generate. + max_length: Maximum allowed length of the final merged string. + separator: The string used to join the original string and suffix. + charset: The pool of characters to use for generating the random suffix. + + Returns: + The merged string with the random suffix appended. """ - Appends a random suffix to a string, truncating the original if necessary. - """ - # Use the provided charset instead of hardcoding alphanumeric - suffix = ''.join(random.choices(charset, k=suffix_length)) + suffix = "".join(random.choices(charset, k=suffix_length)) if max_length is not None: allowed_original_length = max_length - len(separator) - suffix_length