Changelog¶
v1.5.0 — 3 November 2026¶
Upgrade from 1.4.0 with helm upgrade. The database migrates itself on first
start. On a large scan history this takes several minutes, and the agent pod
shows 0/1 until it finishes — see
Troubleshooting.
Changed — read before upgrading¶
-
The agent has a startup probe. Liveness starts only once the agent has answered for the first time, and the agent gets up to 15 minutes to do so. An upgrade updates the database before the agent listens, and on a large scan history that takes a while; before, liveness could restart the agent partway through, which undid the update and started it again.
-
One built-in scan runs at a time across the install. A second scan — another admin's, another namespace's, or a scheduled one — is refused with the scan already running (its namespace, who started it, when, and its progress), and the scan console attaches to that scan. A scheduled batch scans its namespaces one after another, waiting its turn rather than skipping. Any admin can cancel the running scan; the run records who did. To allow parallel scans, set
security.scanning.selfScan.maxConcurrentScans(default1; always1with the persistent CVE-database cache). See Helm values: Container scanning. - The scan diff is capped, with exact totals.
GET /security/scan/difflists the worst 500 new and the worst 500 fixed findings of each kind, and addsnew_totalandfixed_totalwith the exact counts. The History screen shows the totals.
New¶
- The Vulnerability Scanner's Findings tab opens on one row per CVE. Each
row shows the worst severity, the highest CVSS v3.x score with its
provenance, the fixing version or that there is none, and how many
workloads, images and sightings the CVE reaches; sort by severity, score,
fixable first or most workloads. Open a row for the per-workload sightings,
paged, under the same filters. Exclude on the row accepts the CVE for
every workload in the selected namespace, or everywhere when none is
selected; Exclude on a sighting still accepts it for that workload
alone. A segmented control switches between By CVE (the default),
By image and All sightings, and the choice is remembered per
browser.
GET /security/findingstakesgroup_by=cve(paged, sortable withsort=affected) andcve=<id>for one CVE's sightings; the export takesgroup_by=cvein every format. See Container Scanning. - Each CVSS score says which score it is. Hover a score in the
Vulnerability Scanner to see its CVSS version (3.0 or 3.1), its source (NVD,
Red Hat, GitHub and others) and its vector. Only what the scan report states
is shown: a score reported without a vector shows as version 3.x, and a
trivy-operator score names its source only when the operator is configured
to include each vendor's scores. The column is headed "CVSS v3.x"; a CVE
scored only in CVSS v2 or v4.0 shows an empty v3 cell. The CSV and JSON
exports gain
cvss_versionandcvss_sourcecolumns, and the findings API returnscvss_version,cvss_sourceandcvss_vectoron each vulnerability. Findings stored before this release gain them when their image is next scanned. - A CVSS column on workload rows. Deployments, StatefulSets, DaemonSets and
Jobs show the worst CVSS v3 score of a workload's images right after the
name, when a finished scan found a non-excluded critical or high finding in
them; the cell stays empty otherwise. Hover or click a badge for the counts,
the worst CVE with its fix and the score's version, source and vector, the
images, when the scan ran, and a link to the workload's findings. The
View control in the Workloads toolbar turns the column on or off, sets
Critical only or High and critical, and switches on CVSS column on
Pods (off by default). Read from the new
GET /security/workload-badges/{namespace}endpoint. - Choose your Workloads tabs and columns. The View control has three
sections. Tabs: switch any built-in kind off the strip (it stays one
click away in All Resources), reorder tabs within their group, and add a tab
for any kind you can list — a CronJob, an HPA, a PVC, an EndpointSlice, a
custom resource; an added tab lists exactly what
kubectl get <kind>prints. Columns, per kind: today's columns on or off plus extras such as Images, Labels, Controlled by and Selector; for an added kind, the API server's columns, with the-o wideones as extras. Badges: the CVSS column settings. Reset to default restores the view a new user sees. Saved per user. See Workloads. - Long names show in full on hover. A workload name, node or status reason cut short by its column shows its full text in a small card after a moment, and on keyboard focus; Escape closes it.
Changed¶
- The profile menu's "Users & access" item is now "Users & Groups", the same name as the Admin tab it opens.
- All Resources reads like kubectl. The table shows the columns
kubectl get <kind>prints for each kind, with the same values, so CRDs show their own printer columns. Right-click Describe shows whatkubectl describeprints, served by the newGET /resources/describe/{group}/{version}/{plural}/{name}endpoint. Describe never shows payload values: anything in adataorstringDatamap shows its size in bytes, ConfigMap values follow the same rules as the YAML view, and literal values of credential-named environment variables are masked. Secret stays not describable. Listing asks the cluster for its table view, which carries no Secret data. - Describe on the Workloads tabs is
kubectl describetoo. Pods, Deployments, StatefulSets, DaemonSets, Jobs, Services, Ingresses and ConfigMaps open the same drawer as All Resources, with the equivalent command and Copy. Clicking a pod row still opens its pod details, with Diagnose. Secrets offer no Describe. - Status labels are a soft box with a hexagon. The workload Status column, now on Pods, Deployments, StatefulSets, DaemonSets and Jobs, shows each status as a box with a hexagon and the word. Green is running or converging, amber needs a look, red needs action, grey is finished or scaled away; amber and red rows carry a short reason such as "12 restarts". A changing state shows a hexagon outline with one bright side travelling round it; a settled state is solid and still. A rollout past its progress deadline is now called Error. Hover, focus or click a status for the evidence. Elsewhere in the product each status shows a small hexagon with its word, or a quiet box with its word.
- The first Vulnerability Scanner page after an agent restart no longer waits on a cold cache. The default By CVE page is warmed in the background shortly after startup.
Fixed¶
- KubeManta now truly cannot create or change Secrets in its own namespace.
1.4.0 said so, but with
rbac.allowWrites=trueit did not hold: KubeManta's write permission on Secrets applied in every namespace, its own included, where the admin password and encryption key live. On a cluster-wide install the chart now adds aValidatingAdmissionPolicythat refuses KubeManta's own Secret changes there; withrbac.clusterWide=falsethe permission is no longer granted there; and on a cluster that cannot run the policy (or ahelm templaterender without the cluster's API list), KubeManta gets no Secret write permission at all. Nothing in KubeManta used it: TLS and other Secret edits go through Expert Mode, which is unaffected. - Refreshing Users & Groups no longer shows an error page. Reloading the browser on Admin → Users & Groups replaced the whole app with a "500 — Something went wrong" page; reloading again usually worked. Opening the tab by clicking was not affected.
- KubeManta starts on Cilium. With the default
security.blockImds, the agent could not resolve names or reach the Kubernetes API server on a Cilium cluster, so it never became ready. The egress policies now name in-cluster pods with a selector, and on Cilium the chart adds a CiliumNetworkPolicy allowing the API server on its ports only (security.cilium.apiServerPolicy, defaultauto; settrueforhelm templateor GitOps renders that cannot see the cluster). The air-gap policy and the Expert Mode egress allowlist get the same fix. See Troubleshooting. - The Vulnerability Scanner page and the CVE search no longer fail on large namespaces. On a namespace with about a million current findings, opening the page or searching for a CVE could answer 502 while the agent ran out of memory and restarted. The findings list, its totals, grouping by image, the posture grade, alert counts, a run's screen, scan history, the run diff and the CVE search are now computed in the agent's database a page at a time.
- Grouping by image is as fast as the other views on large namespaces.
- The scan diff no longer fails with a server error (
GET /security/scan/diffreturned 500 on namespaces scanned by the built-in scanner). - Exports stream. CSV, JSON, Markdown and HTML exports start at once and no
longer hold the whole result in memory.
GET /security/findingswithout apagereturns the same complete document, streamed. - The third-party licence inventory now ships in both images. The agent
and UI images carry it at
/licenses/THIRD_PARTY_LICENSES.md. - An alert rule that notifies every channel says so in the rule list too. A rule with no channel picked still delivers to every enabled channel. The rule list now marks each such rule with the number of enabled channels and their names, and shows the picked channels on every other rule. The rule form warns with the same count and names while no channel is picked.
- Prometheus history charts draw one at a time as they load. On the Metrics page each CPU and memory history chart now draws as soon as its own query returns.
Security¶
Third-party components in the agent image are updated to fix advisories published after 1.4.0:
authlib1.9.1 (CVE-2026-96760, a signature verification bypass in its JSON-serialised JWS reader) and its JOSE backendjoserfc1.7.7 (CVE-2026-119284). KubeManta checks OpenID Connect sign-in tokens with authlib, but reads them in the compact form, which does not go through the affected reader.pyasn10.6.5 (CVE-2026-119194, -119195, -119196 and -119197: crafted ASN.1 input can take quadratic CPU time to decode). pyasn1 is used on the LDAP sign-in path.fpdf22.8.9 (CVE-2026-114609 and CVE-2026-114610), used to render PDF reports.
v1.4.0 — 22 October 2026¶
Upgrade from 1.3.1 with helm upgrade. The database migrates itself on first
start. Read Changed — read before upgrading first: the browser terminal
runs as its own ServiceAccount, three terminal values are retired, and the
chart and the agent image must be upgraded together.
Changed — read before upgrading¶
- Upgrade the chart and the agent image together. The agent hands the
terminal its credentials on volumes that the 1.4.0 chart creates. A 1.4.0
chart running an older agent image leaves
kubectlin the terminal without a credential; a 1.4.0 agent image under an older chart reports the terminal as not configured. A standardhelm upgradeto the 1.4.0 chart does both; if you pinimage.tagor an image digest, move it to 1.4.0 in the same upgrade. terminal.proxySecret,terminal.signingKeyandterminal.signingPubkeyare removed, andkm-terminal-keygenis retired. The agent now generates the key that signs every terminal session in memory each time it starts, and the terminal is given only the public half; no Secret, file or environment variable holds it, and there is nothing to configure. Signing is always on (up to 1.3.1 it was opt-in, and the key was kept in a Secret the terminal's ownkubectlcould read). The chart no longer reads the three values, and the install notes warn if they are still set. After upgrading, remove them from your values file or GitOps repository, and delete the Secret earlier releases created, which Helm keeps and nothing uses any more:kubectl -n <namespace> delete secret <release>-terminal. Restarting the agent now rotates the terminal's credentials. See Helm values: Terminal.- The browser terminal can no longer read KubeManta's own Secrets.
kubectlin the terminal now runs as its own ServiceAccount (<release>-terminal) instead of KubeManta's, so the admin password, the encryption key and the other credentials KubeManta keeps in its namespace are out of the shell's reach. Kubernetes cannot grant "every namespace except one", so the terminal now reads Secrets only in namespaces you list in the newterminal.secretsNamespaces(read only); on a default installkubectl get secretin the terminal is refused. The product's own Secret views are unchanged, and listing a namespace for the terminal no longer narrows them. Listing KubeManta's own namespace, or one where KubeManta itself may not read Secrets, stops the install with an error. The chart adds the<release>-terminalServiceAccount and its ClusterRole and ClusterRoleBinding, a<release>-terminal-identityRole and RoleBinding (KubeManta may mint that account's token and nothing else), and per-namespace Roles where you listed namespaces; withterminal.clusterCredentials.enabled=falsenone of them is created. Upgrade the chart and the agent image together. See Security model. - Deprecated: the terminal inheriting
rbac.secretsNamespaces. For this release the terminal also still reads Secrets whererbac.secretsNamespaces(orrbac.tenantNamespaceswithrbac.clusterWide=false) names a namespace, so nobody loses access silently. The install notes name those namespaces; copy them intoterminal.secretsNamespacesbefore the next release removes the inheritance. - With
rbac.allowWrites=truethe terminal can no longer change anything in KubeManta's own namespace. Creating or exec-ing into a pod there reached the admin password. In scoped mode (rbac.clusterWide=false) the terminal's permissions there are now read-only; on a cluster-wide install the chart adds aValidatingAdmissionPolicy(<release>-terminal-guard, Kubernetes 1.30+) that refuses every change the terminal's ServiceAccount attempts there. On a cluster that cannot run the policy the terminal gets no write verbs at all and the install notes say so. KubeManta's own write features and Expert Mode are unaffected. - The legacy top-level
tenantNamespacesvalue no longer grants writes. Up to 1.3.1 every namespace listed there gave KubeManta pod delete and deployment patch, even on a read-only install. It is now an application-layer namespace list only; restart, scale and delete needrbac.allowWrites=true. For a boundary the API server enforces, userbac.clusterWide=falsewithrbac.tenantNamespaces. - AI is refused if its guardrail settings cannot be read. When the AI
guardrail configuration cannot be read and no read has succeeded in the last
five minutes, AI requests return 503 instead of running without the kill
switch, egress allow-list, cost caps and scope.
/readyzlists the condition underdegraded_controls. - The AI provider allow-list is now enforced on its own. Previously a provider unticked under Admin → AI → Guardrails → Allowed Providers was refused only when Local Only was also on. If you have unticked a provider you still use, tick it again before upgrading, or its AI requests will be refused. A list with nothing ticked still allows every provider.
- Local Only now refuses every provider you do not host yourself (anything but Ollama or a custom endpoint), even when those providers are ticked.
- Scraping
/metricsnow needs thescrape:readscope. If you scrape the agent with an API key holdingmetrics:read, create a key withscrape:readand use it instead —metrics:readno longer opens/metrics(see New, below). The scope picker under Account → API keys says which of the two is for Prometheus.
New¶
-
Prometheus can scrape KubeManta's own metrics. A new API-key scope,
scrape:read, opensGET /metricsand nothing else, and that endpoint accepts the key as a Bearer token — which is how Prometheus and a ServiceMonitor authenticate. The observability guide has the steps, a ServiceMonitor and a plain scrape config. -
The optional cert-manager subchart moves from v1.15.0 to v1.21.2 (
global.installCertManager, off by default; nothing changes if you did not enable it). If you did: cert-manager recommends upgrading one minor version at a time, v1.21 is tested on Kubernetes 1.33-1.36, and since v1.18 a Certificate withoutprivateKey.rotationPolicygets a new private key on each renewal. If you setcert-manager.installCRDsyourself, replace it withcert-manager.crds.enabled=true(the two are refused together). -
Azure OpenAI accepts the deployment URL the Azure portal shows. Give
https://<resource>.openai.azure.com/openai/deployments/<deployment>/chat/completions?api-version=...(or the deployment URL without/chat/completions) as the base URL: the deployment andapi-versionare read from it (2024-10-21when it has none), and the key is sent as Azure expects. The v1 URL (…/openai/v1/, with the deployment name as the model) works as before. On anapi-versionolder than2024-09-01, token usage is estimated rather than reported by Azure.
Added¶
diagnostics.loopDebug(defaulttrue) turns the agent's event-loop diagnostics off from your values file instead ofkubectl set env, so the choice survives upgrades and GitOps reconciles.license.reportNodeCount(defaulttrue): set it tofalseto stop the licensing heartbeat reporting the node count, from your values file instead ofkubectl set env LICENSE_METER_ENABLED=false.expertMode.networkPolicy.egress.*(off by default): limits where the expert-exec component may connect to — the Kubernetes API server, cluster DNS, HTTPS outside your network, and the ranges you list. Without it expert-exec accepts connections only from the agent but may connect anywhere the rest of KubeManta can. See Helm values: Expert Mode before enabling it.GET /alertstakes?limit=for its alert history: 500 entries by default, up to 5,000.
Improved¶
- First sign-in goes straight to the welcome. The product-intro video is gone, along with its "Watch the intro" button on the Documentation page. New users see one welcome screen (the first admin of a fresh install sees the setup instead), and the getting-started tour is still on offer there and on the Documentation page.
- The alert history is one durable log.
GET /alertsused to serve an in-memory list that a restart emptied; itshistorynow reads the same log as the Alerts tab, newest first, within the retention window. Clearing it from the Alerts tab,DELETE /alerts/historyorDELETE /alerts/firingsclears that one list everywhere, Activity and incident reports included. The old separate history table is folded into the log on first start. - Audit records survive write bursts. A busy database no longer drops
audit rows: the writer waits longer for the lock and retries before writing
anything after them, keeping the hash chain in order. A row that is still
lost is counted —
audit_writer(rows_lost,access_rows_shed,write_retries) appears in/readyzwhen any row was lost or shed since start, and always in/kubemanta/status. - The event-loop stall warning names what blocked the loop
(
blocked by: …), or says why it cannot. - Container scanning shows a stopped trivy-operator honestly. Its reports stay visible with the age of the newest one, and a failed status check reads "could not be checked" instead of counting the operator as running or gone.
- One navigation path: the retired Mind Graph and Cluster Details pages can no longer be reached by shortcut or link, and links that pointed at them open the Cluster Map instead. The unfinished "Cloud Metrics" bandwidth view and its endpoint are removed; bandwidth from Prometheus or the kubelets is unchanged.
- Every confirmation uses the same dialog, and actions that fail now say so instead of failing silently.
Security¶
- The PHP vulnerabilities CVE-2026-109618 and CVE-2026-109619 ("PHP2Shell")
do not affect KubeManta. No KubeManta image contains PHP or PHP code. The
agent image's bundled
k9sincludesphpserialize, a Go library that reads PHP's data format; it is not PHP and is not affected, though a scanner may list it by name. - Enforcing Pod Security
restrictedis now a documented install step. Every KubeManta pod already met the profile, but the chart does not own its namespace, so nothing enforced it. The install guide and wizard now label the namespace, andhelm installprints the command when the namespace has nopod-security.kubernetes.io/enforcelabel. - The air-gap mirror list now includes cert-manager's five images, so an air-gapped install that enables the cert-manager subchart no longer fails to pull them.
- Two components of the web interface are updated to fix high-severity
advisories:
source-map-js1.2.2 (GHSA-68fv-2mgg-jv7q, a denial of service) andsharp0.35.5 (GHSA-wq5f-xc86-pv6w, in its bundled image library). - The YAML editor is updated to Monaco 0.57, whose bundled DOMPurify fixes two cross-site scripting advisories, and its HTML sanitizer to DOMPurify 3.4.17, which fixes a critical sanitizer bypass (GHSA-cg2g-xh64-v4q7). YAML completion and validation work as before.
- The web interface is updated to Next.js 16.4.2, which fixes two critical remote code execution advisories (GHSA-2464-fhr4-w9xw, GHSA-673q-mjm6-r5xr) and a denial of service (GHSA-p3m5-59mp-jv5r).
npmin the browser terminal is updated to 11.21.0, which fixes high-severity advisories in its bundledtar,ip-addressandbrace-expansion.- The agent's CA bundle drops a root certificate whose intermediates were compromised (certifi 2026.10.19), and the image library used for PDF reports is updated to Pillow 13.0.0, which fixes eight image-parsing advisories.
- The UI server's proxy dependency is updated to fix a high-severity redirect advisory (follow-redirects 1.16.1).
- A release is now published only after the full test suite, including the dependency security audit, has passed for the exact build being released.
- Terminal sessions are always signed, with a key that never leaves the agent's memory (see Changed — read before upgrading). Up to 1.3.1 a terminal user could read what was needed to open an unrecorded shell, attach to another user's session or read another user's captured commands.
- KubeManta can no longer create, change or delete Secrets in its own namespace, and opening a shell in a pod in its own namespace is refused even with system namespaces shown. Nothing in the product used either.
- The web interface's Content Security Policy no longer allows inline or evaluated scripts: each page load carries its own nonce, and frames are allowed only from the Grafana URL you configured. After changing the Grafana URL, reload the page; a Grafana that redirects its frame to a sign-in page on another origin is refused. Embedded Grafana dashboards are sandboxed and cannot navigate the KubeManta tab — serve Grafana from its own origin.
- Signing up for Free on kubemanta.com no longer returns the licence key in the response; it is always e-mailed, and every accepted signup gets the same response.
Fixed¶
- Opening an application stack whose workloads had been deleted showed an error page ("HTTP 500") instead of the stack. Deleted workloads are now listed in the stack as missing.
- The browser terminal no longer reports "connection failed" in red while it is still starting. It shows "Connecting to your terminal…" while it retries, and a Retry button if it cannot connect.
- The browser terminal could refuse to reconnect to its own session when requests reached KubeManta from changing addresses, for example on AKS, where they arrive from whichever node routed them. A session now belongs to the signed-in user, not to an address.
- YAML completion and schema validation in the editor now work; the editor never started its YAML service.
- Deleting a workload from the Cluster Map pop-out failed on every click.
- Deleting or switching off an alert rule that the server refused showed it as deleted or switched off while it kept firing; the rule now comes back with an error.
- Pressing Escape in a confirmation opened over another dialog closed both.
- Admin → TLS reports a
tls.crtthat is not a certificate as an error instead of a certificate with no expiry.
Fixed — licensing¶
- Switching on single sign-on always needs Enterprise now. Two paths could switch an SSO sign-in method on without it: adding a second method to SSO that was already on, and importing a configuration file with SSO on. Both now follow the same rule as the SSO settings form — on an install without Enterprise, imported SSO settings arrive switched off (noted in the audit entry for the import). If a licence lapses, sign-in methods that are already on keep working, and you can still edit them or turn SSO off.
- A lapsed licence no longer blocks keeping a live SAML sign-in working. Refreshing the identity provider's metadata (needed when it rotates its signing certificate) and rotating KubeManta's SP certificate returned 402 after an Enterprise lapse, so an IdP certificate rotation broke SSO sign-in with no way to repair it short of renewing. Both now work while SAML is on; preparing SAML that is not on yet still needs Enterprise.
- The published feature matrix now lists exactly what is paid. The settings screens for alert integrations, ticketing, Slack inbound, cloud credentials, risk acceptance, SSO and AI guardrails were listed as paid because their paid action was: reading them has always been free, and only that action (switching an integration on, setting an expiry, changing the AI egress list) returns 402. Local user accounts were listed as Enterprise; they are available on every plan. The SSO sign-in pages were listed as gated; the gate is on switching SSO on, which is why a lapse never locks anyone out.
- The feature matrix no longer sells AI features Enterprise does not gate. "AI guardrails & egress control" is now "AI egress governance": the Enterprise part is changing the AI egress allow-list. Copilot session export, cross-user session governance and a retention policy were listed under it, and none is part of the plan; every other AI guardrail, including prompt-audit retention, is available on every plan, as it always was.
- A lapsed install can remove its stored cloud credentials. Setting them
needs Pro, and the only way to remove one was the same paid save, so an
install whose licence lapsed kept an AWS, GCP or Azure secret it could
neither use nor delete.
DELETE /admin/cloud/credentials(optionally?provider=aws|gcp|azure) removes them on every plan and is audited. - Importing a configuration file follows the licence for every paid setting, not only SSO. A file exported from a paid install could switch on login-page branding, a changed AI egress allow-list, Pro alert destinations (PagerDuty, Datadog, CloudWatch, webhook), AI diagnosis of alerts, incident ticketing or Slack inbound on an install without that plan. Each now follows the same rule as its settings screen: the rest of the file imports, and what the licence does not cover arrives switched off (branding and the egress list are left as they were). Check file lists each one before you import, the result says it again, and the audit entry records it.
- Saving alert integrations on a lapsed install no longer needs a Pro destination switched off first. A PagerDuty or webhook destination that was already on (including one set by Helm values) made every save of the Integrations form return 402, even a Slack edit. Only switching a Pro destination on needs Pro now.
- Saving the AI guardrails no longer returns 402 when the egress allow-list is unchanged. The egress section was compared as sent rather than as enforced, so a save that restated the allow-list in force (for example with only some of its fields) could be refused without Enterprise.
v1.3.1 — 6 October 2026¶
Upgrade from 1.3.0 with a standard helm upgrade. No manual migration is
needed.
New¶
- Product intro for first-time users. Replay it any time from Documentation.
- Air-gapped installs: the chart now includes a tool that copies every image into your own registry, or exports them to one file you import on the sealed side, and writes the values file for the install. See Air-gapped install.
Improved¶
- Metrics is one page. Each section appears once, drawn from Prometheus when you have connected it and from KubeManta's built-in metrics otherwise.
- Network bandwidth lives on the Network page, and works without Prometheus.
- One alert history on the Alerts tab, holding everything that fired, including built-in alerts and alerts from Alertmanager. It replaces the separate Firings list under Rules. Clearing it now asks for confirmation.
- Less repetition: Overview, Workloads, Alerts and Security show each piece of information once.
- Dependency updates, including security fixes.
Fixed¶
- An AI provider key saved in Admin → AI was not used by the AI panel, YAML assist or conversation summaries.
- Opening KubeManta in a new browser could clear the saved AI provider key.
- Applications, Helm releases and parts of the vulnerability scanner showed namespaces outside the allowed list.
- The activity log could report a broken audit chain after a maintenance task.
- Admin sub-pages (Groups, OAuth clients, AI, Observability) keep their address for links, refresh and Back.
- The incident timeline shows changes as readable fields instead of raw data.
- A new alert rule with no channel selected now shows which channels it will notify.
- Scans and the guided Prometheus can pull from a private registry that needs credentials.
v1.3.0 — 2 October 2026¶
Upgrade from 1.2.0 with a standard helm upgrade. No manual migration is
needed. Read Upgrade notes first.
New¶
- Incidents are tracked from start to finish, with acknowledgement, recovery time, a timeline report and a Markdown postmortem export.
- Response metrics on the Overview: time to acknowledge, time to first AI hypothesis, and recoveries over the last 30 days.
- AI-drafted postmortems (Pro).
- Jira and Trello triage (Pro): one ticket or card per incident.
- SLOs with error budgets and burn-rate alerts.
- Slack (Pro): ask the AI questions and approve suggested actions from Slack.
- Developer role (Pro and Enterprise): restart, scale and open a shell, without admin rights.
- Security posture panel, showing what KubeManta is permitted to do in your cluster.
- Configuration export and import, encrypted, for moving or reinstalling.
- First-run setup wizard and an OAuth clients screen.
- Workload rightsizing: requested resources compared with actual use.
- Crash-log capture (off by default): keeps the log of a container that restarted.
- Terminal option without cluster credentials.
- Alert rules for a single workload, and alerts now include the pod's recent history.
- GitOps upgrades with Argo CD and Flux are supported.
- TLS option for exposing KubeManta directly on a load balancer.
Improved¶
- The vulnerability overview loads much faster.
- Restarts and upgrades of KubeManta complete faster.
- The Overview no longer treats an old, recovered out-of-memory kill as a crash.
- Metrics charts are more accurate on clusters that collect the same metrics twice.
- Help links open the documentation for the version you are running.
- Dependency updates, including security fixes.
Upgrade notes¶
- Viewers can no longer list Secret names. Use an admin account for this.
- API requests without a session now return
401instead of redirecting to the login page. - Asking questions and approving actions from Slack requires Pro. Sending alerts to Slack stays free.
v1.2.0 — 12 September 2026¶
Upgrade from 1.1.1 is a standard helm upgrade; the database migrates itself on
first start.
This is the container-scanning release: scanning now handles a real namespace image by image, keeps its evidence when it fails, and never reports a clean result it did not earn. Alongside it, API keys gain scopes, the Applications tab is redesigned, and Telegram and Slack join alerting.
Two changes affect an install that sets nothing: API keys minted before 1.2.0 are revoked on upgrade and must be re-minted with scopes (see Upgrade notes), and basic alerting and the MCP server are now Free on every tier.
Container scanning¶
- Scans run image by image, so memory is bounded by the largest image rather than the whole namespace — a large namespace no longer gets the scan killed.
- Findings are saved as each image finishes; an interrupted run keeps what it scanned.
- A failed scan keeps a readable reason for the failure instead of disappearing.
- Private registries are scanned, using the cluster's own pull credentials.
- Only images whose digest changed are rescanned.
- Scanning a blocklisted namespace is refused with an explanation, instead of returning an empty result that reads as "all clean".
- Search a CVE across every scan, with per-image outcomes.
- Vulnerability totals count distinct (image, CVE) pairs — one CVE to fix, not one per workload it appears in.
- The vulnerability overview loads roughly three times faster on a large cluster.
API key scopes¶
- Every key carries scopes, chosen at mint, shown on the key, and enforced on every route. A route with no scope mapping is reachable by no key.
- Keys minted before 1.2.0 are revoked by the upgrade (see Upgrade notes).
Applications, alerting and chat¶
- The Applications tab is an explorer: your saved stacks as cards with status and composition, the stacks KubeManta found in your cluster beside them, and a two-pane detail view with a fast navigator you can filter and step with the keys.
- An application's CPU and memory are charted over a window you choose, and say so when there is no data yet rather than drawing a flat line at zero.
- Telegram joins Slack and email as an alert destination.
- Alert rules are Free and unlimited, including editing and deleting, with Slack, Telegram and email delivery. Integrations, firing history and auto-investigation remain Pro.
- Background tasks have a tray, so a scan that died no longer looks like one still running.
Resources, YAML and network¶
- Describe and View YAML work for any kind the cluster serves (Secret stays undescribable).
- Edit YAML returns a clean, editable manifest instead of a truncated live dump.
- YAML validation runs in every editor.
- The network policy view is a grouped, searchable table that shows whether the cluster's CNI actually enforces each policy.
- An in-product API reference, generated from the running app.
Changed¶
- Basic alerting and the MCP server are Free on every tier.
- The update notifier is off by default, so a default install makes no outbound version call; in air-gap mode it is refused outright. Security advisories are announced out of band.
- Observability settings are split into Prometheus, Alertmanager and Grafana.
- Activity filters survive a reload and say when they are on.
- Workloads sort by CPU and memory, and a pod with no measurement never sorts as idle.
- Notifications appear top-right and can be swiped away.
Fixed¶
- Telegram's Test button reported the integration as unknown while real alerts to Telegram arrived fine.
- A finished scan no longer hides the namespace picker.
- A scan that "completed with errors" now says which images failed and why.
- The running-scan banner names the namespace being scanned.
- A demoted admin loses admin surfaces on the next request, without signing out.
- Being signed out says why — expiry, revocation and a restart no longer look identical.
- The API key shown once at mint stays on screen, with a close button.
- Terminal commands are recorded when submitted, so a command that never returns is still audited.
Security¶
- An AI-proposed write is re-checked against the caller's role, so a non-admin cannot apply one.
- The pod exec terminal requires exec permission (
getandcreateonpods/exec), not just read access. - An SSO session stays bound to the account it authenticated as, and one LDAP directory account maps to exactly one user however the name was typed.
- The AI provider key is no longer stored in the browser.
- CSV and spreadsheet exports neutralise formulas.
- AppArmor confinement uses the field current Kubernetes supports, so it applies on modern clusters.
Upgrade notes¶
- API keys minted before 1.2.0 are revoked on upgrade and must be re-minted with scopes in Account → API keys. Re-mint before upgrading anything that depends on a key.
- Scanning a blocklisted namespace now returns an error where it returned an empty result; automation that treats any non-200 as a failure will see this.
rbac.readSecretsstill controls secret reads. The scanner takes pull credentials by reference and no longer carries a cluster-wide secret reader.- If you pinned image tags, the scanner and expert-exec images move with the release as usual.
v1.1.1 — 20 August 2026¶
A patch release, but not a small one: it corrects three defects that let a removed permission keep working, and a terminal failure that only appeared on busy clusters. Upgrade if you use roles, groups or the browser terminal.
helm upgrade kubemanta oci://registry.kubemanta.com/kubemanta/charts/stable/kubemanta \
--version 1.1.1 -n kubemanta-system --reset-then-reuse-values
Security¶
- Demoting an admin now takes effect immediately. A user demoted to viewer kept browser-terminal access and admin-level AI treatment until their session ended.
- A role change is reflected on the next request, not the next sign-in. The UI gated on the role captured at sign-in, so a promotion or demotion appeared to do nothing until the user signed out and back in.
- An unrecognised role is no longer treated as admin. It now grants nothing.
- Erasing a user removes their group memberships with them. They could previously outlive the account and keep granting access through a group.
Fixed¶
- The browser terminal could fail to open a shell on a busy node. The process limit it enforced was counted across the whole node rather than per session, so on a node already running many workloads the shell could not start at all.
- Built-in metrics collection failed on some clusters because the scrape looked for its credential under the wrong name. Network bandwidth is now collected by default.
- The update banner no longer claims "Up to date" when it cannot reach the version service. It says nothing rather than something untrue.
- Capacity is shown as donuts with a top-10 list and sortable, paged storage; an oversized reference line no longer flattens the trend it was meant to give context to; the topology canvas renders with its intended styling and no overlapping labels.
- Several Admin fixes: aligned Groups, a trimmed account menu, a more compact admin strip.
Added¶
- Admin → Groups. See the groups your identity provider actually sends, and decide what each one grants. Group membership is replaced at every sign-in, so removing someone at the IdP removes their access here.
- Account → API keys. Manage your own keys from your account, where the product already pointed you.
- Applications match a family of labels, with control over whether new members join automatically.
- The real client IP is preserved (
service.externalTrafficPolicy), so access rules and the activity log record the actual source address rather than a node's. Revoke all sessions moved to Admin → Access Control.
Changed¶
- A default install no longer contacts
api.kubemanta.com. The update check is off unless you turn it on.
v1.1.0 — 18 August 2026¶
Upgrading from 1.0.0 is a standard helm upgrade — no manual migration. Read
Breaking and Changed before you upgrade.
helm upgrade kubemanta oci://registry.kubemanta.com/kubemanta/charts/stable/kubemanta \
--version 1.1.0 -n kubemanta-system --reset-then-reuse-values
Breaking¶
- Shared password and shared API key removed. Sign in with per-user accounts; the
adminaccount is seeded at install fromsecurity.adminPassword. Automation using the old shared API key must switch to a per-user API key (Admin → Users). - Pricing is per admin seat; node limits removed. Viewers are free and unlimited. A lapsed paid licence degrades to Free (read-only keeps working) — it never locks the cluster.
sso.local_login=offnow fully disables password login. Recovery is a pod-side command (python3 -m app.recover_admin), not a UI toggle.
Changed (defaults)¶
rbac.readSecretsnow defaults to true (Secret read on by default). Setfalsefor a regulated install, or scope withrbac.secretsNamespaces. Secret write still ridesrbac.allowWrites; delete is never granted.security.scanning.enablednow defaults to true — container scanning is read-only (read your trivy-operator reports; let an admin trigger a scan), so the Security tab works on a fresh install. Setfalseto turn it off, which withholds the reader permissions and refuses the built-in self-scan. The write flags (rbac.allowWrites,expertMode.enabled) stay off by default. On upgrade, use--reset-then-reuse-valuesor-f values.yamlto pick up the new default; plain--reuse-valueskeeps your stored value.- Terminal memory is the container cgroup limit (
terminal.resources.limits.memory, default 8Gi); the per-session RAM cap was removed. expertMode.enabled=truedeploys the privileged component but leaves expert operations off until enabled in Admin → Expert (a second gate).
Added¶
- AI Copilot — cluster-grounded assistant with cited, deep-linkable answers.
- MCP server — connect AI clients (Claude Code via API key; Claude Desktop / claude.ai via OAuth) to KubeManta's read-only tools.
- AI Guardrails — master kill switch, data residency, cost caps, egress control.
- Enterprise SSO — SAML 2.0, OIDC, LDAP/AD with group→role mapping; multiple methods concurrently; local login stays as break-glass.
- User accounts & roles (admin/viewer), per-user API keys, 2FA (TOTP), GDPR data erasure, IP access control (allow/deny, auto-ban, idle timeout).
- Container scanning — posture grade, history, per-workload drill-down, risk acceptance; read your trivy-operator reports or run a built-in scan; bring your own scanner.
- Network Analyzer — pod-to-pod reachability with root-cause and a live probe; readable NetworkPolicy; multi-cloud VPC view.
- Applications — group workloads with one health verdict, sizing/traffic, and one-click alerting.
- Resource Builder — plan/apply/diff with Kubernetes-aware YAML, saved bundles, and a full Helm release manager.
- Manage any resource — edit YAML, describe, or delete any editable kind directly from Workloads → All resources (right-click), no drop to kubectl.
- Alert Rules Engine — condition types, start-from templates, firing history with captured evidence; inbound Alertmanager receiver; optional heartbeat.
- Metrics — built-in trends (no setup), Prometheus integration, and a guided Prometheus + kube-state-metrics deploy.
- Air-gap mode (
security.airgap.enabled) with offline licensing. - Flexible exposure — service-only mode, any IngressClass, attach-to-existing cloud LB, multi-host Ingress, Gateway API.
Fixed¶
- Sign-ins and sign-outs are attributed to the right person, in one unified activity feed.
- Alert evidence (logs/events) is captured at firing time, so a crashed pod's logs aren't lost by the time you look.
- Pod logs render as clean text everywhere.
- Container-scan history, status and diff now agree with the findings view and never expose KubeManta's own platform CVEs.
- A briefly-unavailable agent (e.g. during a
helm upgrade) now returns a retriable error instead of looking like a crash. - Numerous UI, alerting, scanning, metrics and exposure fixes.
Security¶
- Constant-time local login (no user-enumeration timing signal); revoked or deactivated sessions are refused on the next request.
- Air-gap docs now state that egress enforcement depends on your CNI, with a verification step.
v1.0.0 — 2 August 2026¶
First generally available release: real-time workload visibility, AI-assisted diagnosis, a browser terminal, and remediation that always waits for your approval — installed with one Helm command and running entirely inside your cluster.
Included¶
- Incident-first overview — leads with what is failing, where, and for how long, with per-pod incident stories from events, logs, exit codes and resource pressure; failure-cascade and network-topology visualizers.
- Browser terminal —
kubectl,helm,k9sand Node.js preinstalled, running as a separate unprivileged user, every command attributed; sessions start explicitly. - AI diagnosis with cited sources — bring your own model (Anthropic, OpenAI, Google, Azure, Groq, Ollama or any OpenAI-compatible endpoint); AI is optional and can be switched off.
- Approval-gated remediation — every write (pod restart, scale, Helm upgrade, manifest apply) is previewed, approved and audited. No autonomous remediation.
- Container scanning — read trivy-operator reports or scan on demand, with an A–F grade, per-workload drill-down and risk acceptance.
- Per-admin-seat pricing — viewers free and unlimited; no node counting. Free includes the full read-only platform on one cluster with one admin seat.
Operating notes¶
- Single instance by design. The agent owns a SQLite database on a ReadWriteOnce volume;
the chart refuses
replicaCount > 1. Recovery after a node failure depends on your StorageClass — networked storage reattaches in minutes, node-local storage waits for the node. - Alerting shares the agent's fate. Enable the heartbeat (
alerts.heartbeat.enabled) and alert on its absence, and watch the agent's readiness from outside KubeManta. - Behind a proxy or edge, set
security.trustedProxyCidrs— otherwise every request is attributed to your edge, collapsing audit attribution and letting one client's failed logins ban that shared IP for everyone. - Secure by default. A vanilla install is read-only; writes need
rbac.allowWrites=true, the terminal and Helm needexpertMode.enabled=true. - Everything stays in your cluster. Operational tables prune themselves; your own content (bundles, runbooks, workspace files) is never auto-deleted.