github.com/projectsveltos/addon-controller
v1.14.0
#2329 most downloaded on Go modules
projectsveltos/addon-controller
What this package is like to depend on
Last release today
22 Aug 2026
Ships on a steady schedule
a new release about every 8 days
Rarely documented
notes for 10 of 89 stable releases
Nothing withdrawn
no release was ever pulled
3 years old
1061 releases · first in 2023
659 releases in the last 12 months
see the full history below
Release timeline
1061 releases · Jun 2023 to Aug 2026Releases
latest 60 of 1061-
v1.14.1-0.20260822142957-60c63580357722 Aug 2026 pre-releaseNothing published for this version
-
v1.14.1-0.20260820182323-a285255f78e320 Aug 2026 pre-releaseNothing published for this version
-
v1.14.020 Aug 2026Release notes
Open source →🚀 New Features
Job-Based Health Checks
ValidateHealthgainsJobCheck, a third check type alongside the existing Lua Script and CEL evaluation: point it at a Job manifest (viaJobRef, stored in a Secret or ConfigMap) and its Complete/Failed outcome becomes the check result, mutually exclusive with the other two. SinceValidateHealthis embedded by bothClusterProfile/ProfileandClusterPromotion, it's available toPreDeployChecks,ValidateHealths,PreDeleteChecks,PostDeleteChecks, andPostDelayHealthCheckswith no further changes.
PRs: libsveltos #654, sveltos #775Per-Resource Force Recreate
KustomizationRef.Force/PolicyRef.Forceapplied all-or-nothing to every resource in a reference. A single resource can now opt into force-recreate on its own by carrying theprojectsveltos.io/forceRecreateannotation, even when the reference-levelForceis false.
PR: libsveltos #655Gzip-Compressed and bsdtar-Produced OCI RemoteURL Layers
RemoteURL'soci://path had two gaps that caused real-world OCI artifacts to fail or get misread: a gzip-compressed tar layer failed the tar parse and fell through to the raw-blob path, so the compressed bytes were handed downstream as if they were YAML; and AppleDouble/PAX sidecar entries produced by tools like macOS'sbsdtar(e.g.._ns.yamlnext tons.yaml) were matched by extension alone and swept into the manifest as binary garbage. Both are now filtered and decompressed correctly.
PR: addon-controller #1911RemoteURL Tarball Support and Insecure-Connection Options
PolicyRefs'remoteURLover HTTP/HTTPS now accepts a tarball of multiple YAMsed or plain), not just a single raw document.RemoteURL/RemoteKustomizeURLalso gain two optional fields:plainHTTPto connect to an OCI registry over plain HTTP, andinsecureSkipTLSVerifyto skip server certificate verification, matching the trust optalready available for Helm OCI registries.
PRs: sveltos #780, addon-controller #1913⚙️ Improvements
Reduced CRD Watcher Memory Usage
WatchCustomResourceDefinitionkept every CustomResourceDefinition on the cluster in a local indexed cache for the life of the process, even though every caller only reads the GVK carried by the event that fires and none of them ever read the cache back. It's now backed by a Reflector that forwards each event straight to the handler and discards it, keeping the same list-then-watch/relist-on-error behavior without the resident memory. Most visible on sveltos-agent, in clusters with many CRDs installed.
PR: libsveltos #659Helm Drift Redeploy Scoped Per Chart
WithsyncMode: ContinuousWithDriftDetectiondeploying multiple Helm charts from one ClusterProfile, drift on a single resource used to mark the entire Helm feature for redeploy and unconditionally upgrade every chart, regardless of whether it had drifted or even changed. Redeploy now checks a per-chart flag first, so a chart that neither drifted nor changed is left alone.
PR: addon-controller #1915sveltos-agent: Reduced ConfigMap Memory Usage in Agentless Mode
In agentless mode, sveltos-agent's cache already scoped ConfigMaps by cluster namespace, but cached every ConfigMap in that namespace in full, including unrelated Helm-values or raw-YAML ConfigMaps deployed viapolicyRefs. It's now filtered by name to just the ConfigMap relevant to that cluster.🐞 Bug Fixes
addon-controller: DeploymentType Local Cleanup on a Self-Managed Cluster
When the managed cluster is a self-managed SveltosCluster (its remote client/config resolve back to the management cluster itself), the remote-cluster stale-resource cleanup pass scanned the management cluster with no per-ClusterSummary scoping, deleting same-GVK resources deployed there by other ClusterSummary instances viadeploymentType: Local. Every deployed resource is now tagged with its owning ClusterSummary, and both cleanup passes honor that tag, checking it only as a protective signal so pre-upgrade resources without it still fall through to the existing ownership checks.
PR: addon-controller #1892sveltos-agent: Watching GVKs From Other Clusters in Agentless Mode
The GVK-watch-building path for Reloaders, EventSources, and HealthChecks listed every instance in the management cluster instead of scoping to the managed cluster an agent instance is responsible for, so an agent could enable ConfigMap/Secret watches or start informers for kinds only relevant to a different cluster's policies. Now filtered against each cluster's own tracking ConfigMap, matching the scoping the reconcilers already applied.addon-controller: Reloader Not Cleaned Up on ClusterProfile Delete
Deleting, or unmatching, a Helm-based ClusterProfile withspec.reloader: trueleft itsReloaderinstance, and in agentless mode its per-cluster ConfigMap entry, behind indefinitely, referencing Deployments from a chart no longer deployed. The undeploy path was tagging the cleanup with the Kustomize feature instead of Helm, so both lookups silently missed. Resources- and Kustomize-based profiles were unaffected.
PR: addon-controller #1898healthcheck-manager: Stale ClusterHealthCheck Conditions and Notifications
Three compounding bugs keptStatus.Conditionsand notifications frozen even as the underlying HealthCheckReport kept updating:Spec.HealthCheckNamewas never populated on HealthCheckReport, the watch mapper relied on that same empty field and resolved to zero ClusterHealthChecks to reconcile, and re-evaluation was skipped for clusters alreadyProvisioned. Also fixes related Discord/Slack formatting bugs.
PR: healthcheck-manager #421addon-controller: Failed Helm Upgrade Could Silently Uninstall the Release
A failed Helm upgrade still leaves a release record behind, stamped with the version it tried, and failed, to reach. That made the install/upgrade decision misread the release as already handled, and after a couple more failures deleted it and reinstalled from scratch. The decision now checks whether a release exists at all instead of inferring it from version/status, and the install-retry threshold is now its own setting,HelmInstallOptions.RecoverAfterConsecutiveFailures(default 5), instead of being borrowed from Helm's revision-retentionMaxHistory.
PR: addon-controller #1912addon-controller: Four ClusterSummary Reconcile Bugs
A transient, non-NotFound error checking whether a cluster still exists was treated as "cluster present," which could stall a ClusterSummary inTerminatingindefinitely. One cluster's stale ResourceSummary cleanup could be blocked by an unrelated cluster's same-named ResourceSummary. Helm chart downloads viaLocateCharthad no timeout and could wedge a deployer worker permanently. And deletion didn't honordependsOnordering, letting a prerequisite and its dependent undeploy concurrently in any order.
PR: addon-controller #1918Expired Kubeconfig Tokens Not Evicted From Cache
An expired token only surfaces on first actual use of a cached client, not when the client is built, so classifier, event-manager, and healthcheck-manager kept retrying the same stale credentials indefinitely. The client is now evicted from cache on an auth error so the next cycle rebuilds it from a freshly read kubeconfig Secret.
PRs: event-manager #512, classifier #500, healthcheck-manager #424healthcheck-manager: Notification Events Truncated to Kubernetes' Limit
Notification Event messages could exceed the 1024-character limit Kubernetes enforces on Event messages; they're now truncated to fit.
PR: healthcheck-manager #425🔧 Maintenance
- All components advanced to Cluster API v1.14.0
- All components advanced to Go 1.26.6
-
v1.13.1-0.20260820053735-870e868edf2a20 Aug 2026 pre-releaseNothing published for this version
-
v1.13.1-0.20260818091951-5a6ad9faac5118 Aug 2026 pre-releaseNothing published for this version
-
v1.13.1-0.20260818073207-b9a1b7dbcf7418 Aug 2026 pre-releaseNothing published for this version
-
v1.13.1-0.20260818065050-12fb651fe5b318 Aug 2026 pre-releaseNothing published for this version
-
v1.13.1-0.20260817171632-08749c35e80b17 Aug 2026 pre-releaseNothing published for this version
-
v1.13.1-0.20260817110854-b626de63d87b17 Aug 2026 pre-releaseNothing published for this version
-
v1.13.1-0.20260816095912-6ae84e53f12b16 Aug 2026 pre-releaseNothing published for this version
-
v1.13.1-0.20260814183735-f2a5f15c93c214 Aug 2026 pre-releaseNothing published for this version
-
v1.13.1-0.20260814172540-3495f861dbe414 Aug 2026 pre-releaseNothing published for this version
-
v1.13.1-0.20260812135339-0b325c6ede0112 Aug 2026 pre-releaseNothing published for this version
-
v1.13.1-0.20260811190028-53f71f046de711 Aug 2026 pre-releaseNothing published for this version
-
v1.13.1-0.20260810174410-9401ba30a02010 Aug 2026 pre-releaseNothing published for this version
-
v1.13.1-0.20260809141842-4f9a59e496f909 Aug 2026 pre-releaseNothing published for this version
-
v1.13.1-0.20260808160304-217fb11e323b08 Aug 2026 pre-releaseNothing published for this version
-
v1.13.1-0.20260804100054-2a4037df2fd504 Aug 2026 pre-releaseNothing published for this version
-
v1.13.1-0.20260803055126-96fb9288b15d03 Aug 2026 pre-releaseNothing published for this version
-
v1.13.1-0.20260802055337-6fd3bb12b92f02 Aug 2026 pre-releaseNothing published for this version
-
v1.13.1-0.20260731174721-d9a0597ab3d531 Jul 2026 pre-releaseNothing published for this version
-
v1.13.1-0.20260730193605-57d66026fc7b30 Jul 2026 pre-releaseNothing published for this version
-
v1.13.1-0.20260729171902-1c8a15009a7029 Jul 2026 pre-releaseNothing published for this version
-
v1.13.1-0.20260729083503-f4521f59166229 Jul 2026 pre-releaseNothing published for this version
-
v1.13.1-0.20260729062408-334cb910853f29 Jul 2026 pre-releaseNothing published for this version
-
v1.13.1-0.20260728192522-7875a2f3e87028 Jul 2026 pre-releaseNothing published for this version
-
v1.13.1-0.20260728165052-9a54b97d72bc28 Jul 2026 pre-releaseNothing published for this version
-
v1.13.1-0.20260728113829-bdec5840aafa28 Jul 2026 pre-releaseNothing published for this version
-
v1.13.027 Jul 2026Release notes
Open source →🚀 New Features
Detect Outdated Helm Chart Versions
Sveltos now periodically checks whether a Helm chart deployed through a ClusterProfile or Profile has a newer version, or a newer same-minor patch, published upstream (HTTP repository or OCI registry). This is detection only: nothing about what gets deployed changes automatically. The result is recorded directly on the ClusterSummary that owns the release, alongside the chart identity already resolved at deploy time, so it's visible per cluster rather than blended across a fleet.latestVersion/latestPatchVersionare only populated when something newer genuinely exists;lastCheckedTimeadvances on every check regardless of outcome, distinguishing "confirmed up to date" from "not yet checked." A background process (main instance only, to avoid duplicate work across shards) groups deployments that are the same chart from the same source and checks each once; unreachable repositories/registries are skipped and logged rather than blocking the rest, and each check has a timeout. Metrics expose which deployments are behind and the health of the checker itself (last run, failure count). The check interval is configurable and can be disabled.
The dashboard surfaces this in three places: cluster list cards show an icon when a cluster has one or more releases with a newer version or patch available; the addon table on a cluster's detail page gains an "Update Available" column; and a new "Updates" button in the cluster heading queries mcp-server on demand and lists outdated releases with their current and latest available versions.
sveltosctl gets the CLI equivalent: a newshow helm-updatescommand displays, per cluster, every Helm release with a newer version or patch available, filterable by namespace, cluster name, and cluster type. Separately, MCP query failures (as opposed to a successful-but-empty response) now show a distinct "Unable to reach the MCP server" message across all MCP-backed dashboard panels, instead of being indistinguishable from "nothing to report."
PRs: addon-controller #1883, sveltos #772, ui-backend #177, dashboard #180, sveltosctl #442RemoteURL Support for KustomizationRefs
KustomizationRef.RemoteURLlets a KustomizationRef fetch its content directly from an HTTP/HTTPS endpoint or an OCI registryPolicyRef.RemoteURL. Unlike PolicyRef's OCI path, which flattens all YAML/JSON files across layers into one concatenated blob, this path preserves the fetched content's directory structure, since Kustomize needs it.Namespace/Name/Kindare now optional on KustomizationRef (required only whenRemoteURLis unset), and hashing/periodic re-fetch both cover RemoteURL-based refs the same way they already do for PolicyRef.
PR: addon-controller #1882Instantiate Path/Components Using TemplateResourceRefs
PolicyRef.PathandKustomizationRef.Path/Componentscan now be Go templates instantiated usingTemplateResourceRefsdata, not just cluster information. This lets a Kustomize overlay path or PolicyRef directory be selected dynamically based on resources read from the management cluster, instead of being fixed per profile.
PR: addon-controller #1868Helm Post-Render Strategies
HelmChart.OptionsgainsPostRenderStrategy, controlling whether Helm hooks are included whenPatches/PatchesFromare applied as a post-renderer during install/upgrade:combined(Helm's own default, hooks and templates sent together),separate(hooks and templates sent to the post-renderer in independent invocations, avoiding duplicate-resource errors from post-renderers that de-duplicate by resource identity), ornohooks(only regular templates are post-rendered, matching Helm 3's behavior). Only relevant whenPatchesorPatchesFromis set.
PR: addon-controller #1866EventTrigger Errors Surfaced in EventReport Status
When event-manager processes anEventReportand fails to instantiate the resultingClusterProfile(s), the error used to be visible only in event-manager's own logs. It's now recorded directly onEventReport.Status, so the failure is visible on the object itself instead of requiring log access.
PR: event-manager #502mcp-server: Event/Classifier Failure Reporting and Fleet-Wide Label Visibility
Event pipeline tracing now surfaces the error event-manager records when it fails to instantiate a ClusterProfile from an EventReport, so tracing an event-driven deployment tells you directly why no profile was created. Classifier pipeline tracing now also coversManagementClusterClassifier: tracing by name checks both kinds automatically, reporting cluster match, reconcile failures (bad Lua, resource collection errors), and label ownership/conflicts for either. A new fleet-wide tool lists every label currently being managed by anyClassifierorManagementClusterClassifieracross all (or a filtered subset of) managed clusters, along with label ownership and conflicts, mirroringsveltosctl show classifier-labels. Two diagnostic bugs were also fixed: installation health checks reporting agent verification failures as a blank reason, and blocked-dependency names being concatenated with no separator in deployment-error/dependency-analysis output.
The Sveltos MCP Server now exposes 22 tools in total.
PR: mcp-server #63Dashboard: Classifier View
The dashboard now displaysClassifierandManagementClusterClassifierinstances, each showing the number of labels it would set and the number of matching clusters. Selecting an instance lists all matching clusters, inline with the existing Events tab. An "Analyze Pipeline" action calls a new MCP tool that verifies a classifier/cluster pair end to end. The overview section also gains Classifier/ManagementClusterClassifier counts.
PRs: ui-backend #176, dashboard #179Metrics Across the Fleet
addon-controller, event-manager, and sveltoscluster-manager gain a consistent metrics model, replacing ad hoc or cardinality-unsafe gauges/histograms with properly labeled ones (cluster_type,cluster_namespace,cluster_name, and a*_namelabel per component's own resource): reconcile duration, reconcile outcome (success/failure with the owning profile/trigger), and last-success timestamp, plus component-specific additions:matching_clusters(addon-controller, event-manager),matching_resources(event-manager),connection_failuresandagent_last_heartbeat_timestamp_seconds(sveltoscluster-manager). sveltoscluster-manager also fixes two correctness bugs: a stale Kubernetes-version label combination was never removed after a cluster upgraded, and no metric was ever cleaned up when a cluster was deregistered. All components now correctly prefix metrics withprojectsveltos_and ship the auth-proxy RBAC needed to actually scrape/metrics. A Grafana dashboard is available covering the new metrics.
PRs: sveltoscluster-manager #372, event-manager #503, addon-controller #1872, sveltos #768Recover From Rejected Updates via Force Recreate
PolicyRef/KustomizationRefgain aForceoption. Server-side apply cannot always reconcile a manifest change: if a field was set by API server defaulting (or is owned by an unknown field manager) and the new manifest introduces a conflicting value, the apply is rejected and no patch can clear it (e.g. a Deployment moving tostrategy.type: Recreatewhile the API server's previously-defaultedrollingUpdateis still set). WhenForceis set and an apply is rejected with an error only a delete+recreate can resolve, the object is now deleted and recreated instead of surfacing the error. Never applies to CustomResourceDefinitions, since deleting one cascades to every instance of it, and conflicts (already handled by retry-in-place) are excluded.
PRs: libsveltos #642, addon-controller #1877
⚙️ Improvements
Shared, Cached Managed-Cluster Clients
The clusterrest.Config/mapper/discovery-client cache moves from addon-controller-local code intolib/clustercachein libsveltos, so addon-controller, classifier, healthcheck-manager, event-manager, and access-manager all share the same cache instead of each building a fresh client (with a live discovery round-trip) on every call, or managing their own cache independently. The shared cache also addsInvalidateOnAuthError, evicting a cluster's cached client (and the underlying workload-identity cache entry) as soon as the API server rejects credentials with 401/403, instead of waiting for TTL expiry or an explicit cluster delete.
PRs: libsveltos #644, classifier #489, healthcheck-manager #417, event-manager #505, addon-controller #1878, access-manager #352
🐞 Bug Fixes
Dashboard: Cluster Label Changes Not Reflected
SveltosClusterPredicateandClusterStatusPredicatemissed reacting tolabelschanges, so a cluster relabel wasn't always picked up.
PR: ui-backend #175classifier: Deleted Cluster Reports Treated as Failures
AClassifierReportleft over from a since-deleted cluster was treated as a hard failure on every reconcile.deployClassifiernow checks whether the report's cluster still exists before processing it and skips reports for clusters that are gone, and a new background sweep runs every 5 minutes to removeClassifierReports whose cluster no longer exists.
PR: classifier #487Missing FailureMessage on ClusterSummary Delete
When deleting aClusterSummaryfailed, the error wasn't reported inFailureMessage, leaving no visible reason for the failure.
PR: addon-controller #1873Helm Upgrade Force Option Silently No-Op
getHelmUpgradeClientunconditionally setServerSideApplyandForceConflictson every upgrade, a combination the Helm SDK rejects outright (cannot use force conflicts and force replace together), so an upgrade withforceset failed immediately instead of ever taking effect.ServerSideApply/ForceConflictsare now only enabled whenforceis not set; whenforceis set, both are disabled so the delete+recreate path can proceed as Helm expects.
PR: addon-controller #1876DryRun ClusterReports Left Unpopulated on Resource Errors
When a resource's dry-run apply failed (e.g. a StatefulSet update rejected with an immutable-field error), the failure surfaced correctly onClusterSummary.Status.FeatureSummaries[].FailureMessage, butClusterReport.Status.ResourceReportswas never written, since processing returned early on the deploy error before reaching the call that persists the report. The failing resource now gets aResourceReportwith anErroraction recording the failure (DryRun mode only), and whateverResourceReportswere gathered are persisted before the deploy error is returned, instead of the ClusterReport update being skipped entirely.
PR: addon-controller #1885
🔧 Maintenance
- All components advanced to Cluster API v1.13.4
- All components advanced to Go 1.26.5
-
v1.12.1-0.20260725141905-897dc6ad208325 Jul 2026 pre-releaseNothing published for this version
-
v1.12.1-0.20260725133657-e59303c2999f25 Jul 2026 pre-releaseNothing published for this version
-
v1.12.1-0.20260723141931-519e2a0c111a23 Jul 2026 pre-releaseNothing published for this version
-
v1.12.1-0.20260723092031-49d76669b5b723 Jul 2026 pre-releaseNothing published for this version
-
v1.12.1-0.20260722164414-b5eb6456758922 Jul 2026 pre-releaseNothing published for this version
-
v1.12.1-0.20260720182312-d5ae653d0bf620 Jul 2026 pre-releaseNothing published for this version
-
v1.12.1-0.20260718171453-4aa4d7f2e87c18 Jul 2026 pre-releaseNothing published for this version
-
v1.12.1-0.20260717133439-36e64010dabb17 Jul 2026 pre-releaseNothing published for this version
-
v1.12.1-0.20260715194559-ed22929f20c015 Jul 2026 pre-releaseNothing published for this version
-
v1.12.1-0.20260715075831-49c75de0460c15 Jul 2026 pre-releaseNothing published for this version
-
v1.12.1-0.20260714145351-c5f7a77383a414 Jul 2026 pre-releaseNothing published for this version
-
v1.12.1-0.20260711081606-c142e94a414211 Jul 2026 pre-releaseNothing published for this version
-
v1.12.1-0.20260709163341-30ee3b91f2d009 Jul 2026 pre-releaseNothing published for this version
-
v1.12.1-0.20260708085953-2ba59c798d1f08 Jul 2026 pre-releaseNothing published for this version
-
v1.12.1-0.20260707144907-9376932e7ed107 Jul 2026 pre-releaseNothing published for this version
-
v1.12.1-0.20260707121326-9f364497d28d07 Jul 2026 pre-releaseNothing published for this version
-
v1.12.1-0.20260706194857-5fea451cee6606 Jul 2026 pre-releaseNothing published for this version
-
v1.12.1-0.20260705140619-82ea3afd32e505 Jul 2026 pre-releaseNothing published for this version
-
v1.12.1-0.20260704143624-bc7a956d198d04 Jul 2026 pre-releaseNothing published for this version
-
v1.12.1-0.20260703180324-90733d75562503 Jul 2026 pre-releaseNothing published for this version
-
v1.12.003 Jul 2026Release notes
Open source →🚀 New Features
Supply Chain Verification for Helm Charts
Sveltos can now verify the integrity and origin of a Helm chart before deploying it, with two mechanisms targeting different chart sources. For charts pulled from OCI registries, Sveltos verifies the Cosign signature attached to the chart: a PublicKey provider checks it against a static key stored in a Kubernetes Secret, while a Keyless provider verifies the Fulcio-issued certificate against an expected OIDC issuer/subject and confirms the signing event was recorded in the Rekor transparency log, so the chart must have been signed by a specific pipeline in a specific repository. Both providers support the Sigstore Bundle v0.3 OCI referrer format and fall back to the legacy tag-based signature format. For charts pulled from HTTP repositories, Sveltos verifies the Helm.provprovenance file against a GPG keyring stored in a Secret. In both cases a failed verification blocks the deployment and the reason is recorded on the ClusterSummary status; charts without a verification field deploy as before.
PRs: addon-controller #1842, sveltos #753Workload Identity Support
SveltosCluster now supports authenticating to a managed cluster using the cloud provider's native workload identity instead of a stored kubeconfig Secret: AWS (IRSA / EKS Pod Identity), GCP (Workload Identity Federation), and Azure (Azure Workload Identity). When configured, Sveltos obtains short-lived credentials directly from the cloud provider, caching them in-process and refreshing proactively before expiry.sveltosctl register clusterhas been extended to configure workload identity when registering a cluster.
PRs: libsveltos #636, sveltosctl #434OCI Support in PolicyRef
RemoteURLin PolicyRef now acceptsoci://URLs in addition tohttp://andhttps://. Sveltos pulls the OCI artifact from the registry on each reconciliation at the configured interval, computes a content hash, and redeploys when the content changes, identical to the existing HTTP polling behavior. Authentication uses the samesecretReffield, supporting a bearer token, basic auth, or a custom CA certificate. Both a tar archive (the standard ORAS/Flux format) and a raw YAML/JSON blob are supported as artifact layouts.
PR: addon-controller #1851Classify Clusters from Management Cluster Resources
Classifierevaluates rules against resources inside each managed cluster, which leaves a gap when the classification signal instead lives on the management cluster itself, such as a Crossplane Composite Resource created when a team orders an addon on an Internal Developer Platform. A newManagementClusterClassifierresource closes that gap: it watches resources on the management cluster and runs a Lua function that receives the full set of matched resources and returns which managed clusters should be labeled. AManagementClusterClassifierReporttracks label ownership per classifier/cluster pair, giving the same conflict detection the existingClassifierprovides.
PR: classifier #482sveltosctl: show classifier-labels
A newsveltosctl show classifier-labelscommand displays the labels thatClassifierandManagementClusterClassifierinstances are actively managing on each cluster, along with the name of the instance that owns each label.
PR: sveltosctl #437
⚙️ Improvements
sveltos-agent: Reduced Memory Usage in Agentless Mode
In agentless mode, each sveltos-agent instance runs in the management cluster and is responsible for a single managed cluster, but its controller-runtime cache had no namespace or label restrictions, so every agent's informer held HealthCheckReport, EventReport, and ConfigMap objects for all managed clusters, causing O(N) memory per agent and O(N²) total. The cache is now scoped per agent: HealthCheckReport and EventReport are restricted with a label selector matching the agent's cluster name and type, and the per-cluster ConfigMap is restricted with a field selector on its name.
PR: sveltos-agent #493addon-controller: Condition-Based Wait for CRD Reapply
When a Helm chart is deployed withUpgradeCRDs: true, the controller used to sleep for 30 seconds after applying the chart's CRD files on every reconcile, regardless of whether the CRDs had actually changed, which was especially costly inContinuousWithDriftDetectionsync mode. The sleep is replaced with a poll against the destination cluster's CRD status, returning as soon as each CRD'sEstablishedandNamesAcceptedconditions are true, effectively zero delay when CRDs are already established and no more than necessary for a genuine upgrade.
PR: addon-controller #1844
🐞 Bug Fixes
sveltos-agent: Reloader Feature Broken in Agentless Mode
In agentless mode, sveltos-agent watched every Reloader instance in the management cluster instead of only the subset belonging to its own managed cluster, and watched ConfigMap/Secret objects in the management cluster instead of the managed cluster. Both are now scoped correctly.
PR: sveltos-agent #494addon-controller: Tier Change Not Triggering Takeover
Once a ClusterProfile was managing a chart, its tier was never compared against other conflicting profiles on later reconciliations, so raising a profile's tier above a challenger stuck inFailedNonRetriablenever woke the challenger up. Tier comparison now runs on every reconcile even for the profile currently managing the chart, so a higher-tier challenger correctly reclaims it.
PR: addon-controller #1837access-manager: Configurable Namespace
The Sveltos namespace was hardcoded toprojectsveltos; this closes a gap missed in the previous release by allowing it to be configurable, part of the broader effort to remove that limitation across components.
PR: access-manager #348classifier: Upgrade Blocked by Deleted Clusters
The migration init container that upgrades deprecatedClusterInfoentries intoClassifierReportobjects would crash-loop and block the upgrade entirely if a managed cluster had been deleted before the upgrade, since its namespace no longer existed. Entries whose cluster namespace is gone are now logged at debug level and skipped, while all other entries migrate normally.
PR: classifier #480sveltos-agent: Wait for Informer to Be Synced
In agentless mode, sveltos-agent can restart its internal controller-manager without a pod restart, for example when a managed cluster's kubeconfig token expires or a CRD change is detected. If an EventSource was evaluated in the window before the new informers had synced, it returned an empty result that was misread as zero matching resources, causing event-manager to delete previously created ClusterProfiles. An unsynced informer is now treated as a transient error and the evaluation is retried once the informers have synced.
PR: sveltos-agent #495🔧 Maintenance
- All components advanced to Cluster API v1.13.3
- All components advanced to Kubernetes client-go v1.36.2
-
v1.11.111 Jun 2026Release notes
Open source →🐞 Bug Fixes
ClusterProfile deletion no longer stalls (addon-controller #1829 (#1829))
Fixed a bug where deleting a ClusterProfile could get stuck indefinitely. The allMatchingProfilesProcessed check was not skipping other profiles that were themselves already being deleted, causing the controller to wait forever for work that would never complete.MCP compare-clusters tool reliability (mcp-server #57 (projectsveltos/mcp-server#57))
Corrected several issues in the compare_managed_clusters MCP tool. A not-found cluster now surfaces a clear error instead of silently returning an empty result. Additionally, when a cluster exists but its ClusterConfiguration has not yet been created (resources still deploying), the tool now returns a non-fatal warning in the output rather than returning misleading empty comparison data.Spurious pending-updates indicator in the UI (ui-backend #171 (projectsveltos/ui-backend#171))
Fixed incorrect cluster status reporting in the UI backend. A cluster was wrongly flagged as having pending updates when a profile matched it and that profile had declared dependencies. The status is now computed correctly in those cases. -
v1.11.1-0.20260702151515-af85fdd4ba1302 Jul 2026 pre-releaseNothing published for this version
-
v1.11.1-0.20260702052920-387435c5504202 Jul 2026 pre-releaseNothing published for this version
-
v1.11.1-0.20260630140759-a6e5a67b00aa30 Jun 2026 pre-releaseNothing published for this version
-
v1.11.1-0.20260629201647-3fddeaa3b37c29 Jun 2026 pre-releaseNothing published for this version
-
v1.11.1-0.20260629181227-1e4a4eb1653129 Jun 2026 pre-releaseNothing published for this version
-
v1.11.1-0.20260628163702-fbfc1eab2e8d28 Jun 2026 pre-releaseNothing published for this version
-
v1.11.1-0.20260626200601-2b98884743f826 Jun 2026 pre-releaseNothing published for this version
-
v1.11.1-0.20260626130458-827f503ff08d26 Jun 2026 pre-releaseNothing published for this version
-
v1.11.1-0.20260625155222-c0e87ba37f4925 Jun 2026 pre-releaseNothing published for this version