Kargo v1.10: Custom Steps, HTTP Notifications, and New Promotion Actions

Heba Eid

Kargo Custom Steps
Kargo Custom Steps

Kargo v1.10 adds Custom Steps, HTTP notifications, new promotion actions, shared resource replication, and major warehouse improvements for monorepo environments. This release focuses on making promotion pipelines easier to extend and operate, and more reliable at scale.

What is Kargo?

Kargo is an open-source continuous environment promotion tool built for GitOps-based application delivery. Where traditional CI/CD tools focus on building and deploying software, Kargo focuses on what happens after: how changes move reliably and safely across environments, clusters, and regions. 


Figure: Kargo: GitOps Universal Promotion Layer

Built on top of Kubernetes and designed to work natively with Argo CD and other deployment systems, Kargo gives platform teams fine-grained control over how Freight (versioned collections of artifacts) is promoted through Stages, with support for approvals, verification, and complex multi-step promotion pipelines. In short: if Argo CD is your deployment engine, Kargo is your environment promotion controller. 

Kargo Enterprise Features Available in v.1.10 

#1: Introducing Custom Steps

We’ve recently announced the release of Kargo Custom Steps: a container-based extensibility feature that enables platform and security teams to define promotion logic directly within their environment's promotion pipeline. Custom steps are packaged as OCI images and registered cluster-wide by a platform engineer. Once registered, any team in the cluster can reference a custom step by name in their promotion templates. Learn more about Custom Steps. 

#2: HTTP Sender for Notifications 

Kargo's notification system (MessageChannels) now supports an HTTP sender as an output option. This is a flexible escape hatch for teams that need to route notifications or other promotional data to systems not covered by existing integrations.

In practice, this means you can now hook Kargo notifications into virtually anything with an HTTP endpoint: internal messaging platforms, monitoring and observability systems, custom logging pipelines, incident management tools, or any homegrown system your organization uses. If it accepts an HTTP request, Kargo can now talk to it.

Kargo OSS Features Available in v1.10 

#3: New and Improved Promotion Steps

Promotion steps are the building blocks of Kargo promotion pipelines. Designed to be composable, these steps allow users to construct complex promotion processes and to perform the necessary actions to promote a piece of Freight to a Stage.  In the latest release v1.10.0, we introduce six new steps and improve several existing ones.

The New Promotion Steps include:

i) argocd-wait: Kargo's existing argocd-update step can already wait for application health, but it also triggers a sync. Sometimes that's not what you want. For example, when a separate deployment tool like Argo Rollouts is driving the actual rollout, and Kargo just needs to confirm it landed successfully before proceeding.

 The new argocd-wait step decouples health-gating from syncing, so you can get the safety of a health check without Kargo taking over the deployment.

ii) oci-push: For application teams running in large enterprise environments, it's common practice not to deploy images directly from an upstream registry. Instead, images get retagged, annotated, and mirrored into an internal or production registry as part of the release process. 

The new oci-push step makes this a first-class promotion action, handling single images, multi-arch image indexes, and OCI Helm charts with the same credential resolution you already use with oci-download.

iii) git-tag: Adds tagging as a native promotion action. This is a meaningful shift for teams whose workflows are tag-driven: rather than tagging at build time (before you know if something works), you can now tag after a successful promotion through a testing Stage. A tag becomes a verified signal, not just a label. Pair with git-push, which now supports pushing tags, to complete the workflow.

iv) fail: There are times when a promotion should be halted because a business rule says it shouldn’t proceed. This step unconditionally fails a promotion with a configurable message and, when combined with if: expressions, lets you encode business rules directly into your pipeline based on data from previous steps. 

v) set-freight-alias:  This step assigns a human-readable alias to a piece of freight during a promotion pipeline. When you're watching Freight move through Stages in the UI, a human-readable alias is far more useful than a hash. This is especially helpful in pre-processing Stages where you want to assign a meaningful name before downstream promotions begin.

vi) toml-parse / toml-update — Kargo already supports in-place parsing and updating of JSON and YAML files. TOML now joins that list, unlocking file manipulation for teams using kcl.mod or other TOML-based configuration formats that were previously left out.

Improvements to existing steps include:

vii) git-merge-pr: now supports a mergeMethod field, letting you choose between merge, squash, and rebase strategies when merging pull requests.

viii) git-push:  gets four configurable push integration policies — AlwaysRebase, RebaseOrMerge, RebaseOrFail, and AlwaysMerge — using GPG signature-trust analysis to decide how to integrate remote changes before pushing. A new optional committer field lets you specify a name, email, and signing key for merge commits.

 Heads up: the default policy is currently AlwaysRebase, but will change to RebaseOrMerge in v1.12.0. If you rely on unconditional rebase behavior, set the policy explicitly before upgrading.

ix) git-open-pr: now gracefully skips when there are no commits between source and target branches, rather than failing the promotion. This prevents unnecessary failures in multi-stage pipelines where some Stages have no effective diff to promote.

#4: Warehouse Improvements: Better Monorepo Performance

Warehouses are how Kargo discovers new Freight: monitoring Git repos, container registries, and Helm chart repositories. A recurring theme in this release is making Warehouses significantly more performant for teams using monorepos, where scale can turn routine operations into bottlenecks. Some of these warehouse improvements include: 

  • since Date Limiter for Git Subscriptions: Without this, Kargo's commit discovery had to scan the full history of a repo on every refresh. In a monorepo with hundreds of thousands of commits, that's a real problem. The new since field limits discovery to commits newer than a specified date, reducing the scope of those operations to a manageable size.

  • Webhook Path Filtering: In a monorepo with many Warehouses, a single push would wake all of them up, regardless of what changed. Now, GitHub push-event webhooks evaluate each Warehouse's includePaths/excludePaths against the actual files changed in the push before triggering a refresh. Only the Warehouses that care about those paths get refreshed, reducing unnecessary traffic at scale.

  • Chart Subscription TLS Skip: Chart subscriptions now support insecureSkipTLSVerify, matching the option already available on Git and image subscriptions. A straightforward but welcome unblock for teams running internal registries with self-signed certificates.

#5: Shared Resource Replication

One of the more powerful additions in this release. Kubernetes doesn't have a clean native way to share Secrets or ConfigMaps across namespaces; teams typically work around this with cross-namespace references or by duplicating resources. Kargo now solves this directly: annotate a resource in the shared resources namespace with kargo.akuity.io/replicate-to: "*" and it will be automatically replicated to all Project namespaces.

This opens up workflows that previously required awkward workarounds. A compelling example: Argo Rollouts AnalysisTemplate Jobs running inside Project namespaces can now consume shared credentials or configuration without any cross-namespace plumbing. Replicated resources are immutable and cleaned up automatically when the source is deleted or the annotation is removed.

#6: UI Improvements

Figure: Kargo UI

v1.10.0 brings a focused round of UI improvements to make the day-to-day experience of working in Kargo smoother and more intuitive.

  • "My Projects" Filter: The project list now defaults to showing only projects where you've been explicitly mapped via OIDC claims. This simplifies navigation for platform teams in large organizations. 

  • Page Titles: Browser tabs now reflect the current context (project, Stage, etc.), so you can tell your Kargo tabs apart at a glance.

  • Inline Promotion Step Errors: Errors now appear directly beneath the failed step, highlighted in red. Skipped steps are visually muted. No more hunting through a disconnected error banner.

  • Version-Matched CLI Downloads: The CLI download page now links to the version of Kargo currently running, not always to the "latest" version, preventing accidental version mismatches.

  • Git Commit Deep Links: Commit links now work correctly for self-hosted GitHub Enterprise and GitLab instances, not just github.com and gitlab.com.

  • Smooth Freight List Scrolling: The freight list now scrolls smoothly rather than jumping between positions.

  • Improved Status Colors: Non-failed, non-errored statuses now show a neutral color instead of potentially misleading indicators.

#7: Helm Chart, API, & DX Improvements

v1.10.0 brings a set of Helm chart and API improvements focused on stability, resilience, and making Kargo easier to consume as a tool.

  • priorityClassName Configuration: Assign scheduling priority to Kargo components to prevent eviction under resource pressure.

  • Startup Probe for Large Clusters: The API server now has a startup probe with a 5-minute window, preventing the pod from being killed before its initial cache sync completes.

  • REST API Client Module: The generated Go client for the Kargo REST API has been extracted into its own Go module with minimal dependencies, making it easier for external consumers to import without pulling in the full Kargo dependency tree.

  • Certificate Group Enforcement: The group field on cert-manager Certificate resources is now explicitly set, preventing renewal failures that could occur after approximately one year.

  • Swagger API Documentation: Auto-generated OpenAPI docs for the REST API are now embedded in the documentation site.

  • Port Numbers in OCI Image Refs: The oci-download step now accepts image references with explicit port numbers (e.g., registry.internal:5000/image:tag).

#8:  Notable Bug Fixes

Several production bugs have been resolved in this release, including: 

  • Argo CD App Status Responsiveness: A 10-second cooldown was causing promotions to stall in "Unknown" health state for minutes. The controller now trusts health immediately when Argo CD's reconciledAt timestamp confirms a fresh reconciliation. This one will be immediately noticeable.

  • Path Filtering on Merge Commits: Two related bugs in which includePaths/excludePaths filtering could silently skip changes introduced by merge commits. Fixed using --first-parent to correctly identify changed files.

  • Promotion Working Directory Cleanup: Temporary promotion directories are now cleaned up when a promotion reaches a terminal state or is deleted, preventing disk space leaks on the controller.

  • yaml-update Escaping: Dots in YAML key names can now be properly escaped using backslash notation (e.g., metadata.annotations.example\.com/version).

#9: Breaking Changes & Deprecations

Breaking: The optional second argument for freightMetadata (deprecated in v1.8.0) has been removed. Use dot notation (freightMetadata(freightName).keyName) or map access syntax (freightMetadata(freightName)['key-name']) instead.

Start using Kargo for environment promotions today 

v1.10.0 is a broad release that strengthens Kargo across the board, from Custom Steps and extensible promotion pipelines, to monorepo performance at scale, to enterprise-grade notification flexibility. Whatever stage you're at with Kargo, here's where to go next

Running Kargo in production? Upgrade to v1.10.0 and check out the full changelog and documentation for everything that's changed

Exploring Kargo for your organization? Take the Kargo Quick Start Guide (hands-on 1-hour course) or join the Kargo community on Discord to ask questions and see how other teams are building their pipelines.

Interested in Kargo Enterprise? Custom Steps, shared resource replication, HTTP notifications, and priority support are all part of the enterprise offering. Book a personalized demo, and we'll walk you through what it looks like for your environment.

Subscribe to the GitOps Newsletter to stay up to date as Kargo continues to evolve.



Ready to simplify delivery with Akuity?

Deploy, promote, and operate applications reliably, powered by OSS you trust and Intelligence you control.

Ready to simplify delivery with Akuity?

Deploy, promote, and operate applications reliably, powered by OSS you trust and Intelligence you control.

Ready to simplify delivery with Akuity?

Deploy, promote, and operate applications reliably, powered by OSS you trust and Intelligence you control.

Sign Up for Akuity Updates

Practical guidance on MTTR reduction, GitOps at scale, and safe automation, with product updates from the Argo CD and Kargo team.

@2026 Akuity Inc. All rights reserved.

Akuity Inc. 440 N. Wolfe Road, Sunnyvale, CA 94085-3869 US +1-510-771-7837

SOC2 Type 2 Compliant

Sign Up for Akuity Updates

Practical guidance on MTTR reduction, GitOps at scale, and safe automation, with product updates from the Argo CD and Kargo team.

@2026 Akuity Inc. All rights reserved.

Akuity Inc. 440 N. Wolfe Road, Sunnyvale, CA 94085-3869 US +1-510-771-7837

SOC2 Type 2 Compliant

Sign Up for Akuity Updates

Practical guidance on MTTR reduction, GitOps at scale, and safe automation, with product updates from the Argo CD and Kargo team.

@2026 Akuity Inc. All rights reserved.

Akuity Inc. 440 N. Wolfe Road, Sunnyvale, CA 94085-3869 US +1-510-771-7837

SOC2 Type 2 Compliant