Argo Workflows 4.0 is here!

This release brings a wave of usability, security and performance improvements that make running large‑scale pipelines easier than ever. Whether you’re orchestrating AI/ML workflows, scaling data pipelines, or driving CI/CD across many clusters, the new features in 4.0 give you the confidence to create and orchestrate workflows faster and safer.
Release Statistics
- 🚀 24 new features
- 🐞 122 fixes
- 👥 73 contributors total (including 37 new contributors)
Argo Workflows 4.0 Release Highlights
- Artifact drivers as plugins
- CLI improvements — including creating semaphores
- Full CRDs with validation
- Deprecated singular items (mutex, semaphore, schedule ).
General
- Artifact drivers as plugins — Write a gRPC server that acts as an artifact driver, ship it as a container image and plug it into Argo. Uploads and downloads can now target any repository you implement. A team effort from Alan Clucas, J.P. Zivalich, and Elliot Gunton (#5862)
- CRD validation rules — CEL‑based validation is added to the full CRDs, catching many errors before they reach the cluster. Limits are enforced to stay within the Kubernetes CEL budget (e.g., max 200 templates per workflow, max 500 parameters). This huge feature has been delivered by Alan Clucas and Mason Malone (#13503). For a detailed description of all the rules and constraints go to the Argo Workflows v4.0 release notes and documentation.
- Deprecate singular sync primitives — the singular mutex, semaphore and the CronWorkflowsschedule fields are removed; use the plural versions introduced in 3.6. By Alan Clucas (#14977)
- Name‑filter on archived workflows — A new nameFilter parameter (prefix | contains | exact) lets you search archived workflows the same way you do the active ones. Thank you Armin Friedl (#14069)
- Live update of total parallelism — Changing workflow-controller-configmap now takes effect immediately, no controller restart required. We owe this one to Shuangkun Tian (#14689) — much appreciated!
- Custom CA certificates for OIDC SSO — Configure self‑signed or private‑CA certificates inline or via a file path, enabling secure SSO connections to non‑public providers. Thanks to Bradford Wagner (#7198)!
- Write‑back informer disabled by default — Prevents unexpected controller behavior; 409 conflicts may increase slightly but overall stability improves. Shout outs go to Eduardo Rodrigues (#12352)
- Extended field‑selector support — metadata.name= and metadata.name!= are now accepted, giving you the same expressive power as native Kubernetes selectors. Miltiadis Alexis (#13468)
- Restart pods that fail before starting by Alan Clucas (#12572) Automatically restart pods that fail before starting for reasons like node eviction. This is safe to do even for non-idempotent workloads. You need to configure this in your workflow controller configmap for it to take effect.
- Context‑aware structured logging — Logs now carry workflow identifiers throughout the call stack, making troubleshooting far easier. Thank you Isitha Subasinghe (#11120)
- Feature documentation requirement — Every new feature must now have a .features/pending file describing its user‑visible impact. This streamlines release notes and blog generation. Added by Alan Clucas (#14155)
UI improvements
- CronWorkflow delete confirmation — The modal now warns that deleting a CronWorkflow will also delete the workflows it generated. Thank you minsun yun (#14679)
- Label query sync in WorkflowTemplates UI — URL query parameters (?label=key%3Dvalue) now stay in sync with the UI state, mirroring the behavior of the Workflows list. We owe it to Dohyeong Lee (#14807)
- “Name Not Equals” filter — Exclude workflows by name directly from the list view, complementing the existing exact‑match filter. Done by Miltiadis Alexis (#13468)
- Custom link target handling — Links defined with target: _blank automatically open in a new tab; target: _self stays in the same tab. Thanks to Shuangkun Tian (#13114)
- Faster pagination for archived workflows — Archive queries now use LIMIT‑based checks instead of full table scans, dramatically improving performance on large datasets. Good job Shuangkun Tian (#13948)
CLI improvements
- Create semaphore configmaps from the CLI — argo semaphore create configmap … lets you provision a ConfigMap‑backed semaphore without manual YAML. Thank you Darko Janjic (#14671)
- Create database‑backed semaphores from the CLI — A matching argo semaphore create db … command adds support for external storage backends. Darko Janjic (#14783) once more!
- argo convert command — Automatically migrates existing Workflows, CronWorkflows and (Cluster)WorkflowTemplates to the new v4.0 schema: schedules move to the schedules field, singular sync primitives become plural, and the command performs lint‑style checks as it rewrites the objects. Done by Alan Clucas (#14977)
Ready to try it out?
Grab the latest container images, update your controller ConfigMap and start experimenting with the new name‑filter, artifact‑driver plugins and custom CA support. Share your feedback on the Argo community Slack or open an issue on GitHub — the next stable release is shaped by your experience.
Happy workflow building!
<hr /><p>Argo-Workflows 4.0 was originally published in Argo Project on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>