chore(deps): Update Helm release headlamp to <0.47.0 #130

Merged
jakman85 merged 1 commits from renovate/headlamp-0.x into main 2026-11-08 04:28:02 +00:00
Collaborator

This PR contains the following updates:

Package Update Change
headlamp (source) minor >=0.41.0 <0.42.0 → <0.47.0

⚠️ Warning

Some dependencies could not be looked up. Check the Dependency Dashboard for more information.


Release Notes

kubernetes-sigs/headlamp (headlamp)

v0.46.0: 0.46.0

Compare Source

Headlamp 0.46.0 introduces alpha support for Kubernetes Dynamic Resource Allocation, making device classes, GPU claims, and claim templates visible in the dashboard. New hierarchical workload views, Job suspend and resume actions, a configurable details drawer, and a guided Endpoints form simplify everyday cluster work, while service port-forwards reconnect automatically after pod restarts. The release also improves OIDC login and logout, strengthens plugin credential isolation and release signing, and expands integration points for desktop products. Accessibility, localization, frontend build tooling, and reliability improvements round out the release across web and desktop.

🌟 Dynamic Resource Allocation (alpha): see how workloads get GPUs and other devices

Headlamp now shows Kubernetes Dynamic Resource Allocation (DRA), the Kubernetes API that workloads use to request GPUs and other devices. A new Devices section appears on clusters that serve resource.k8s.io/v1 (Kubernetes 1.34+). DRA support is in alpha.

Devices section and Device Classes

Browse the device classes your cluster offers, with their CEL selectors, driver settings, and extended resource names, in a Devices section that only appears where DRA is served.

Headlamp Devices section showing the Device Classes list with class names, selector counts, drivers, and extended resources
Device Class details

See the CEL selectors a class uses to pick devices, shown exactly as written, along with its extended resource name and driver settings.

DeviceClass big-gpu.example.com details showing its extended resource and two CEL selector expressions
Resource Claims

See whether each claim is waiting for a device, allocated, or in use, along with the devices it was granted and the node they are on.

Resource Claims list showing pending and in-use GPU claims with their device classes, allocated devices, and nodes
Resource Claim Templates

Templates describe the devices a Pod asks for, and Kubernetes makes a new claim from them for every Pod. See each template's namespace, how many requests it makes, and which device classes it uses.

Resource Claim Templates list showing template names, namespaces, request counts, and GPU device classes

Implemented across #​7724, #​7820, and #​7971. Thanks to @​Anjali-Chauhan1. Feedback is welcome on #​4831.






✨ Enhancements (part 1)

Adds an OIDC auto-login server flag and Helm setting so users are redirected straight to the identity provider without clicking a login button, fixing post-login redirect bugs along the way. Thanks to:
@​Suyog241005
@​mudit06mah.
Thanks to @​menardorama for reporting.
#​7071
Adds Suspend and Resume actions for Jobs in the details header and table row menu, so users can toggle spec.suspend without editing YAML or using kubectl. Thanks to @​PixelRobots.
#​7698
Adds a setting to open the details drawer on the right, left, or bottom instead of a hardcoded right side, letting users place the panel where they prefer, with the choice saved locally. Thanks to @​WasThatRudy.
Thanks to @​jasoncologix for reporting.
#​7126
Added French translations for 75 missing strings, mostly in the new create forms and address validation messages, so French-speaking users see these forms in their language while Kubernetes API values stay untranslated. Thanks to @​berlewis.
#​7902
The desktop build manifest now accepts a product-owned company name and a separate Linux maintainer contact, mapped to Electron Builder metadata, so branded products can set their own publisher details. Thanks to @​illume.
#​7746
Products can now declare an explicit approvedCommands list separate from plugin-authorized commands, giving product-owned defaults without seeding user settings or auto-approving every shipped plugin command. Thanks to @​illume.
#​7685
Added a guided create form for Endpoints that edits subsets, addresses and ports and validates them like the API server, so users avoid hand-writing YAML and catch errors such as loopback IPs before submitting. Thanks to @​vyncent-t.
#​7666
Adds Suspend and Resume actions for Jobs in the details header and table row menu, so users can toggle spec.suspend without editing YAML or using kubectl.
Headlamp Jobs page with the headlamp-suspend-demo details drawer and its suspend action in the toolbar






✨ Enhancements (part 2)

Added CompositePodGroup views for hierarchical gang scheduling, so users can see the nested pod group tree and tell which part of a nested workload failed to schedule. Thanks to @​Anjali-Chauhan1.
#​7542
Browser document titles now include the configured product name, so branded Headlamp builds remain identifiable in tabs and browser history. Thanks to:
@​illume
@​sniok.
#​7298
Branded Headlamp builds can now set an optional distribution product version that the top-bar menu shows, while the version dialog keeps the Headlamp version and Git commit for clear identification. Thanks to:
@​illume
@​joaquimrocha.
#​7287
Adds a validated registry for desktop OAuth callback providers that routes startup, second-instance and macOS protocol callbacks to them, while unmatched product URLs keep using the existing deep-link path. Thanks to:
@​illume
@​gambtho.
#​7281
Exporting stable IDs for the built-in project creation choices lets plugins replace the namespace or YAML option with their own creator, while additional plugin choices stay after the two built-in ones. Thanks to:
@​illume
@​gambtho.
#​7280
Project overview cards from plugins are now hidden when their component renders nothing, so users no longer see empty cards while populated sections keep the standard three-column layout. Thanks to:
@​illume
@​sniok
@​ashu8912.
#​7279
The desktop app now reads checkForUpdates from the packaged build manifest, falling back to HEADLAMP_CHECK_FOR_UPDATES, so downstream builds can configure update checks at packaging time. Thanks to:
@​illume
@​sniok.
#​7278
Service-backed port-forwards now reconnect automatically by resolving a new pod through the Endpoints API after a pod restart, so rolling updates no longer leave them stopped and needing a manual restart. Thanks to @​Slambot01.
#​7273
The desktop app now reads its protocol scheme from product metadata and rejects malformed or other-product deep links, so branded builds handle only their own links while headlamp remains the default. Thanks to:
@​illume
@​gambtho.
#​7252
Added CompositePodGroup views for hierarchical gang scheduling, so users can see the nested pod group tree and tell which part of a nested workload failed to schedule.
PodGroup prefill-0 details showing gang policy, minimum count, workload, composite pod group, and scheduled condition
Project overview cards from plugins are now hidden when their component renders nothing, so users no longer see empty cards while populated sections keep the standard three-column layout.

Project overview before the fix, with an empty custom card beside populated sections






✨ Enhancements (part 3)

Headlamp's custom Table now honors enableTopToolbar={false} and enableRowSelection={false}, so hidden toolbars stay hidden and independent checkbox cells keep their native behavior. Thanks to:
@​illume
@​sniok.
#​7051
Plugins can register custom project namespace grouping through registerProjectGrouping, while default grouping and repeated project IDs stay distinct so namespaces are not wrongly merged. Thanks to:
@​illume
@​yolossn.
#​6905
LogViewer gains a Copy to Clipboard action, allowing users to copy log output directly without downloading it first. Thanks to @​Priyanshu-rgbb.
#​6813






🐞 Bug fixes (part 1)

Adds RP-initiated OIDC logout for server-owned contexts so signing out ends the provider's SSO session instead of silently signing the same user straight back in. Thanks to:
@​big-appled
@​skoeva.
Thanks to @​manujayanth for reporting.
#​5972
Quiets the kubeconfig watcher when kubeconfig files are missing, so a default in-cluster Headlamp no longer fills its pod log with misleading ERROR lines when nothing is wrong. Thanks to @​govindup63.
Thanks to @​NoamBrodie and @​BigFlagBurito for reporting.
#​5731
Checks the latest Helm release revision instead of only deployed ones, so failed or pending releases can be viewed, rolled back, or uninstalled and missing releases correctly return 404. Thanks to @​NachiketPatil26.
Thanks to @​ghost for reporting.
#​7859
Service pod lookup for port-forwarding now uses the service resource's own cluster, so the port-forward button no longer goes missing when service details are opened from a project view. Thanks to @​tejhan.
#​7958
EndpointSlices are now matched to Services via the kubernetes.io/service-name label before falling back to ownerReferences, so API-server-created slices like the default kubernetes one link to their Service. Thanks to @​aashu2006.
#​7931
Editing a container port in the create resource form now preserves other ports and the edited port's fields like name and protocol, preventing silent data loss and crashes on partially typed YAML rows. Thanks to @​HarshPopat23.
#​7914
Fixed a crash in the Service details view when an EndpointSlice has null endpoints, so services with no ready backends, such as a Deployment scaled to 0, still display correctly. Thanks to @​Pradyuman-aviator.
#​7909
Service External IP now shows the external name for ExternalName services and <pending> for LoadBalancers without ingress, matching kubectl instead of showing a misleading "-". Thanks to @​Aarti-panchal01.
#​7907
Diagnostics now surface negative-polarity conditions like ReplicaFailure=True, so workloads blocked by a ResourceQuota or admission controller from creating pods show the explanatory failure message. Thanks to @​HarshPopat23.
#​7904
StorageClass now recognizes the beta is-default-class annotation as well as the GA one, so default classes show as default in list and details views, matching kubectl get sc. Thanks to @​NachiketPatil26.
Thanks to @​ghost for reporting.
#​7900
EndpointSlices now link to their Services
Headlamp resource map showing the kubernetes Service connected to its Endpoints and EndpointSlice






🐞 Bug fixes (part 2)

The PVC create form now keeps the StorageClass input visible while its text is being edited, so replacing a name no longer hides the field and creates the PVC with the default StorageClass instead. Thanks to @​9p-tech.
#​7897
Replica count helpers now tolerate workloads with no status, such as JobSets waiting on a Kueue MultiKueue manager cluster, preventing the Workloads overview from crashing. Thanks to @​glassharbor.
#​7893
Custom resource date printer columns are now formatted only when the field has a value, so unset dates show an empty cell instead of "Invalid Date". Thanks to @​Aarti-panchal01.
#​7892
The log viewer search now subscribes to result changes before running findNext, so the match count updates correctly while typing instead of showing "Too many matches" or a stale count. Thanks to @​9p-tech.
#​7889
Docker extension releases now build, publish and sign the image without pushing a version bump to main, which Prow rejects, so the extension can update beyond 0.35.0 again. Thanks to @​govindup63.
Thanks to @​skoeva for reporting.
#​7877
The desktop app's deep-link handler now adds a missing slash after the # in the URL, so returns from flows like OAuth route to the correct page. Thanks to @​sapnilbiswas.
#​7872
The Home Warnings column now merges results from every allowed namespace per cluster instead of keeping only the last, so warning counts are correct with multiple namespaces. Thanks to @​9p-tech.
#​7866
Renaming a cluster back to its original name now works and clears the saved custom name, instead of failing with a 'custom name already in use' error. Thanks to @​h55n.
Thanks to @​9p-tech for reporting.
#​7843
Backend start scripts now run through cross-env, so npm start works on Windows where cmd.exe can't parse POSIX-style variable prefixes and the backend previously never started. Thanks to @​carterpewpew.
Thanks to @​Adi-204 for reporting.
#​7839
Request tracing and metrics middleware are now attached to the router that actually serves requests, restoring HTTP spans with -tracing-enabled while keeping streaming responses working. Thanks to @​dlanov.
Thanks to @​silvioincalza for reporting.
#​7762






🐞 Bug fixes (part 3)

Node Details now shows all capacity and allocatable resources instead of a hardcoded key list, so extended resources such as GPUs and hugepages are visible to users. Thanks to @​Anushka-2905.
Thanks to @​jayaprajapatii for reporting.
#​7603
The Release Notes dialog now keeps GitHub's zero-height table header images and their sizing instead of stripping them, so release note tables and images render readably. Thanks to @​NachiketPatil26.
Thanks to @​sniok for reporting.
#​7573
Settings now reads the app's live theme through useTheme() instead of importing a test-only fixture, so production code no longer depends on TestHelpers and follows the real theme. Thanks to @​Priyanshu-rgbb.
#​7493
Safe requests are now retried after client-go refreshes an exec credential following a transient 401, so users no longer see the token login dialog when the next request would succeed. Thanks to @​nungster.
#​7483
The macOS tray icon now uses 16×16 and 32×32 template images in place of the 22×22 and 44×44 ones, so it matches the size of neighboring menu-bar icons instead of looking oversized. Thanks to @​nova9.
#​7476
CronJob Spawn Job now binds the request to the CronJob's own cluster, so the Job is no longer created on the wrong cluster when the URL cluster differs after the grace period. Thanks to:
@​YousufFFFF
@​yolossn.
#​7304
Desktop runCommand IPC listeners are now released when commands exit or are rejected, preventing leaked subscriptions and making plugin manager command cleanup consistent. Thanks to:
@​illume
@​tejhan.
#​7277
Lowercase k is now parsed as kilo in byte quantities, so Kubernetes values like 500k read as 500000 bytes instead of being silently under-reported by 1000x. Thanks to:
@​omlahore
@​skoeva.
#​7073
Query retries now stop immediately for permanent HTTP errors below 500 while still retrying temporary ones like 408 and 429, avoiding pointless repeat requests that cannot succeed. Thanks to:
@​illume
@​sniok.
#​6907
Release notes render tables and images correctly
Headlamp Release Notes dialog displaying formatted tables and images






🐞 Bug fixes (part 4)

Electron Zoom In, Zoom Out, and Reset menu actions are restored after plugin menu serialization strips callbacks, so users can zoom the app again from the menu. Thanks to:
@​illume
@​skoeva.
#​6891
Byte-quantity parsing now handles micro (u) and nano (n) suffixes, so fractional values no longer fall through as raw bytes and skew memory usage percentages by about 1000x. Thanks to @​Pratikdeb07.
#​6817
MCP clients no longer restart when only secondary selected clusters are reordered, avoiding unnecessary disruption while keeping the current cluster first and backend context order deterministic. Thanks to @​rootp1.
#​6536






🔒 Security

Added grouped weekly Dependabot updates for Go modules, GitHub Actions and Docker base images, so dependencies and pinned actions stay current without manual work or one PR per backend module. Thanks to @​skoeva.
#​7864
Release signing now works for checksums, container images and release tags, dropping the broken GPG signature, so users can verify releases and tags are signed consistently. Thanks to @​skoeva.
#​7858
Added a provider-neutral cluster registration framework to the desktop app, allowing authorized product plugins to retrieve cluster credentials and safely register clusters in the user's kubeconfig. Thanks to @​illume.
#​7744
Service proxy requests with a relative URI now keep the configured URIPrefix base path and block encoded traversal, so requests like /status resolve under /api/v1/proxy instead of the host root. Thanks to @​zanarellidev.
#​7594
Desktop plugins can now use Electron safeStorage through a frozen pluginSecureStorage API with per-plugin namespaces and token-based access, so each plugin's encrypted values stay isolated from others. Thanks to:
@​illume
@​gambtho.
#​7253
MCP desktop debug logging is now off by default and redacts values when HEADLAMP_MCP_DEBUG=true, so arguments and cluster metadata no longer leak into logs. Thanks to @​rootp1.
#​6529
Desktop MCP child processes now get only the SDK's default platform environment plus explicitly configured server env values, so the full Headlamp process environment is no longer inherited. Thanks to @​rootp1.
#​6521






♿ Accessibility

Adds alt+shift+p and alt+shift+d hotkeys for Pods and Deployments that keep the selected namespace filter, so users no longer have to re-select it after keyboard navigation. Thanks to @​aditya-c7.
Thanks to @​Rucha0901 for reporting.
#​7851
Removes a stale RestartMultipleButton entry from the accessibility baseline, so CI strictly enforces the already-fixed aria-required-parent rule and catches regressions. Thanks to @​Bhargava-Ram-Thunga.
Thanks to @​illume for reporting.
#​7395
Cluster Overview pod and node status pie charts now link to filtered list views, so users can jump straight to unready pods, cordoned nodes, or unready nodes when troubleshooting. Thanks to @​Suyog241005.
Thanks to @​kriswuollett for reporting.
#​6748
Removed the resolved scrollable-region-focusable entry from the Storybook accessibility baseline for ClusterChooserPopup, keeping the baseline accurate now that the list is keyboard-focusable and axe-core no longer flags it. Thanks to @​ubermensch177.
Thanks to @​illume for reporting.
#​7898
DropZoneBox now uses a theme-aware border instead of hardcoded pure black, so the drop area outline stays visible in dark mode. Thanks to @​Priyanshu-rgbb.
#​7551
The editor dialog now asks for confirmation before discarding unsaved changes via Close, X, Escape or backdrop, preventing accidental loss of edits while pristine editors still close immediately. Thanks to @​Adi-204.
#​7443
VersionDialog now falls back to 'Headlamp' when the product name is unset and stale axe baseline entries are removed, so the dialog always has an accessible name and title. Thanks to @​Bhargava-Ram-Thunga.
Thanks to @​illume for reporting.
#​7425
Project Details can now grow past the viewport, the resources grid keeps a 300 px minimum height and the category list is capped and scrollable, keeping content usable at high zoom. Thanks to:
@​illume
@​gambtho.
#​7293
ShowHideLabel's expand/collapse button now sits outside the label element and carries the aria-expanded and aria-controls attributes, fixing an accessibility issue for assistive technology users. Thanks to @​Alok-work23.
Thanks to @​illume for reporting.
#​7267
Stale label-title-only entries were removed from the accessibility baseline for the Settings stories, so the baseline reflects the fixed Debug Image field and no longer lists resolved violations. Thanks to @​Bhargava-Ram-Thunga.
Thanks to @​illume for reporting.
#​7224
Resource-map labels now reflow instead of using fixed sizing, preventing content from being clipped at 200% text zoom. Thanks to:
@​illume
@​gambtho.
#​6910
Kubeconfig load dialog errors now use the themed MUI Alert component instead of a hardcoded red box, so they follow the active theme and include an error icon rather than relying on color alone. Thanks to @​Satyam087.
#​7751
Visible file upload borders in dark mode
File upload area in dark mode with a visible dashed border and readable selection text
Confirmation before discarding unsaved edits
Confirmation dialog asking whether to discard unsaved editor changes
Themed kubeconfig error alerts
Kubeconfig load dialog showing a themed error alert with an error icon






⚡ Performance and Build Speed

Table filters now reuse stable row models and cache dropdown options on demand, avoiding repeated work while restoring Status and Namespace filters on large clusters with their memory safeguards intact. Thanks to @​srebb.
#​7486
Makes Rsbuild the default frontend builder while keeping Vite scripts available, addressing build crashes on low-memory CI and slow or broken dev mode on Windows. Thanks to @​illume.
Thanks to @​vyncent-t for reporting.
#​7712
Packaging no longer runs an intermediate unpacked Electron Builder pass and adds a prepared-assets path, so repeated package preparation is avoided and builds with prebuilt assets skip redundant work. Thanks to @​illume.
#​7727
The Build App workflow now caches npm and Go dependencies and cancels superseded runs on new pushes, making one of the slowest PR checks faster and avoiding wasted builds. Thanks to @​skoeva.
#​6210
Removed the dead base-branch coverage step from the backend-test workflow, so PRs run the test suite once instead of twice and save roughly 40-50 seconds. Thanks to @​skoeva.
#​6190






📖 Documentation

The identity-aware proxy guide now includes a Pomerium example with Ingress Controller setup and Headlamp Helm values, helping users configure it and understand the shared service account for API access. Thanks to @​desimone.
#​7227






💻 Development (part 1)

Wraps the SettingsCluster loading text in the translation function, so the loading indicator appears in the user's chosen language like other loaders. Thanks to @​Priyanshu-rgbb.
#​7553
Bundled Plugin Catalog updated from 0.4.4 to 0.4.5 with its new archive SHA-256 checksum pinned, so builds ship the latest catalog release with a verified archive. Thanks to @​illume.
#​7979
Added the missing Portuguese translation key for the table filter message, so the frontend i18n check passes again on main. Thanks to @​Aarti-panchal01.
#​7953
Terminal storybook snapshots now normalize xterm's counter-based ids in injected style tags, making the storyshots independent of how many xterm instances were created earlier in the test run. Thanks to @​Priyanshu-rgbb.
#​7908
Added unit tests for the BackLink component covering its label, styling and back navigation, so regressions in this shared navigation element are caught early. Thanks to @​sapnilbiswas.
#​7895
Added unit tests for the SectionBox layout component covering its content and title rendering, so regressions in this widely used common component are caught early. Thanks to @​sapnilbiswas.
#​7884
Added unit tests for the EmptyContent component covering string and ReactNode children and color forwarding, helping catch regressions in how it renders. Thanks to @​sapnilbiswas.
#​7868
Packaging now reports start times and elapsed durations for backend, app assembly, post-pack and artifact build phases, making it easier for developers to see where build time goes. Thanks to @​illume.
#​7731






💻 Development (part 2)

The product manifest's display name is now applied to the Electron runtime before storage modules load, so branded development builds use their own default profile directory instead of sharing Headlamp's. Thanks to @​illume.
#​7615
Adds empty batch/v1 Job and CronJob list responses to the frontend and plugin-template Storybook mocks, so workload list stories no longer depend on unhandled Kubernetes API requests. Thanks to:
@​illume
@​skoeva.
#​7473
Expands Storybook apps/v1 workload mocks to cover namespaced and cluster-prefixed requests, with end-to-end regressions for all four apps workload list pages so these stories render reliably. Thanks to:
@​illume
@​skoeva.
#​7438
Desktop command execution now reports distinct exit codes (-1, -2, -3) for invalid data, rejected permission secrets and denied consent, letting renderer callers tell these rejections apart. Thanks to:
@​illume
@​tejhan.
#​7294
Added regression tests for ActivitiesRenderer's route-change policy, so ordinary split-right activities stay visible while blocking activities and details drawers are minimized as intended. Thanks to @​illume.
#​6323






💻 Development (part 3)

Frontend product name, version and source revision are now generated from the selected build manifest and safely escaped for Vite's dotenv format, so packaged-source metadata is preserved without comment or expansion corruption. Thanks to @​illume.
#​7474
Added TypeScript declarations and test coverage for the shared i18next parser and runtime configuration, making locale selection and right-to-left direction verifiable for developers. Thanks to:
@​illume
@​sniok.
#​7066
Added a Storybook story for the EventsLifetimeInfo component, giving it snapshot test coverage through the repo's storybook tests where it previously had none. Thanks to @​xonas1101.
#​6507
The warning bar in the PerformanceTest2000Pods story now uses full width and border-box sizing, so it stays aligned when Change % is set to 25% or 50%. Thanks to @​anurag-p6.
#​7477
Added TypeScript declarations and test coverage for the shared i18next parser and runtime configuration, making locale selection and right-to-left direction verifiable for developers.
Headlamp General Settings with Arabic selected and the interface displayed right to left

Container image: 🐳 ghcr.io/headlamp-k8s/headlamp:v0.46.0
Desktop Apps:

⚠️ Important: Information on warnings from Windows when running Headlamp unsigned apps.

🐧 Flatpak / Linux (AMD64)
🐧 Linux AppImage AMD64, ARM64, ARMv7l
🐧 Linux Tarball AMD64, ARM64, ARMv7l
🐧 Debian / Linux AMD64
🍏 Mac (AMD64)
🍏 Mac (ARM/M1)
🟦 Windows (AMD64)
🟦 Windows (ARM64)

v0.45.0: 0.45.0

Compare Source

Headlamp 0.45.0 reduces desktop startup memory and unnecessary background requests, while adding new scheduling and Gateway API views, guided resource creation forms, and more flexible plugin and product customization. Security updates protect desktop APIs, verify external plugin archives, and close command-consent and dependency vulnerabilities. Accessibility improvements make high-zoom layouts, keyboard controls, and custom theme contrast more usable, alongside 31 bug fixes across authentication, port forwarding, Resource Map, tables, and the desktop app.

⚡ Performance

Plugin i18n now fetches only the active locale's translation file instead of all declared locales, preventing a flood of 404 requests when a plugin declares multiple languages. Thanks to:
@​YousufFFFF
@​r0hansaxena.
Thanks to @​mjeanrichard for reporting.
#​7363
Desktop startup now defers optional work, retains smaller Kubernetes objects, and tunes garbage collection, reducing memory by about 60 MiB RSS across combined isolated measurements. Thanks to @​illume.
#​7358
Replaced the manual setInterval in useClustersVersion with React Query's useQueries, so polling pauses when the browser tab is hidden and unnecessary network requests to connected clusters are avoided. Thanks to:
@​shreyas-acharya
@​illume.
#​6707

✨ Enhancements (part 1)

Added target container selection for ephemeral debug containers, allowing users to share the process namespace and filesystem of a specific container in multi-container pods during debugging. Thanks to:
@​Suyog241005
@​yush-1018.
Thanks to @​eightfourseventwo for reporting.
#​7245
Added a 'Keep Large Graph Groups Expanded' setting that persists namespace group expansion state across sessions, eliminating repetitive manual expansion clicks on large cluster resource maps. Thanks to:
@​Suyog241005
@​mudit06mah.
Thanks to @​syorito-hatsuki for reporting.
#​7156
A right-click context menu with copy and paste options has been added to the pod terminal, so users can copy and paste text without workarounds. Thanks to @​rootp1.
Thanks to @​jimmyjones2 for reporting.
#​7121
Added a form-based UI for creating PersistentVolumeClaims, including multi-select access mode support, so users can provision storage directly from the Storage section without writing raw YAML. Thanks to @​anoopw3bdev.
#​5333
Validated legal documents from the build manifest now appear in About and Legal tabs, letting desktop products present licenses and third-party notices in the app. Thanks to:
@​illume
@​joaquimrocha.
#​7299
Exposed the host operating-system platform through the context-isolated desktop preload API, allowing frontend plugin authors to write platform-aware behavior in Electron builds. Thanks to:
@​illume
@​sniok.
#​7291
Products can now configure custom titles and graphics for error and not-found pages at build time, allowing branded distributions to replace Headlamp's default error content without modifying source code. Thanks to:
@​illume
@​joaquimrocha.
#​7288
The backend app name is configurable through --app-name or HEADLAMP_CONFIG_APP_NAME, letting branded distributions customize version output and User-Agent headers without maintaining a fork. Thanks to:
@​illume
@​sniok.
#​7248
The Azure AKS plugin now receives its required script permissions from app configuration, allowing it to run without manual permission setup. Thanks to @​sniok.
#​7144
Target a specific container when debugging a pod

Choose which application container an ephemeral debug container targets, making its processes and filesystem available for more effective troubleshooting.

Dialog for selecting the target container when debugging a pod
Cordoned and Drained node status indicators

See at a glance when a node is unavailable for scheduling instead of mistaking every Ready node for an active one.

frontend: Show Cordoned and Drained status indicators
TCPRoute and UDPRoute resource views

Browse and inspect Gateway API TCPRoute and UDPRoute resources directly alongside Headlamp's other Kubernetes resources.

frontend: Add TCPRoute and UDPRoute views
Delete or evict pods

Choose eviction when maintenance should respect disruption safeguards, while retaining direct deletion when it is explicitly needed.

Pod action menu offering both Delete and Evict
PodGroup and Workload scheduling views

Inspect scheduling resources and their status in dedicated views, making batch workload placement easier to understand.

PodGroup and Workload scheduling views






✨ Enhancements (part 2)

Node list and detail views now display Cordoned and Drained status indicators, making it immediately clear when nodes are unschedulable without requiring users to inspect node conditions manually. Thanks to @​tejhan.
Thanks to @​sarg3nt for reporting.
#​7100
Plugins can replace or wrap the no-clusters Home page through registerClusterEmptyState, enabling custom onboarding while retaining Headlamp's default actions. Thanks to:
@​illume
@​sniok.
#​7075
Pods without a scheduled node are now grouped under an Unscheduled node in the Resource Map when grouping by node, so pending pods remain visible instead of disappearing from the view. Thanks to:
@​illume
@​gambtho.
#​7069
Desktop plugin and kubeconfig directories are now isolated by product name using a new --kubeconfig-dir option, preventing data collisions between different branded distributions sharing the same machine. Thanks to:
@​illume
@​yolossn.
#​7068
JobSetList now probes the cluster for the JobSet API before rendering, showing a clear unavailable state with install docs when JobSet is not present instead of a confusing generic error. Thanks to @​Pritz395.
#​7016
TCPRoute and UDPRoute resources now have dedicated list and detail views in the Gateway API section, giving users full L4 route visibility alongside the existing HTTPRoute and GRPCRoute support. Thanks to @​areycruzer.
#​7002
GraphView and KubeIcon are now exported through pluginLib, allowing plugin authors to embed the resource map's graph renderer and icon set directly in their own pages. Thanks to @​rootp1.
Thanks to @​danbruno101 for reporting.
#​6992
The Service details view now lists the pods matched by the service selector, making it immediately obvious when a selector is misconfigured or targets no pods without manually cross-referencing endpoints. Thanks to @​krsatyamthakur-droid.
Thanks to @​jimmyjones2 for reporting.
#​6972
Hover-to-copy buttons have been added to IP and address table cells, allowing users to grab Pod IP, Cluster IP, External IP, and Endpoint addresses without manually selecting text. Thanks to:
@​rootp1
@​pallava-joshi.
Thanks to @​joaquimrocha for reporting.
#​7097
Terminal context menu

Copy and paste from a pod terminal using a familiar right-click menu instead of relying only on keyboard shortcuts.

Right-clicking in the terminal opens a Copy and Paste context menu
Custom cluster empty states

Plugins can replace or extend the no-clusters screen, allowing distributions to provide onboarding that fits their environment.

Custom cluster empty state

Resource Map plugin APIs

Plugins can reuse Headlamp's graph view and Kubernetes icons to build visualizations that remain consistent with the rest of the interface.

GraphView rendered standalone in Storybook with Resource Map controls

High-resolution system tray icon

The desktop tray icon now stays sharp on high-density displays instead of appearing soft or pixelated.

app: Add retina system tray icon
StatefulSet creation form

Create StatefulSets through a structured form with guided fields instead of writing the complete manifest by hand.

frontend: CreateStatefulSetForm: Add create form for stateful set






✨ Enhancements (part 3)

Project header actions can switch detail tabs programmatically, enabling plugin-defined workflows without relying on DOM event workarounds. Thanks to:
@​illume
@​gambtho.
#​6936
Added Czech, Hungarian, Indonesian, Dutch, Polish, Swedish, and Turkish locales and expanded Brazilian Portuguese, letting more users work in their preferred language. Thanks to:
@​illume
@​skoeva.
#​6893
macOS builds can embed product-specific license agreements in DMG installers, so users can review terms during installation. Thanks to:
@​illume
@​joaquimrocha.
#​6887
Exported the WorkloadLogs component and its props through the plugin API, allowing plugin authors to embed the multi-pod workload log viewer inline in their own UI surfaces. Thanks to:
@​illume
@​sniok.
#​6886
Plugin overview sections can decide whether they apply to the current project, hiding irrelevant content and reducing page clutter. Thanks to:
@​illume
@​sniok.
#​6860
Headlamp fetches configured namespaces individually when cluster-wide listing is forbidden, so restricted users can see allowed namespaces without unauthorized requests. Thanks to:
@​illume
@​sniok.
#​6834
Build manifests can set validated product identity and protocol metadata, letting distributors brand packages without overwriting unrelated Headlamp defaults. Thanks to:
@​illume
@​sniok
@​joaquimrocha.
#​6831
The system tray tooltip and Open/About menu labels now use the configured app name instead of the hardcoded string 'Headlamp', so custom-branded builds display their product name consistently throughout the tray UI. Thanks to @​skoeva.
#​6931
The Linux executable name is now derived automatically from package and product metadata rather than being hardcoded, so renaming the product correctly propagates to the Linux binary without manual updates. Thanks to:
@​illume
@​joaquimrocha.
#​6909
Changed Electron Builder artifact filenames to use the package name instead of the display product name, allowing downstream distributions to customize package identity without altering the user-facing product name. Thanks to:
@​illume
@​joaquimrocha.
#​6859
Persistent volume claim creation form

Request persistent storage through a guided form, reducing the need to remember volume claim YAML fields and syntax.

Form for creating a persistent volume claim
Unscheduled pods grouped in Resource Map

Pending pods remain visible when grouping by node, collected under an Unscheduled group until the scheduler places them.

Resource Map grouped by node with pending pods under Node Unscheduled

Pods selected by a Service

View the pods matched by a Service directly from its details, making selector and routing problems faster to diagnose.

frontend: service: Show the pods a Service targets
Namespace label selectors in cluster settings

Define allowed namespaces by label so access follows matching workloads automatically without maintaining a static namespace list.

frontend: Add allowed namespaces label selector to cluster settings
Plugin-provided resource relationships

Plugins can teach Resource Map about domain-specific relationships, revealing connections that Headlamp cannot infer on its own.

frontend: Implement registerResourceRelationProvider Plugin API






✨ Enhancements (part 4)

Build manifests can customize validated Linux, macOS, and Windows packaging metadata, letting distributors tailor artifacts while catching invalid configuration before packaging. Thanks to:
@​illume
@​ashu8912.
#​6830
Bundled plugins can declare enabledByDefault in the build manifest, letting distributors ship plugins disabled without post-build edits. Thanks to:
@​illume
@​joaquimrocha.
#​6828
Workload detail pages now display the Service Account with a link to its RoleBindings, making it easy to audit a workload's permissions without having to drill into individual pods. Thanks to @​krsatyamthakur-droid.
Thanks to @​jimmyjones2 for reporting.
#​6819
Pod action menus now expose both Delete and Evict as a split button so users can choose the appropriate action — such as evict to respect PodDisruptionBudgets — without changing the global setting in Settings. Thanks to @​krsatyamthakur-droid.
Thanks to @​segevfiner for reporting.
#​6792
Added a 2× retina system tray icon so the Headlamp icon renders sharply on macOS high-density displays instead of appearing blurry. Thanks to @​skoeva.
#​6775
Cluster settings now accept a namespace label selector, so shared-cluster teams can automatically scope Headlamp without maintaining a static namespace list. Thanks to @​guillaumebernard84.
#​6759
ClusterProfile discovery is scoped to each consumer namespace by default, reducing broad access while still supporting explicitly configured shared inventories. Thanks to @​kahirokunn.
#​6669
Made the resource detail page header (back button, title, and action buttons) sticky while scrolling, so users no longer need to scroll back to the top to navigate or perform actions. Thanks to @​NAME-ASHWANIYADAV.
#​6616
Product legal documents

Distributions can surface their licenses and other legal documents inside the app, keeping required information easy to find.

Legal tab showing manifest-declared product documents
Seven additional language packs

More users can navigate Headlamp in their preferred language, with new Czech, Hungarian, Indonesian, Dutch, Polish, Swedish, and Turkish translations.

General Settings language selector showing the added Czech, Hungarian, Indonesian, Dutch, Polish, Swedish, and Turkish locales alongside existing languages

Namespace-scoped ClusterProfile discovery

Limit ClusterProfile discovery to the configured namespace, reducing unnecessary access and supporting more restrictive cluster permissions.

ClusterProfile discovery scoped to a namespace






✨ Enhancements (part 5)

Added dedicated views for the Kubernetes v1.36 PodGroup and Workload scheduling APIs, making gang-scheduling resources visible in Headlamp without requiring CRDs or Advanced Search workarounds. Thanks to @​Anjali-Chauhan1.
Thanks to @​kannon92 for reporting.
#​6562
Added a guided create form for StatefulSets with metadata, spec, and pod template sections, bringing StatefulSet creation to feature parity with Deployments, DaemonSets, and other workload types. Thanks to @​vyncent-t.
#​6554
Re-added the workload diagnostics section to workload detail pages with a redesigned layout matching other Headlamp detail sections, giving users a consolidated view of workload health issues. Thanks to @​xonas1101.
#​5964
The editor now preserves unsaved changes and shows an inline warning when a Kubernetes resource is modified externally, preventing silent data loss and giving users a clear path to resolve conflicts. Thanks to:
@​sudhidutta7694
@​illume.
Thanks to @​jimmyjones2 for reporting.
#​5894
Plugins can define custom Resource Map relationships, so implicit dependencies such as Crossplane composite resources appear beyond OwnerReferences. Thanks to @​Joshna907.
#​5453
Product-specific error pages

Branded distributions can provide their own error titles and illustrations while preserving Headlamp's defaults when no customization is supplied.

Product-specific not-found title and illustration

Service accounts in workload details

See which service account a workload uses without inspecting its YAML, making identity and permission troubleshooting more direct.

Workload details showing its service account
Sticky resource detail headers

Resource names and actions remain available while scrolling through long detail pages, preserving context and reducing navigation.

frontend: DetailsGrid: Add sticky header to resource detail pages

🐞 Bug fixes (part 1)

Fixed a broken context lookup key in the port-forward handler so that port forwarding no longer fails with "Unreachable" on clusters affected by the regression introduced in 0.43. Thanks to:
@​r0hansaxena
@​illume.
Thanks to @​rforced for reporting.
#​6109
Zoom level is now saved immediately and re-applied after pane switches, window focus changes, and route navigation, so the chosen zoom setting persists reliably across the Electron app session. Thanks to @​Aamod007.
Thanks to @​andrewbaxter for reporting.
#​6502
Restored translations that were accidentally removed in a prior PR, so previously localized strings are visible again across the UI. Thanks to @​sniok.
#​7237
Script paths are now resolved to file URLs before importing, so running scripts with HEADLAMP_RUN_SCRIPT=true no longer fails on Windows paths starting with a drive letter like C:/. Thanks to @​sniok.
#​7143
Fixed a sticky header overlapping page content and a hidden back-link in the resource details side panel, so users can see all content and navigation without layout interference. Thanks to @​tejhan.
#​7103
Headlamp-plugin CLI commands now route .cmd shims through cmd.exe on Windows, fixing failures caused by Node's CVE-2024-27980 mitigation that blocks direct .cmd/.bat execution. Thanks to @​skoeva.
#​5861






🐞 Bug fixes (part 2)

Relative PKI paths in kubeconfig files are now resolved against the kubeconfig file's directory, so kubeconfigs that work with kubectl also connect successfully in Headlamp Desktop. Thanks to @​Pritz395.
Thanks to @​AGou-ops for reporting.
#​6657
When an in-cluster OIDC provider is rejected by the Kubernetes API server, Headlamp now surfaces a clear error message instead of silently redirecting users to the login screen in an endless loop. Thanks to:
@​tejhan
@​illume.
#​6431
Improved useLocalStorageState to restore missing features and fix a real sync bug, so global search and other components relying on local storage state behave correctly across tabs and rerenders. Thanks to @​vishnukothakapu.
#​5936
Fixed WebSocket cluster API requests failing to derive user-specific auth tokens correctly, so WebSocket connections now authenticate properly instead of falling back incorrectly. Thanks to:
@​gambtho
@​rishh09.
Thanks to @​ecthelion77 for reporting.
#​7319
Shell discovery on Windows now skips Unix-specific lookups, preventing errors during desktop environment resolution on Windows systems. Thanks to:
@​illume
@​joaquimrocha.
#​7065
SimpleTable body cells can now display overflowing content instead of clipping it, so users see complete cell values without truncation while header layout stays constrained. Thanks to:
@​illume
@​sniok.
#​7052






🐞 Bug fixes (part 3)

Local and shipped plugin assets are now served with no-cache headers, ensuring operators and developers always receive the latest plugin files without stale cached versions. Thanks to:
@​illume
@​sniok.
#​7061
The resource Map view no longer hangs indefinitely on a loading spinner when a data source fails to resolve, so users can continue using the map even when some sources are unavailable. Thanks to @​rootp1.
Thanks to @​danbruno101 for reporting.
#​6988
Inline plugin source-map line offsets are now shifted to account for the two lines added by the Function constructor, so stack traces in browser developer tools point to the correct source locations in large plugins. Thanks to:
@​illume
@​sniok.
#​6903
Fixed AddRepo silently wiping credentials and TLS certificate fields when re-adding an existing Helm repository, preventing subsequent failures against private or mTLS-secured repos. Thanks to @​CygnusMaximillian.
Thanks to @​Abhi190702 for reporting.
#​6885
Fixed cache-suppression headers being registered with defer in the service proxy so they are now sent before any response writes, making no-cache directives actually reach clients. Thanks to @​CygnusMaximillian.
Thanks to @​Abhi190702 for reporting.
#​6880
Reloaded the page after successful cluster deletion so stale cluster-scoped browser state is cleared, while preserving the current page and error context when deletion fails. Thanks to:
@​illume
@​sniok.
#​6864
Node shell pod creation errors are now surfaced in the terminal UI instead of only logging to the console, so users can see why a shell failed to open instead of waiting on a blank screen. Thanks to @​YousufFFFF.
#​6844
Deferred translation of default keyboard shortcuts until i18next is ready, eliminating the console warnings about uninitialized i18next and missing keys that appeared on every app startup. Thanks to @​KeerthiKumarR.
#​6814






🐞 Bug fixes (part 4)

Added scroll-position preservation to auto-refreshing resource tables so the view no longer jumps back to the top when data is polled, allowing users to stay in place while browsing long lists. Thanks to @​WasThatRudy.
Thanks to @​prisha-sh for reporting.
#​6787
Added underscore-based folder name variants for the AI assistant plugin so marketplace-installed users whose plugin folder is named headlamp_ai_assistant correctly receive run-command consent and injection. Thanks to @​PixelRobots.
#​6737
Suppressed misleading kubeconfig error messages on startup for in-cluster deployments, so operators are no longer alarmed by errors that are expected and harmless in that mode. Thanks to:
@​tejhan
@​illume.
#​6688
Fixed streamResultsForCluster to retain the newest resources instead of the oldest when the result set is capped, so the streaming API limit behaves as intended. Thanks to @​xevrion.
#​6675
Removed Kubernetes 1.22-deleted v1beta1 API versions for Ingress and CRD resources, preventing 404 errors and console noise on every modern cluster. Thanks to @​qiangli.
#​6655
Fixed normalizeUnit() returning the literal string "undefined" or "NaN undefined" for memory values below 1 byte, so sub-byte Kubernetes quantities like 500m display correctly. Thanks to @​anushkagupta200615-jpg.
#​6629






🐞 Bug fixes (part 5)

Fixed decimal CPU quantities like '2.0' displaying with a trailing zero in the UI, so values now render as '2 cores' for a cleaner and less confusing presentation. Thanks to @​AarishMansur.
#​6444
Fixed an off-by-one logic error that caused tab components to always open at index 0 regardless of the configured default, allowing tabs to correctly honor their initial selection. Thanks to @​skools-here.
#​6410
Fixed a conflict between the global shortcut handler and Chrome's paste behavior that blocked pasting authentication tokens into the ID token field, allowing users to paste credentials normally. Thanks to @​bhuvan-somisetty.
#​6282
Fixed memory quantity parsing to correctly handle the milli-bytes (m) suffix, preventing wildly incorrect memory usage percentages from appearing in the Node detail view. Thanks to @​yu-heejin.
#​5809
Added null guards for partial CRD specs in makeCRClass and related methods, preventing crashes that could take down the dashboard during transient watch updates or in-flight refetches. Thanks to @​WasThatRudy.
Thanks to @​isgj for reporting.
#​5717

🔒 Security

Desktop backend APIs are now protected by the per-launch app token, preventing other processes on the same machine from accessing Kubernetes APIs through the local backend. Thanks to @​illume.
#​7353
Empty namespace selectors remain restricted instead of falling back to cluster-wide access, preventing unintended resource requests. Thanks to @​illume.
#​7361
Fixed the runCommand consent flow in the desktop app so that denying a plugin's command request immediately stops execution, preventing the command from running even on the first invocation. Thanks to @​utkarshalpha.
Thanks to @​bhuvan-somisetty for reporting.
#​7295
Updated dependencies across backend, frontend, app, headlamp-plugin, and container images to resolve known security vulnerabilities, including five Go stdlib CVEs affecting net/url, html/template, and TLS handling. Thanks to @​illume.
#​7373
Updated oras-go and x/sync dependencies to satisfy security scans and remove known dependency risk without changing Headlamp APIs or behavior. Thanks to @​skoeva.
#​6953
External plugin manifests can now be selected via HEADLAMP_BUILD_MANIFEST and are verified with SHA-256 digests, preventing tampered or unexpected plugin archives from being loaded in product builds. Thanks to:
@​illume
@​sniok.
#​6827
Added a releaser security-check command that scans the Go backend with govulncheck and Dockerfiles with hadolint, allowing maintainers to catch known vulnerabilities before cutting a release. Thanks to @​rootp1.
#​6730
Replaced execSync with execFileSync in scripts that interpolate dynamic values into shell commands, preventing potential command injection from paths containing spaces or shell metacharacters. Thanks to @​skoeva.
#​4099

♿ Accessibility

Activity panel overview tiles and activity-bar entries now wrap text instead of shrinking on small screens, keeping the panel readable on narrow displays. Thanks to:
@​rootp1
@​greedy-wudpeckr.
#​7146
Warning alerts in dark theme now use explicit background, text, and icon colors, making them meet contrast requirements and easier to read in low-light environments. Thanks to:
@​illume
@​tejhan.
#​7247
The View YAML panel now opens responsively — full-screen on small viewports and in a right-side pane on large screens — so users can read manifests without losing resource-list context. Thanks to:
@​illume
@​sniok.
#​7063
AppTheme now supports a configurable contrast text color for custom secondary colors, allowing plugin authors and theme creators to ensure readable button labels on any secondary palette. Thanks to:
@​illume
@​tejhan.
#​7054
Fixed EditorDialog being clipped at high browser zoom levels by giving its content a stable minimum height and vertical scrolling, so the dialog remains fully usable at any zoom setting. Thanks to:
@​illume
@​sniok.
#​6890
The Debug Image field now has an accessible label and strips whitespace from image references, improving screen-reader narration and preventing invalid references. Thanks to:
@​illume
@​vyncent-t.
#​6858
Appearance controls now include Accent color and Cluster icon section labels in their accessible names, helping screen-reader users distinguish these settings. Thanks to:
@​illume
@​vyncent-t.
#​6836
Project Details tabs are now horizontally scrollable at high text zoom and resource categories stack above the resource table at narrow breakpoints, preventing content from being cut off or unusable when zoomed to 200%. Thanks to:
@​illume
@​sniok.
#​6835
The column selector is rebuilt with semantic menuitemcheckbox items and full keyboard navigation support, allowing keyboard-only users to show and hide table columns without requiring a mouse. Thanks to:
@​illume
@​sniok.
#​6833
Wrapped disabled ActionButton icon buttons in a neutral span so tooltips remain visible on hover and keyboard focus, making disabled actions discoverable without breaking activation guards. Thanks to @​rootp1.
#​6584
Responsive YAML viewer

The YAML editor uses the available space at every viewport size, keeping long manifests readable without losing surrounding context on larger screens.

Fullscreen YAML viewer on a phone

Accessible text contrast for custom themes

Theme authors can set a readable text color for secondary controls, preventing low-contrast buttons on custom backgrounds.

Cluster settings color picker showing the secondary Cancel button

📖 Documentation

Added a user-facing OpenTelemetry documentation guide covering tracing, metrics, configuration flags, and in-cluster manifests, so operators can now find and enable Headlamp's backend observability support. Thanks to @​Harsh63870.
#​6407
Replaced the direct Dex OIDC tutorial with a reproducible OAuth2-Proxy pattern and added automated e2e tests, giving operators a verified, recommended reference for deploying Headlamp with OIDC authentication. Thanks to @​illume.
#​5408

💻 Development

Plugin CI tests are now split into parallel jobs, cutting wall-clock time from roughly 16 minutes to 8 minutes and speeding up feedback for contributors. Thanks to @​skoeva.
#​5895
OIDC login handlers now have characterization tests, protecting existing authentication behavior while the flow is consolidated and improved. Thanks to @​gambtho.
#​5420
Added empty cluster-wide PodList mock responses to Storybook so Pod-dependent stories render without errors while still allowing story-specific Pod fixtures to take precedence. Thanks to:
@​illume
@​skoeva.
#​7297
Helm end-to-end tests for plugin manager installations are now part of CI, so regressions in Helm-based plugin workflows are caught automatically before release. Thanks to:
@​rootp1
@​Vaishnav-Dhaval.
Thanks to @​illume for reporting.
#​7216
The Electron e2e suite now has its own dedicated Playwright config, removing runtime skip logic and making it easier for developers to run desktop tests reliably without environment variable workarounds. Thanks to @​unlikelyzero.
#​7003
Package verification now derives Linux, macOS, and Windows names from Electron Builder metadata, so rebranded products validate correctly without hardcoded names. Thanks to:
@​illume
@​sniok.
#​6911
Unit and end-to-end tests now cover shell-free plugin listing across success, failure, and default outputs, catching plugin discovery regressions earlier. Thanks to @​illume.
#​6908
Prevented the GraphView BasicExample story from starting unnecessary CRD watches by making source and relation discovery lazy, so explicit story definitions skip Kubernetes discovery hooks. Thanks to:
@​illume
@​skoeva.
#​6892
Shared Storybook mocks now cover current CRD discovery and the v1beta1 fallback, so built-in and plugin-template stories render consistently and catch contract regressions. Thanks to:
@​illume
@​skoeva
@​gambtho.
#​6832
Added dedicated Storybook stories for ClusterTable covering all connection statuses, origin labels, warnings, versions, the empty state, and the loading state, so regressions in any table variant are caught visually. Thanks to @​xonas1101.
#​6862
Helm chart version, appVersion, and expected templates are now automatically updated during releaser start, ensuring every release git tag contains the correct chart configuration. Thanks to @​Suyog241005.
Thanks to @​erwinkramer for reporting.
#​6227
Fixed an incorrect useMemo dependency in the port-forward component by depending on t directly instead of i18n.language, so the hook correctly re-runs when translations change without suppressing lint warnings. Thanks to @​iashutoshyadav.
#​6824
Fixed the release testing checklist generator to use the correct -html-static-dir flag, preventing invalid commands from being generated during release validation. Thanks to @​Pragati5-DEBUG.
#​6738
Fixed a bug where namespace placeholders were never replaced in generated test resource lists, so mock data now correctly reflects the intended namespace values and regressions are caught by new unit tests. Thanks to @​ahmad-kashkoush.
#​6475
Accessibility Storybook testing has been restored and updated for the current Storybook version with improved violation reporting, allowing developers to catch a11y regressions in CI. Thanks to:
@​unichronic
@​illume.
#​6559
Pod tooltips are now excluded only from landmark placement checks while remaining covered by all other accessibility rules, preventing false axe region violations without reducing overall accessibility coverage. Thanks to:
@​illume
@​skoeva.
#​7255
Accessibility end-to-end tests now run axe-core in legacy mode, preventing a fatal protocol error caused by axe's default flow attempting to open a new browser page in the Playwright test environment. Thanks to @​unlikelyzero.
#​6967

Container image: 🐳 ghcr.io/headlamp-k8s/headlamp:v0.45.0
Desktop Apps:

⚠️ Important: Information on warnings from Mac and Windows when running Headlamp unsigned apps.

🐧 Flatpak / Linux (AMD64)
🐧 Linux AppImage AMD64, ARM64, ARMv7l
🐧 Linux Tarball AMD64, ARM64, ARMv7l
🐧 Debian / Linux AMD64
🍏 Mac (AMD64)
🍏 Mac (ARM/M1)
🟦 Windows (AMD64)
🟦 Windows (ARM64)

v0.44.0: 0.44.0

Compare Source

Need for speed! 🏎️ :dash:  Headlamp 0.44.0 extends practical cluster support beyond 30,000 pods. Resource Map remains usable at this scale, Pod lists fetch 1,000 items at a time, Cluster Overview avoids unbounded watch traffic, and Brotli pre-compression reduces typical JavaScript and CSS transfers by 75-80% and server load for compression to 0%. Got dozens of clusters? Headlamp doesn't try to connect to all of them at startup anymore (potentially opening several browser login windows). Four new structured forms cover DaemonSets, CronJobs, Jobs, and ReplicaSets, while ConfigMap binaryData, ServiceAccount permission visibility, Gateway API v1.5.1, and new plugin controls expand day-to-day capabilities. The release includes 99+ bug fixes, including protections against white-screen startup failures when developing Headlamp on Windows, more accurate workload health reporting, stable large-manifest editing on large busy clusters, and actionable cluster connection errors. Accessibility work restores macOS zoom, improves WCAG AA contrast in a few spots, and broadens automated a11y checks. Security and documentation updates add github cosign of release checksums, safer redirects, tested in-cluster kubeconfig examples, and ready-to-use MCP configurations.

These changes were contributed by over 100+ people. Thanks! 🎉

⚡ Performance

ResourceMap performance improved with iterative BFS, graph simplification, and incremental WebSocket updates — 59% faster initial load and 86% faster updates at 2,000 pods, and clusters with 20,000+ pods are now usable where they previously crashed the browser. Thanks to @​illume. Also thanks to @​itpick for reporting the issue. #​4991
Cluster overview now polls pod, node, and event data every minute instead of using persistent watch streams, preventing browser OOMs on large clusters. Thanks to @​Aamod007. Also thanks to @​lucas-jackson for reporting the issue. #​6021
Optimized sidebar rendering to eliminate UI lag and main thread blocking caused by unnecessary DOM nodes and layout thrashing during CSS transitions. Thanks to @​Psykii22. #​6233
Frontend and plugin static assets are now precompressed with Brotli and served as .br sidecars — JS/CSS bundles are 75–80% smaller over the wire, WASM assets ~60% smaller, and runtime CPU compression overhead drops to zero. Thanks to @​illume. #​6004
Fixed a memory leak where Backstage receiver event listeners accumulated on each remount of the Home component, improving stability during navigation. Thanks to @​Rohith-Saran. #​5775
Fixed unbounded memory growth in OIDC login by evicting abandoned state tokens that were never cleaned up when users left the login flow. Thanks to @​ayushmaan-16. #​5866
Reduced per-message memory allocations in the WebSocket multiplexer hot path by replacing reflection-based decoding and fmt.Sprintf with typed structs and string concatenation. Thanks to @​Slambot01. #​6294
Reduced memory allocations in the k8cache hot path by checking error status before marshalling and replacing fmt.Sprintf with string concatenation, improving cache performance. Thanks to @​Slambot01. #​6420
Replaced repeated linear metrics searches with a memoized namespace/name-keyed Map in the Pod List, reducing CPU overhead during metric lookups. Thanks to @​skools-here. #​6011
Added pagination to the Pods list with a 1000-item budget and a load-more button, preventing out-of-memory crashes on clusters with tens of thousands of pods. Thanks to @​drewbailey. #​5660
ResourceMap performance improved with iterative BFS, graph simplification, and incremental WebSocket updates.

20,000+ pods — all operations under 37ms, where previously the browser would crash:

Resource Map showing 20,000+ pods with all operations under 37ms
Added pagination to the Pods list with a 1,000-item budget and a load-more button, preventing out-of-memory crashes on clusters with tens of thousands of pods.
Pod list showing 1,000 of ~35,600 pods with a Load more button lots of pods






📱 Mobile

A mobile audit was done, and a number of improvements were made.

Tables now hide least-important columns first on narrow viewports instead of squashing them, keeping visible data readable at high zoom levels. Thanks to @​skoeva. #​6468
Fixed several mobile UI issues including overflow-menu, dialog, terminal, editor, and temporary-sidebar behaviour, making the interface more reliable on small screens. Thanks to @​illume. #​5739
Tables now hide least-important columns first on narrow viewports instead of squashing them.
Resource table keeping important columns readable on a narrow viewport
Mobile overflow menus and terminal dialogs now use the available screen space more effectively.
Mobile overflow menu with labelled Settings and Account actions Full-screen terminal dialog using the available mobile viewport






✨ Enhancements (part 1 of 2)

Administrators can now set a custom default node shell image via a --node-shell-image flag and Helm value, useful for airgapped or restricted deployments. Thanks to @​aryanraj45. #​6056
The ServiceAccount detail page now lists all RoleBindings and ClusterRoleBindings that reference the account, making it easy to audit granted permissions. Thanks to @​sudhidutta7694. Also thanks to @​jcpunk for reporting the issue. #​6040
Added a structured creation form for DaemonSets, letting users create DaemonSet resources through the UI form alongside the existing YAML editor. Thanks to @​vyncent-t. #​6514
Added a structured CreateCronJobForm for CronJob resources, letting users configure schedule, time zone, concurrency policy, and job template fields through the UI. Thanks to @​vyncent-t. #​6422
Added a structured create form for Job resources with field validation, reusable metadata fields, and a new boolean/checkbox field type. Thanks to @​vyncent-t. #​6343
In-cluster context name is now automatically derived from the kubeadm-config ConfigMap, removing the need to manually set --in-cluster-context-name. Thanks to @​Anjali-Chauhan1. Also thanks to @​jcpunk for reporting the issue. #​6342
Added support for the binaryData field in ConfigMap detail and list views, so binary entries are now displayed, editable, and counted alongside data. Thanks to @​dabico. #​6264
Node debugger settings now show the actual default Docker image and namespace as dynamic placeholders, matching backend configuration including custom overrides. Thanks to @​dabico. #​6253
Added Arabic, Hebrew, and Russian localizations to the data table component so users of those languages see correctly translated table UI strings. Thanks to @​Priyanshu-rgbb. #​6226
YAML syntax errors in EditorDialog now display a red squiggly underline at the exact line and column, making it easier to spot and fix invalid YAML before applying. Thanks to @​Psykii22. #​5954
Added support for the binaryData field in ConfigMap detail and list views, so binary entries are now displayed, editable, and counted alongside data.
ConfigMap detail view showing binaryData field alongside data
Added a structured creation form for DaemonSets, letting users create DaemonSet resources through the UI form alongside the existing YAML editor.
DaemonSet structured creation form
YAML syntax errors in EditorDialog now display a red squiggly underline at the exact line and column, making it easier to spot and fix invalid YAML before applying.
Monaco editor showing red squiggly underline on YAML syntax error






✨ Enhancements (part 2 of 2)

Headlamp now auto-connects only to recently-used clusters on startup, avoiding slow or disruptive credential prompts for users with many clusters in their kubeconfig. Thanks to @​skoeva. #​6169
Added a --node-shell-namespace flag and Helm value so admins can configure the namespace used for node shell pods instead of defaulting to 'default'. Thanks to @​aryanraj45. #​6072
Added a structured create form for ReplicaSets with Metadata, Spec, and Pod Template sections, so users no longer need to write raw YAML to create one. Thanks to @​vyncent-t. #​5995
Added 100 as a rows-per-page option in resource tables, reducing the number of paginations needed when browsing namespaces with more than 50 resources. Thanks to @​ibshafique. #​5971
Added a color-coded usage progress bar to the ResourceQuota detail view, making it easy to spot quota pressure at a glance. Thanks to @​beep-boopp. #​5875
Added a desktop setting to optionally hide the system tray icon, giving users who prefer no tray presence an easy opt-out. Thanks to @​VlatkoMilisav. #​5754
Added a tooltip disclaimer next to Events tables explaining Kubernetes Event retention lifetime, helping users understand why older events may disappear. Thanks to @​dabico. #​5531
Headlamp now auto-connects only to recently-used clusters on startup, avoiding slow or disruptive credential prompts for users with many clusters in their kubeconfig.
Home page showing only recently-used clusters
Added a color-coded usage progress bar to the ResourceQuota detail view, making it easy to spot quota pressure at a glance.
ResourceQuota detail view with color-coded usage progress bar
Added a structured CreateCronJobForm for CronJob resources, letting users configure schedule, time zone, concurrency policy, and job template fields through the UI.
CronJob structured creation form
Added a tooltip disclaimer next to Events tables explaining Kubernetes Event retention lifetime, helping users understand why older events may disappear.
Events table with retention lifetime tooltip






🐞 Bug fixes (part 1 of 11)

Headlamp desktop now only terminates its own user's headlamp-server processes, preventing one user on a shared machine from killing another user's backend. Thanks to @​Aamod007. Also thanks to @​lombardialess for reporting the issue. #​6522
Resolved known npm dependency vulnerabilities across all packages by applying npm audit fixes. Thanks to @​yolossn. #​6671
Fixed the active tab highlight in NavigationTabs so tabs like Network Policies are correctly selected when hidden sidebar items are filtered out. Thanks to @​Adii-45. #​6251
Fixed port forwarding list appearing empty for dynamically added clusters by returning the correct cluster name instead of the internal user-suffixed cache key. Thanks to @​Athang69. Also thanks to @​ondrab1 for reporting the issue. #​6188
Fixed the Pods overview chart always showing 100% running by correctly reflecting pods in Error, CrashLoopBackOff, Pending, and other non-running states. Thanks to @​xonas1101. #​6114
Stale Kubernetes API responses and authorization clientsets are now purged immediately when a kube context is removed, preventing stale data from being served. Thanks to @​Pragati5-DEBUG. #​6113
StorageClass list no longer shows undefined in the Allow Volume Expansion column — the cell now displays Yes/No or remains empty when the field is absent. Thanks to @​dabico. #​6308
Added service.appProtocol support to the Headlamp Helm chart, fixing WebSocket and Gateway API compatibility issues with Kubernetes ingress routing. Thanks to @​cgiraldo. #​6049
StorageClass list no longer shows undefined in the Allow Volume Expansion column — the cell now displays Yes/No or remains empty when the field is absent.
StorageClass list with Yes/No in Allow Volume Expansion column






🐞 Bug fixes (part 2 of 11)

API discovery errors and fallbacks are now logged instead of silently swallowed, making it easier to diagnose why legacy discovery paths are being taken. Thanks to @​WasThatRudy. Also thanks to @​krsatyamthakur-droid for reporting the issue. #​6033
Helm chart env values schema now supports valueFrom (secretKeyRef, configMapKeyRef, fieldRef), enabling Kubernetes-native secret and config injection for Headlamp deployments. Thanks to @​Athang69. Also thanks to @​The-Judge for reporting the issue. #​6002
Fixed cache middleware crashing with 'invalid url format' on non-API cluster paths like /healthz, so proxied apiserver endpoints are handled correctly. Thanks to @​Nabsku. #​5798
Improved hook memoization and lazy initialization in ResourceTable settings, resolving React hook warnings without changing table behavior. Thanks to @​kishore08-07. #​5790
Added full support for Kubernetes Gateway API v1.5.1, including BackendTLSPolicy, GRPCRoute, and ReferenceGrant graduating to the Standard channel. Thanks to @​YotamKorah. #​5395
Fixed a race condition in kubeconfig WriteToFile that caused data corruption or missing files when concurrent calls occurred within the same second. Thanks to @​KumarADITHYA123. #​5309
Metrics unavailability (timeouts, CrashLoopBackOff, etc.) now correctly shows a 'metrics unavailable' state instead of silently displaying 0% CPU and memory usage. Thanks to @​Shreya2005-2005. #​5238
Guarded against undefined uid and name in search filtering, preventing a crash when resources with incomplete metadata appear in the list. Thanks to @​krsatyamthakur-droid. #​6680
Updated outdated frontend packages across app, headlamp-plugin, pluginctl, eslint-config, and i18n tooling to improve compatibility and security. Thanks to @​illume. #​6679
Fixed a failing cluster snapshot test on the main branch introduced by a recent merge. Thanks to @​illume. #​6665






🐞 Bug fixes (part 3 of 11)

Images embedded as raw HTML in GitHub release notes now render correctly in the Release Notes dialog instead of being silently dropped. Thanks to @​Pragati5-DEBUG. Also thanks to @​skoeva for reporting the issue. #​6642
Fixed the desktop e2e suite so all tests pass reliably and no longer corrupt the developer's kubeconfig on each run. Thanks to @​unlikelyzero. #​6641
Fixed the DataField editor collapsing to 5px at non-100% browser zoom levels by calculating container height in React instead of via imperative DOM mutations. Thanks to @​bhuvan-somisetty. Also thanks to @​hxl9654 for reporting the issue. #​6619
Fixed a crash on the Secrets list page caused by corrupt localStorage JSON for the 'Hide Helm Secrets' toggle, replacing the unguarded parse with safe fallback handling. Thanks to @​Aamod007. #​6526
Fixed a white-screen-on-boot caused by corrupt notifications localStorage JSON being parsed before any error boundary mounted, so the app now loads normally instead of crashing. Thanks to @​Aamod007. #​6524
Enforced minimum Vitest coverage thresholds for the frontend suite so CI automatically catches real regressions in statements, branches, functions, and lines. Thanks to @​rootp1. #​6486
Images embedded as raw HTML in GitHub release notes now render correctly in the Release Notes dialog instead of being silently dropped.
Release Notes dialog rendering HTML images from GitHub releases






🐞 Bug fixes (part 4 of 11)

Added a nil-error guard in the backend handleError helper to prevent a panic when a nil error is accidentally passed by any of its callers. Thanks to @​vtushar06. #​6437
Fixed a regression where searching for a namespace name flooded results with every resource in that namespace; the 'Set namespace' shortcut now appears correctly and only once. Thanks to @​Priyanshu-rgbb. #​6432
Fixed MULTI_HOME_ENABLED always evaluating to true, so setting REACT_APP_MULTI_HOME_ENABLED=false now correctly disables the Multi Home feature. Thanks to @​ssz2605. #​6424
Cluster rename via kubeconfig now returns an explicit error when the target context is missing, preventing silent failures that left state unchanged. Thanks to @​rootp1. #​6415
Fixed metricTargetValue() in HPA to correctly display 0% for zero averageUtilization values and ensure all metric types are evaluated properly. Thanks to @​skools-here. #​6412
Fixed typos in platform and contributing docs and updated Node.js/npm version prerequisites in plugin tutorials to match current package.json requirements. Thanks to @​Harsh63870. #​6408
Reformatted the Desktop App dependency list in the architecture docs as a Markdown bullet list, improving readability. Thanks to @​kunaldevsahu. #​6384
Fixed a typo in the CronJob list's lastScheduleTime accessor so the Last Schedule column can now be sorted and filtered correctly. Thanks to @​skools-here. #​6383
Fixed a regression where searching for a namespace name flooded results with every resource in that namespace; the 'Set namespace' shortcut now appears correctly and only once.
Global search showing only the Set namespace shortcut for a bare namespace query






🐞 Bug fixes (part 5 of 11)

Fixed a stale WebSocket subscription in useKubeObject when navigating between resources of the same kind, ensuring live updates reflect the correct resource. Thanks to @​Adii-45. #​6345
Fixed PortForward tooltip translation, added secure rel attributes to external links, and hardened localStorage parsing to prevent crashes or UI desync on failures. Thanks to @​KumarADITHYA123. #​6341
Wrapped recentClusters localStorage reads in try/catch to prevent app startup crashes when stored data is corrupted or unreadable. Thanks to @​Kakumanu-Harshitha. #​6310
Guarded useLocalStorageState against corrupted data and QuotaExceededError, preventing blank-screen crashes across 13 components that rely on it. Thanks to @​Kakumanu-Harshitha. #​6307
Fixed frontend test failures on Node.js 24 caused by an AbortSignal incompatibility between jsdom, nock, and the native Request implementation. Thanks to @​vanshika2720. #​6299
Hardened loadTableSettings and storeTableSettings against corrupt localStorage data, preventing blank-screen crashes on all resource list views. Thanks to @​Kakumanu-Harshitha. #​6298
Fixed duplicate HTML id attribute in TimezoneSelect Autocomplete to prevent conflicts when both TimezoneSelect and Chooser are rendered on the same page. Thanks to @​Priyanshu-rgbb. #​6281






🐞 Bug fixes (part 6 of 11)

Fixed parseCpu() to use parseFloat so decimal CPU values like 0.5 or 1.5 cores are parsed correctly instead of being silently truncated. Thanks to @​xonas1101. #​6259
Fixed 'Phase: undefined' display in the Project Resources tab by falling back to 'Unknown' when a pod's phase is not yet reported. Thanks to @​krsatyamthakur-droid. #​6257
Fixed Job detail page incorrectly showing Duration: 0s for still-running jobs; the duration row is now hidden until the job completes. Thanks to @​xonas1101. #​6237
Fixed a nil pointer dereference panic in OidcConfig() when AuthInfo is nil, preventing crashes during token-based or unresolved-user authentication. Thanks to @​Anjali-Chauhan1. #​6235
Replaced bare fmt.Println calls in backend startup with structured logging so startup messages are now captured consistently by the logger. Thanks to @​Rucha0901. #​6224
Fixed the YAML/JSON editor scrolling back to the top on validation errors, so users editing large manifests no longer lose their position while typing. Thanks to @​krsatyamthakur-droid. Also thanks to @​prisha-sh for reporting the issue. #​6209
Cluster connection warning bar is now dismissible, shows the real failure reason with an actionable link, and no longer overlaps window controls. Thanks to @​Anjali-Chauhan1. Also thanks to @​rnc for reporting the issue. #​6206
Fixed a crash in Chrome when the system timezone resolves to an unrecognized identifier like Etc/Unknown, preventing a RangeError on affected Linux systems. Thanks to @​bhuvan-somisetty. Also thanks to @​adriansev for reporting the issue. #​6204
Fixed a React hooks violation in CreateNamespaceButton by deriving validation state during render instead of via useEffect, eliminating the stale-state bug. Thanks to @​Shahazadi-Shaguftha-Syed. #​6192
Fixed Jobs, CronJobs, and JobSet overview charts that were always stuck at 100% healthy by adding correct status logic for workloads without replica fields. Thanks to @​xonas1101. #​6185
Cluster connection warning bar is now dismissible, shows the real failure reason with an actionable link, and no longer overlaps window controls.
Dismissible cluster connection warning bar with failure reason and settings link






🐞 Bug fixes (part 7 of 11)

Fixed OIDC login 404s in local dev by correcting the proxy path from /auth to /auth/, and enforced LF line endings for TS/JS/JSON files. Thanks to @​kjosh-bcvmw. #​6184
Fixed a crash when loading kubeconfigs containing non-Latin1 characters (e.g. Chinese cluster names) by replacing btoa() with UTF-8-safe base64 helpers. Thanks to @​Anjali-Chauhan1. Also thanks to @​youngledo for reporting the issue. #​6178
Fixed the Activity tab title for workload logs so it is now properly localized instead of always showing a hardcoded English 'Logs: ' prefix. Thanks to @​Adii-45. #​6171
Container status tooltips in the Pods list are now translated and respect the user's configured timezone instead of always showing English text and UTC times. Thanks to @​krsatyamthakur-droid. #​6168
Fixed a translation key case mismatch in LogsButton so the correct localized string is now displayed. Thanks to @​srajang1805. #​6163
Fixed broken frontend snapshot tests on main caused by a merge conflict with outdated snapshots. Thanks to @​illume. #​6160
Fixed a variable name typo (namepsace → namespace) and removed dead commented-out code in NodeShellAction with no functional changes. Thanks to @​srajang1805. #​6159
Added optional chaining to KubeObject subclasses so the UI gracefully handles incomplete Kubernetes object data instead of throwing TypeErrors. Thanks to @​Psykii22. #​6145
Fixed a typo in the node drain status error message ('repsone' → 'response') for clearer error reporting. Thanks to @​Rucha0901. #​6141






🐞 Bug fixes (part 8 of 11)

Isolated TestDynamicClustersKubeConfig to a temp directory so test runs no longer pollute the user's real Headlamp config. Thanks to @​Athang69. Also thanks to @​sniok for reporting the issue. #​6136
Fixed a spelling mistake ('listernerApi' → 'listenerApi') in headlampEventSlice for cleaner, more readable code. Thanks to @​rutujdhawale. #​6131
Fixed a cache-key collision in k8cache by percent-encoding literal '+' characters so the '+' delimiter is no longer ambiguous with field content. Thanks to @​sid200727. #​6127
Fixed a Storybook startup failure caused by a circular dependency on Node story helpers, allowing all stories to load correctly. Thanks to @​mahesh-09-12. #​6126
Replaced loose any typing on DocsViewer's docSpecs prop with a strict type, improving type safety and editor autocompletion. Thanks to @​r0hansaxena. #​6098
Fixed the CRD Details Versions table incorrectly showing the storage value in the Served column instead of the served value. Thanks to @​mahesh-09-12. #​6095
Fixed a rules-of-hooks violation in AuthVisible that could cause unexpected behavior by ensuring all hooks run before any early returns. Thanks to @​therealharshit. Also thanks to @​illume for reporting the issue. #​6092
Centralized the hardcoded backend base URL into a single API_BASE constant across Storybook stories, making future URL changes a one-line update. Thanks to @​xonas1101. #​6088
Wrapped hardcoded English strings on the Custom Resource Instances page with i18n so they are now correctly translated with the rest of the UI. Thanks to @​krsatyamthakur-droid. #​6087






🐞 Bug fixes (part 9 of 11)

Fixed a react-hooks/exhaustive-deps lint suppression in ViewButton by using a ref for the initial toggle value, making the effect correctly dependency-safe. Thanks to @​JoSParker. #​6086
Fixed Rules of Hooks violations in RestartButton by moving all hook calls before the early-return guard, preventing potential runtime errors. Thanks to @​nabrahma. Also thanks to @​illume for reporting the issue. #​6066
Fixed security vulnerabilities by updating npm dependencies via audit fix. Thanks to @​skoeva. #​6055
Replaced Math.random() with React 18's useId() in the useId utility, fixing a react-hooks/purity lint violation during render. Thanks to @​Shahazadi-Shaguftha-Syed. #​6041
Added a regression test for undefined i18n locale handling in ThemeProviderNexti18n, preventing reintroduction of the Firefox crash fixed in #​5802. Thanks to @​mahesh-09-12. #​6026
Fixed stale YAML data in the resource editor by fetching the latest object from the API before opening, ensuring edits always reflect the current state. Thanks to @​ayushmaan-16. #​6014
Added regression tests for the LimitRangeDetails component to verify Container Limits and other DetailsGrid configuration are correctly exposed. Thanks to @​mahesh-09-12. #​6013
Fixed getPercentStr() so whole-number percentages no longer display a spurious trailing .0, keeping metric displays clean and readable. Thanks to @​xonas1101. #​6000
Fixed a crash on the Gateways page when a Gateway resource has no spec.listeners, preventing a blank view for users with incomplete Gateway objects. Thanks to @​Anjali-Chauhan1. Also thanks to @​jianchao990-bit for reporting the issue. #​5996
Log viewer preferences for auto-scroll (follow) and show-timestamps are now saved to localStorage so they persist across browser sessions. Thanks to @​Athang69. Also thanks to @​prisha-sh for reporting the issue. #​5993
Fixed a crash on the Gateways page when a Gateway resource has no spec.listeners, preventing a blank view for users with incomplete Gateway objects.
Gateway list view rendering correctly with incomplete spec






🐞 Bug fixes (part 10 of 11)

Port-forward requests using an already-active ID now return HTTP 409 Conflict instead of silently overwriting the session, preventing port and goroutine leaks. Thanks to @​Nyx128. #​5990
Added regression tests for the IngressDetails component covering metadata, TLS configuration, and rules rendering to guard against future regressions. Thanks to @​mahesh-09-12. #​5966
Fixed row selections disappearing after polling refreshes in resource tables when any row lacks a metadata.uid, keeping selections stable across data refreshes. Thanks to @​WasThatRudy. Also thanks to @​prisha-sh for reporting the issue. #​5952
Fixed open-redirect bypass in isValidRedirectPath by stripping whitespace and decoding URL-encoded sequences before protocol checks, preventing malicious redirect exploits. Thanks to @​Athang69. #​5920
Fixed malformed i18n interpolation syntax in CreateNamespaceButton, eliminating duplicate translation keys during extraction. Thanks to @​xonas1101. #​5919
Fixed Restart button visibility using patch permission instead of update, so users see and can use the button only when they have the correct access. Thanks to @​mishradwaterlaw. Also thanks to @​wiswesser for reporting the issue. #​5908
Replaced deprecated addListener/removeListener calls in the color-scheme hook with the standard addEventListener API, removing browser deprecation warnings. Thanks to @​YadavAkhileshh. #​5785






🐞 Bug fixes (part 11 of 11)

Removed an unused themeName dependency from the MUI theme hook, eliminating a spurious eslint warning and avoiding unnecessary theme recomputation. Thanks to @​kishore08-07. #​5768
Fixed incorrect useMemo and useEffect dependencies in NumRowsInput so rows-per-page settings are computed and applied correctly when options change. Thanks to @​kishore08-07. #​5767
Fixed a cache authorization bug where named Kubernetes resource requests used the object name instead of the resource type in access reviews, preventing incorrect authorization failures. Thanks to @​harrshita123. #​5719
Fixed service proxy incorrectly converting upstream non-200 responses into 500 errors, so real upstream status codes like 404 are now accurately passed through. Thanks to @​harrshita123. #​5589
Fixed theme name capitalization mangling multi-word custom theme names in the Settings picker and Search bar. Thanks to @​dabico. #​5549
Fixed a stale closure bug in the Resource Map so node topology now correctly updates when cluster nodes are added or removed. Thanks to @​KumarADITHYA123. #​5389
Aligned the Pods list's Load more control with the right-side header actions while keeping the create button beside the title. Thanks to @​rootp1. #​6721
Fixed Resource Map viewport fitting, namespace simplification, and resize stability, while hiding performance diagnostics unless explicitly enabled. Thanks to @​illume. #​6718
Fixed shared WebSocket watches so all subscribers receive updates and one subscriber cannot disconnect the others. Thanks to @​rootp1. #​6719






🔒 Security

Release checksums are now signed with cosign keyless signing, improving OpenSSF Scorecard's Signed-Releases score for future releases. Thanks to @​Athang69. #​6656
Updated backend dependencies (Go, oras-go, grpc, crypto, text) and frontend i18next-fs-backend, plus refreshed Dockerfile node image digests. Thanks to @​skoeva. #​6330
Bumped Alpine to 3.24.1, containerd to 1.7.33, and Go to 1.26.4 in the Dockerfile to patch known vulnerabilities. Thanks to @​skoeva. #​6135
Bumped undici to 6.27.0 in app and 7.28.0 in headlamp-plugin to address security vulnerabilities. Thanks to @​skoeva. #​6133
Moved cluster hooks to break a circular import that previously caused CodeQL's TypeScript extractor to hang, enabling SAST scanning. Thanks to @​Athang69. #​6076
Expanded backend fuzz test coverage for parser and normalizer code paths, improving reliability and security of backend input handling. Thanks to @​tejhan. #​6063
Release checksums are now signed with cosign keyless signing, improving OpenSSF Scorecard's Signed-Releases score for future releases.
Cosign keyless signing verification for release checksums

♿ Accessibility

Fixed xterm terminal e2e tests that were unconditionally skipping all cases, so theme and accessibility assertions now actually run. Thanks to @​Anjali-Chauhan1. Also thanks to @​unlikelyzero for reporting the issue. #​6666
Enabled automated accessibility checks on the plugin settings and details pages in end-to-end tests, catching a11y regressions earlier. Thanks to @​PrakharJain345. #​6213
Replaced native browser title tooltips across the UI with Headlamp's styled tooltips for a consistent look and feel throughout the application. Thanks to @​xonas1101. Also thanks to @​CygnusMaximillian for reporting the issue. #​5977
Restored the macOS desktop Zoom In keyboard shortcut (Cmd+Plus), fixing a regression that broke the accelerator while Zoom Out and Reset Zoom continued to work. Thanks to @​rootp1. #​6714
Fixed "User-installed" plugin chip text color to meet WCAG AA contrast requirements, improving readability in both light and dark themes. Thanks to @​vtushar06. Also thanks to @​illume for reporting the issue. #​6110
Removed incorrect aria-label overrides from ConfirmDialog, RollbackDialog, and ScaleMultipleButton so screen readers now announce the visible button text instead of raw identifiers. Thanks to @​unlikelyzero. #​6653
Fixed Tab key navigation on the Create Resource page so all tabs and panel content are keyboard-accessible without requiring a mouse. Thanks to @​vyncent-t. #​6597
Wrapped the ActivityBar Close button's aria-label in t() so screen readers announce it in the user's chosen language. Thanks to @​krsatyamthakur-droid. #​6357
Resource Map zoom/fit controls now have translated aria-label values, improving screen-reader experience for non-English users. Thanks to @​Kakumanu-Harshitha. #​6317
Fixed aria-controls on EditorDialog buttons (Undo, Dry Run, Save & Apply) to reference the actual textarea, improving screen-reader accessibility. Thanks to @​Suyog241005. #​5956
Fixed Space key not activating graph nodes in the Map view by correcting the key check from 'Space' to ' ', restoring full keyboard navigation for keyboard users. Thanks to @​vtushar06. #​5923
Integrated automated accessibility (a11y) checks via axe-core/playwright and stabilized pluginctl tests by fixing broken dependencies and locale-dependent selectors. Thanks to @​vishnukothakapu. #​5413
Extended E2E accessibility scanning to the Services and Security pages, broadening automated a11y coverage across key navigation areas. Thanks to @​srajang1805. #​6016

📖 Documentation

Fixed a typo in the log function docstring so the logger package documentation correctly references the unexported function name. Thanks to @​saiashok0981. #​6576
Expanded in-cluster docs with working YAML examples for using a custom kubeconfig, correcting misleading claims that caused user confusion. Thanks to @​akshattalwar001. Also thanks to @​illume for reporting the issue. #​6538
Replaced @todo placeholders with proper JSDoc comments on frontend API endpoints, improving the developer experience when working with the API layer. Thanks to @​Psykii22. #​6347
Added an Example MCP Servers section to the MCP support docs with ready-to-use configurations for three local stdio servers. Thanks to @​vtushar06. #​6060

🔌 Plugins

Plugins can now register non-clickable section headers in the sidebar using registerSidebarEntry with entryType: 'subheader' to better organize navigation. Thanks to @​Soli0222. #​6108
Added a config.staticPlugins.enabled Helm value so users can officially disable the bundled Prometheus and other static plugins without undocumented workarounds. Thanks to @​Anjali-Chauhan1. Also thanks to @​KhaledELG for reporting the issue. #​6142
Plugins can now filter or hide HOME sidebar menu items using the new registerHomeSidebarEntryFilter API, matching existing in-cluster sidebar capabilities. Thanks to @​Suyog241005. Also thanks to @​danp60 for reporting the issue. #​6111
Plugin installation now works behind corporate TLS-inspecting proxies on Windows by trusting OS-level CA certificates and surfacing clearer TLS error messages. Thanks to @​Anjali-Chauhan1. Also thanks to @​junkiebev for reporting the issue. #​6379
Fixed deletion of catalog-installed plugins migrated before user-plugins/ existed, so DELETE /plugins/{name}?type=user no longer fails with a 'not found' error. Thanks to @​Pritz395. Also thanks to @​skoeva for reporting the issue. #​6573
Migrated headlamp-plugin tsconfig moduleResolution from deprecated node to bundler, eliminating the deprecation warning and aligning with the existing module settings. Thanks to @​Athang69. #​6515
Added try/catch around JSON.parse in the plugin-manager IPC handler so parse errors are returned to the renderer instead of crashing as unhandled rejections. Thanks to @​krsatyamthakur-droid. #​6471
Removed deprecated 'baseUrl' and 'node10' moduleResolution from the plugin TypeScript config, aligning path resolution with TypeScript 6 and Vite bundling. Thanks to @​Athang69. Also thanks to @​sniok for reporting the issue. #​6439
Plugin load failures now show an error notification instead of silently failing, so users are informed when plugins cannot be loaded. Thanks to @​krsatyamthakur-droid. #​6351
Plugin settings stored in localStorage are now safely parsed, preventing crashes when the stored JSON is corrupt or malformed. Thanks to @​xonas1101. #​6152
Fixed HEADLAMP_CONFIG_WATCH_PLUGINS_CHANGES being ignored in-cluster so plugin watch behavior now correctly follows the environment variable or CLI flag. Thanks to @​harrshita123. #​5591
The plugins container build now matches the host platform by default, fixing mismatched architectures on Apple Silicon Macs and allowing the platform to be overridden via environment variable. Thanks to @​unlikelyzero. #​6638
Added error handling around JSON.parse in the frontend pluginManager so malformed IPC responses no longer cause unhandled exceptions or skip cleanup. Thanks to @​Khizarshah01. #​6630
Plugin commands now run with the user's login-shell environment, allowing desktop app launches to resolve executables installed outside the GUI process PATH. Thanks to @​illume. #​6598
Replaced deprecated fs.rmdirSync calls with fs.rmSync in plugin management code to eliminate Node.js deprecation warnings. Thanks to @​skools-here. #​6073
Bumped headlamp-plugin to version 0.14.0. Thanks to @​illume. #​5579
Plugins can now register non-clickable section headers in the sidebar using registerSidebarEntry with entryType: 'subheader' to better organize navigation.
Sidebar with non-clickable section headers

💻 Development (part 1 of 8)

Updated the e2e-tests README to accurately document the two-cluster kind setup required, preventing misleading test failures that resemble product bugs. Thanks to @​unlikelyzero. #​6658
Fixed the desktop e2e suite so it runs correctly by following the documented steps, resolving a missing script error and an undocumented setup requirement. Thanks to @​unlikelyzero. #​6654
Moved the canvas mock into the shared Vitest setup, eliminating redundant per-test imports and reducing frontend test harness noise. Thanks to @​rootp1. #​6569
Added gambtho as a project reviewer. Thanks to @​gambtho. #​6406
Added skoeva to the headlamp-maintainers list in OWNERS_ALIASES. Thanks to @​skoeva. #​6336
Added backend tests for RemoveContextFromFile covering missing-context and empty-path edge cases, improving kubeconfig error-handling coverage. Thanks to @​CygnusMaximillian. #​6496
Fixed the health-check polling interval not resetting after cluster recovery, so the backoff no longer grows indefinitely without a manual retry. Thanks to @​xonas1101. #​6446






💻 Development (part 2 of 8)

Fixed Pod detailed status showing 'Signal:undefined' for containers that exit without a signal, correctly displaying the exit code instead. Thanks to @​ssz2605. #​6442
Kubeconfig cluster load failures now log at console.error level instead of console.debug, making the root cause visible in the browser console. Thanks to @​Khizarshah01. #​6435
Replaced context.TODO() with context.Background() in service proxy tests, aligning test code with Go best practices. Thanks to @​ssz2605. #​6421
Removed an unreachable duplicate cache-hit check in getDetailedStatus(), cleaning up dead code without changing behaviour. Thanks to @​skools-here. #​6405
Added unit tests for the Context.AuthType() method in the kubeconfig package, increasing backend test coverage. Thanks to @​CygnusMaximillian. #​6375
Global search now matches resources by namespace and displays the namespace alongside the resource kind, making it easier to distinguish resources with the same name. Thanks to @​Priyanshu-rgbb. #​6356
Fixed renameCluster backend handler to correctly return errors on duplicate cluster names and cache update failures instead of silently reporting success. Thanks to @​vtushar06. #​6302
Restored translation strings accidentally cleared by a previous revert, fixing missing UI text across multiple locales. Thanks to @​sniok. #​6271
Added unit tests for the OIDCAuth component covering redirect rendering, local storage auth status, and query parameter handling. Thanks to @​PrakharJain345. #​6268






💻 Development (part 3 of 8)

Cleaned up TypeScript return-type annotations in frontend API modules by adding explicit types and removing stale @todo comments; no behavior change. Thanks to @​therealharshit. #​6244
Fixed stale cache data for named GET and all-namespace list requests by ensuring informer events now invalidate those cache keys alongside list-shaped keys. Thanks to @​Pragati5-DEBUG. #​6230
Extracted server startup and shutdown logic from StartHeadlampServer into a dedicated runServer helper, improving code clarity without changing behavior. Thanks to @​srajang1805. #​6217
Moved OIDC token refresh middleware into the dedicated auth package, improving code organisation without changing authentication behavior. Thanks to @​srajang1805. #​6211
Refactored OIDCAuth internals by extracting a shared AUTH_STATUS_KEY constant and fixing the useEffect dependency array; no behaviour changes. Thanks to @​Priyanshu-rgbb. #​6203
Windows x64 and arm64 release builds now run independently so a failure in one architecture no longer cancels the other, avoiding lost artifacts and full workflow reruns. Thanks to @​skoeva. #​6181
Bumped service-appprotocol chart version to 0.43.0 to fix failing CI chart tests. Thanks to @​skoeva. #​6165
Added an explicit return type to KubeObject.apiList, replacing the implicit any inference to improve type safety with no runtime changes. Thanks to @​somaz94. #​6148
Added unit tests for buildHeadlampCFG to ensure configuration flags are correctly mapped to the HeadlampCFG struct. Thanks to @​CygnusMaximillian. #​6121
LimitRange detail view now displays maxLimitRequestRatio alongside other constraints for a more complete resource overview. Thanks to @​srajang1805. #​6116






💻 Development (part 4 of 8)

Added a confirmation warning when deleting protected Kubernetes system namespaces (default, kube-system, etc.) to prevent accidental cluster damage. Thanks to @​Anjali-Chauhan1. Also thanks to @​hstarorg for reporting the issue. #​6106
Added a test for MarshalCustomObject error handling to ensure invalid JSON is correctly caught and surfaced in the backend. Thanks to @​CygnusMaximillian. #​6102
Added JSON marshaling/unmarshaling unit tests for ClusterReq to improve backend reliability and catch serialization regressions. Thanks to @​CygnusMaximillian. #​6101
Added unit tests for the Ingress model class covering address, host, and rule parsing to improve frontend reliability. Thanks to @​srajang1805. #​6082
Added unit tests for DaemonSet and StatefulSet model classes, improving confidence in container and node selector logic. Thanks to @​srajang1805. #​6081
Mac binaries are now code-signed by default when triggering app builds, ensuring users receive trusted macOS releases. Thanks to @​sniok. #​6079
Fixed compareUnits to use parseFloat instead of parseInt so fractional resource values like CPU millicores are compared correctly. Thanks to @​Suyog241005. #​6068
Added unit tests for buildTelemetryConfig and loadOidcCACert helper functions, improving backend config test coverage. Thanks to @​aryanraj45. #​6052
Added unit test for returnGVRList in the k8s cache invalidation package, closing a previously untested code path. Thanks to @​CygnusMaximillian. #​6048






💻 Development (part 5 of 8)

Added test coverage for PriorityClass, PodDisruptionBudget, and HorizontalPodAutoscaler components, verifying columns, extraInfo, and fallback values. Thanks to @​aryanraj45. #​6047
Added test coverage for Lease, RuntimeClass, and StorageClass components, verifying their resource-specific column and detail configurations. Thanks to @​aryanraj45. #​6042
Simplified OIDCTokenRefreshMiddleware by inlining helper functions and consolidating repeated metric calls into a single deferred call, reducing code duplication. Thanks to @​skoeva. #​6039
Added 18 unit tests for the Service model covering external addresses, ports, formatted ports, and selectors, improving confidence in Service data handling. Thanks to @​srajang1805. #​6017
Replaced %v with %w in backend fmt.Errorf calls so error chains are preserved, enabling proper errors.Is and errors.As unwrapping throughout the backend. Thanks to @​Psykii22. #​5997
Node roles in the list view are now separated by ", " instead of ",", matching the formatting on the node details page for a consistent look. Thanks to @​skoeva. #​5994
Added unit tests for the k8cache resource-filtering logic, ensuring the goroutine-reduction behaviour introduced in #​4670 is verified by deterministic tests. Thanks to @​Pragati5-DEBUG. #​5957
Localized the 'Lines' label and 'All' menu item in the logs viewer Lines selector so they are now translated consistently with the rest of the toolbar. Thanks to @​vtushar06. #​5944






💻 Development (part 6 of 8)

Added unit tests for the recentClusters helper, covering deduplication, cluster cap, and edge cases to prevent silent regressions. Thanks to @​RajPrakash681. #​5831
Added unit tests for the clusterSettings helper, guarding against silent regressions in cluster-specific configuration storage used across 14 files. Thanks to @​RajPrakash681. #​5829
Switched kubeconfig error formatting from %v to %w, enabling proper error unwrapping with errors.Is() and errors.As(). Thanks to @​vmridul. #​5786
Added negative tests confirming that mutating and proxy endpoints correctly reject callers missing a valid X-HEADLAMP_BACKEND-TOKEN header, guarding against auth regressions. Thanks to @​vyncent-t. #​5657
Fixed OIDC login to return a proper 500 Internal Server Error when state generation fails, and made the random source injectable for reliable testing. Thanks to @​harrshita123. #​5643
Hardened the parseKubeConfig test to assert the handler writes exactly one response, preventing silent double-write regressions from going undetected. Thanks to @​harrshita123. #​5599
Added regression tests ensuring unavailable cluster errors are non-selectable and forbidden resource requests do not retry unnecessarily. Thanks to @​harrshita123. #​5535






💻 Development (part 7 of 8)

Added Storybook snapshot stories for the ClusterBadge sidebar component, giving it automated visual regression coverage for the first time. Thanks to @​xonas1101. #​6482
Added Storybook snapshot stories for the sidebar VersionButton in both expanded and collapsed states, closing the gap in snapshot test coverage. Thanks to @​xonas1101. #​6448
Added Storybook stories for ConditionList, covering its status-colour mapping and render output to include it in snapshot test coverage. Thanks to @​xonas1101. #​6396
Added Storybook stories for PhaseLabel covering all colour-mapping branches, which also serve as snapshot tests to prevent regressions. Thanks to @​xonas1101. #​6371
Added Storybook snapshot stories for ThemePreview, NumRowsInput, and other Settings widgets, increasing test coverage for that area. Thanks to @​xonas1101. #​6316
Added Storybook stories for the ServiceAccount Details view, enabling visual regression testing and easier isolated development of that component. Thanks to @​bhuvan-somisetty. Also thanks to @​Shahazadi-Shaguftha-Syed for reporting the issue. #​6295
Added Storybook stories for the node UpgradeVisualizationPanel, covering upgrading and idle states to enable visual regression testing. Thanks to @​xonas1101. #​6285
Added dedicated Storybook stories for SectionFilterHeader, improving visual regression coverage and enabling isolated development of filter header states. Thanks to @​xonas1101. #​6262
Consolidated Label component Storybook stories into a single file and added missing variants for more complete visual coverage. Thanks to @​jainarjav80-sys. Also thanks to @​xonas1101 for reporting the issue. #​6195
Added Storybook stories and storyshots for VolumeAttributesClass list and detail views to catch UI regressions early. Thanks to @​Suhani95. #​6078
Added Storybook stories for the JobDetails component, enabling snapshot-based regression testing for the job details view. Thanks to @​xonas1101. #​6051






💻 Development (part 8 of 8)

Replaced deprecated github.com/pkg/errors with Go's standard errors and fmt.Errorf(%w), removing an unnecessary third-party dependency. Thanks to @​Psykii22. #​6045
Added Storybook stories for DryRunPreviewDialog covering open, closed, and large YAML preview states, making it easier to visually validate dialog behaviour. Thanks to @​Suhani95. #​6032
Added Storybook snapshot stories for the DaemonSet Details view, improving test coverage for Update Strategy, Selector, Tolerations, and Containers sections. Thanks to @​xonas1101. #​6030
Added a Storybook story for the 404 NotFoundComponent, giving it snapshot-based regression coverage alongside the rest of the component library. Thanks to @​xonas1101. #​5979
Introduced shared ConditionList, PhaseLabel components and a getReadyCondition utility to eliminate duplicated status-rendering code across multiple resource views. Thanks to @​Athang69. #​5968
Added Storybook snapshot stories for RBAC role components (List, Details, BindingList, BindingDetails), giving these views regression test coverage for the first time. Thanks to @​xonas1101. #​5961
Added Storybook stories for ServiceAccount Details and List views, providing snapshot-based regression coverage for those components. Thanks to @​Shahazadi-Shaguftha-Syed. #​5955
Added Storybook stories for GlobalSearchContent covering empty input, loading, and results states, enabling snapshot regression testing for the global search UI. Thanks to @​yuki681. #​5945
Added Storybook snapshot stories for the node Details and Charts components, adding regression coverage for CPU/memory usage charts and node detail views. Thanks to @​xonas1101. #​5942
Added Storybook stories for the DeleteButton component, covering all main visual states to improve UI development and review. Thanks to @​sudhidutta7694. #​5893

Container image: 🐳 ghcr.io/headlamp-k8s/headlamp:v0.44.0
Desktop Apps:

🐧 Flatpak / Linux (AMD64)
🐧 Linux AppImage AMD64, ARM64, ARMv7l
🐧 Linux Tarball AMD64, ARM64, ARMv7l
🐧 Debian / Linux AMD64
🍏 Mac (AMD64)
🍏 Mac (ARM/M1-M5)
🟦 Windows (AMD64)
🟦 Windows (ARM64)

v0.43.0: 0.43.0

Compare Source

✨ Enhancements

  • Added opt-in service account token auth for in-cluster deployments, enabling Headlamp to work behind OIDC or other external auth proxies. Thanks to @​0xMH and @​unixpariah. Also thanks to @​yolossn for reporting the issue.
  • Helm chart probes now support a configurable scheme (HTTP/HTTPS) and full timing settings, enabling correct probe behavior when backend TLS is enabled. Thanks to @​gambtho. Also thanks to @​mbasha86 for reporting the issue.
  • Added alpha support for ClusterProfile discovery via the Cluster Inventory API, enabling automatic multi-cluster registration without manual kubeconfig setup. Thanks to @​kahirokunn.
  • Added hostAliases support to the Helm chart pod template, allowing custom host-to-IP mappings to be configured via chart values. Thanks to @​VijayabaskarR-06. Also thanks to @​geochip for reporting the issue.
  • Added Russian language support to the frontend, making Headlamp more accessible for Russian-speaking users. Thanks to @​Future998.
  • Added proxy auth support so Headlamp can read authentication headers injected by middleware proxies for seamless cluster access. Thanks to @​ageekymonk.
  • Added dry-run preview for rollbacks, letting users inspect the resulting resource YAML before applying a rollout undo. Thanks to @​alokdangre. Also thanks to @​illume for reporting the issue.
  • Added a node upgrade visualization panel showing Cordon, Drain, Delete, Reimage, Complete progress for managed nodes. Support for visualising upgrades in more k8s distros and systems coming soon. Thanks to @​Jenniferyingni
  • Added RTL layout support and new locales for Arabic, Urdu, and Hebrew, with the UI direction switching automatically based on the selected language. Thanks to @​mahmoodalisha.
  • Completed missing Hindi translations for UI strings, ensuring users with a Hindi locale see a fully translated interface. Thanks to @​mahmoodalisha.
  • Added a batch scale action to the multi-select toolbar, letting users scale multiple Deployments, StatefulSets, or ReplicaSets at once. Thanks to @​RajPrakash681.
  • Added registerProjectApiResource() to the plugin API, enabling plugins to include custom CRDs in Project resource fetching. Thanks to @​NAME-ASHWANIYADAV.
  • Added a diagnostics section to Pod and workload detail pages that surfaces deterministic troubleshooting hints from Kubernetes status, events, and container data. Thanks to @​Utkarshpandey0001.
  • Added a Dry Run option to the YAML editor, letting users validate manifests against the Kubernetes API before applying them. Thanks to @​Vikaspal8923.
  • Made the Back button on the cluster authentication chooser keyboard-accessible by adding tab focus and Enter/Space key handling. Thanks to @​YadavAkhileshh.
  • Added missing French translations, improving UI localization coverage and keeping Kubernetes terms like "cluster" technically accurate. Thanks to @​codeurluce.
  • Integrated @​typescript/native-preview for frontend type checking, cutting type-check time from ~18-20 seconds down to ~3-4 seconds. Thanks to @​sniok.
  • Advanced Search queries can now be saved to browser local storage and restored, renamed, or deleted from the toolbar. Thanks to @​Utkarshpandey0001.
  • Added a dedicated Job details view surfacing completions, parallelism, backoff limit, active/succeeded/failed counts, and more, replacing the generic workload view. Thanks to @​beep-boopp.
  • Added remark-gfm to the headlamp-plugin do-not-copy list to prevent it from being incorrectly bundled into plugin builds. Thanks to @​illume.
  • Added ReadHeaderTimeout and IdleTimeout to the backend HTTP server, reducing slow-request attack risk while keeping logs and WebSockets unaffected. Thanks to @​ayushmaan-16.
  • Helm chart now supports setting a default pod debug image via values, used as the fallback when no per-cluster override is configured. Thanks to @​harrshita123.
  • Events table on the cluster overview page now includes a Node column showing which node emitted each event. Thanks to @​VijayabaskarR-06. Also thanks to @​trashhead for reporting the issue.
  • Job details view now includes a Logs button, letting you view logs from related pods without leaving the Job page. Thanks to @​ChunyiLyu.
  • Added a container query parameter to pod log and exec deep-links, letting users link directly to a specific container's logs or terminal. Thanks to @​jordanly.
  • Resource detail views now show additional fields matching kubectl describe output, including port info for NodePort services. Thanks to @​joaquimrocha.
  • Added a Create Deployment form to the UI, letting users create Deployments directly alongside the existing Pod creation workflow. Thanks to @​vyncent-t.
  • Helm repository add and update operations now support authentication fields including username, password, and TLS options for private repositories. Thanks to @​Athang69.
  • Added --default-light-theme and related CLI flags so administrators can configure the default UI theme at runtime based on OS preference. Thanks to @​guillaumebernard84.
  • Added Windows Arm64 desktop builds, expanding native platform coverage to Arm-based Windows devices. Thanks to @​illume.
  • Added Bengali language support to the frontend and translated technical Kubernetes jargon, improving localization for Bengali-speaking users. Thanks to @​Pratik-050.
  • Node List and Details views now show the node pool, with a new getNodePool() method on the node model and Nodes added as a source to the Cluster group in the resource map. Thanks to @​illume.
  • Added an opt-in Chromium remote debugging port to the Electron app, enabling devtools and MCP integrations. Thanks to @​yolossn
  • Added a kubeconfig secretreader example to the Helm chart, pinned the Cluster Inventory provider images, and allowed Cluster Inventory commands to run under plugin mounts. Thanks to @​kahirokunn.
Added alpha support for ClusterProfile discovery via the Cluster Inventory API
Headlamp UI showing alpha ClusterProfile discovery via the Cluster Inventory API
Added RTL layout support and new locales for Arabic, Urdu, and Hebrew
Headlamp UI with right-to-left layout and Arabic locale
Added a node upgrade visualization panel
AKS node upgrade visualization panel summary view AKS node upgrade visualization panel detailed view
Added Russian language support to the frontend
Headlamp frontend displayed with Russian language support
Added proxy auth support for middleware proxies
Proxy authentication settings for middleware proxies
Added a diagnostics section to Pod and workload detail pages
Diagnostics section on a Pod and workload detail page
Job details view now includes a Logs button
Job details view with a Logs button
Added a Create Deployment form to the UI
Create Deployment form in the Headlamp UI
Added a dedicated Job details view
Dedicated Job details view in the Headlamp UI

🐞 Bug Fixes

  • Switched macOS notarization back to electron-builder, combining codesign, notarize, and staple into a single step using APPLEID credentials. Thanks to @​joaquimrocha.
  • Fixed OIDC login failures when no custom CA cert is configured, so public providers like Entra ID, Okta, and Google now work correctly. Thanks to @​beep-boopp. Also thanks to @​muhammad9970 for reporting the issue.
  • Fixed parseRam and parseDiskSpace silently dropping decimal portions (e.g., '289.9Mi'), so memory and disk quantities are now parsed accurately. Thanks to @​WasThatRudy. Also thanks to @​thehandsomezebra for reporting the issue.
  • Fixed the Electron app on Linux and Windows to fully quit when the window is closed instead of continuing to run in the background. Thanks to @​Mohammed-Thaha. Also thanks to @​Hronom for reporting the issue.
  • Fixed stale Pod status icons in the list view that stayed yellow/warning even after a Pod had passed its readiness checks. Thanks to @​RustamSheoran. Also thanks to @​vikash7485 for reporting the issue.
  • Fixed the Helm chart release workflow failing when it attempted to push provenance files as gzipped archives. Thanks to @​onedr0p. Also thanks to @​joryirving for reporting the issue.
  • Table rows-per-page selection is now saved to localStorage, so the preference persists across page refreshes. Thanks to @​ChayanDass. Also thanks to @​illume for reporting the issue.
  • Fixed missing edges in the resource map when nodes move between cloud and namespace-specific views. Thanks to @​gattytto.
  • Fixed a crash that prevented Headlamp from loading on Firefox browsers by removing problematic i18n normalisation. Thanks to @​DhairyaMajmudar.
  • Fixed a data race on the portforward Status and Error fields by introducing a mutex and thread-safe accessors, improving port-forwarding stability. Thanks to @​NAME-ASHWANIYADAV.
  • Fixed broken plugin tests caused by removed ArtifactHub packages and a macOS-incompatible shebang, restoring reliable CI runs. Thanks to @​skoeva.
  • Helm chart now warns when image.tag is pinned during upgrades, preventing users from unknowingly running an outdated image after a chart update. Thanks to @​ManthanNimodiya. Also thanks to @​lyc0221 for reporting the issue.
  • Backend HTTP transports now clone DefaultTransport when customizing TLS, preserving proxy support and connection timeouts that were previously silently dropped. Thanks to @​beep-boopp.
  • Fixed backend test failures on Windows by consistently using filepath.Join for all filesystem path operations. Thanks to @​PrakharJain345.
  • Fixed a React rules-of-hooks violation in ContainerEnvironmentVariables by moving hooks before the early return, eliminating potential rendering bugs. Thanks to @​nidhi-9900. Also thanks to @​illume for reporting the issue.
  • Fixed failing daemonset snapshot tests in main to restore a passing CI build. Thanks to @​illume.
  • Fixed missing az and gh command support in runPlugin and added proper handling of child process error events. Thanks to @​illume.
  • Added unit tests for OpenTelemetry metrics initialization to verify that core metrics like RequestCounter and PluginLoadCount are correctly instantiated. Thanks to @​CygnusMaximillian.
  • Fixed the website trigger workflow to authenticate using GH_TOKEN, resolving failures in the gh api dispatch call. Thanks to @​skoeva.
  • Fixed useKubeObjectList to strip only the List suffix from kind names, preventing garbled names for resource types like Tekton's EventListener. Thanks to @​sniok.
  • Fixed a crash when typing partial YAML (e.g., a lone '-') under containers: in the Create Resource dialog, preventing a TypeError from taking down the whole app. Thanks to @​WasThatRudy. Also thanks to @​lucasgolino for reporting the issue.
  • Fixed a memory leak in LogViewer where xterm search addon event listeners accumulated on every effect re-run without being cleaned up. Thanks to @​vmridul.
  • Dependency installation steps added to development docs, and npm run install:all now includes npm install, streamlining new contributor setup. Thanks to @​yuki681.
  • Hides the Gateway (beta) filter in the resource map when Gateway API CRDs aren't installed, preventing an infinite-loading state on unsupported clusters. Thanks to @​skoeva.
  • Node drain operations now stop cleanly when the Headlamp server shuts down, preventing orphaned goroutines from continuing to make Kubernetes API calls indefinitely. Thanks to @​RajPrakash681.
  • Restored the ?view=logs deep-link for Job details so navigating directly to a Job URL with that parameter now auto-launches the logs view. Thanks to @​beep-boopp.
  • Stop logging unrelated outer-scope error on missing state in oidc-callback. Thanks to @​govindup63. Also thanks to @​krsatyamthakur-droid for reporting the issue.
  • Fixed a crash in ProjectList when a namespace lacked metadata labels, preventing the Projects page from going blank during cache refreshes. Thanks to @​govindup63. Also thanks to @​erfanium for reporting the issue.
  • Fixed a bug in KubeObjectNode where hover-expand would still trigger after moving the mouse away, by replacing clearInterval with clearTimeout. Thanks to @​YadavAkhileshh.
  • Fixed a drain-status polling leak in Node Details so timers clean up correctly when navigating away or switching nodes, preventing stale state updates. Thanks to @​PrakharJain345. Also thanks to @​Shreya2005-2005 for reporting the issue.
  • Fixed unsafe token assertions in RefreshAndSetToken() that could panic if an OIDC provider returns a token without access_token or id_token. Thanks to @​NAME-ASHWANIYADAV.
  • Fixed a stale closure in ShowHideLabel by adding maxChars to the useMemo dependency array, ensuring label truncation updates correctly. Thanks to @​rajeshsingh241.
  • POST /parseKubeConfig now returns 400 Bad Request when the request body is missing, empty, or contains a null kubeconfigs entry. Thanks to @​harrshita123.
  • Fixed createRouteURL to handle missing route params gracefully, preventing crashes when plugin routes with :namespace/:name params are initialized. Thanks to @​WasThatRudy. Also thanks to @​arx666x for reporting the issue.
  • Fixed a backend panic from invalid glob patterns in /externalproxy and pre-compiles allowed URL patterns once to speed up proxy request validation. Thanks to @​ayushmaan-16.
  • Fixed a localStorage leak in PortForwardContent where a failed port-forward restart left a stale entry that reappeared incorrectly on page refresh. Thanks to @​iashutoshyadav.
  • Fixed direct state mutation in PortForwardContent's stop handler by using a spread copy, ensuring React detects the change and re-renders the UI. Thanks to @​iashutoshyadav.
  • Terminal/log surfaces (pod logs, exec, node shell) now respect the active MUI theme; plugin authors can also customize terminal colors via AppTheme. Thanks to @​illume.
  • Restored Event class hooks as static methods to fix a compatibility regression introduced by a recent refactor. Thanks to @​sniok.
  • Helm repository add, remove, and update operations now fail safely when the file lock cannot be acquired, preventing unguarded concurrent file writes. Thanks to @​harrshita123.
  • Added a code comment explaining why dispatch is intentionally excluded from the useEffect deps array in DetailsViewSection.stories. Thanks to @​WasThatRudy.
  • The /parseKubeConfig endpoint now stops immediately on malformed JSON instead of continuing execution with a zero-value payload after sending a 400 response. Thanks to @​Sambhram1. Also thanks to @​harrshita123 for reporting the issue.
  • Owner references now resolve using both kind and apiVersion, preventing incorrect 'Controlled by' links from appearing in resource metadata panels. Thanks to @​DashratRajpurohit. Also thanks to @​mahmoudmagdy1-1 for reporting the issue.
  • Fixed a server crash caused by a panic during OIDC login state generation; the backend now returns a proper 500 error instead of terminating the process. Thanks to @​NAME-ASHWANIYADAV.
  • Added the missing Logs action to the DaemonSet detail page, making it consistent with other workload resource views. Thanks to @​beep-boopp.
  • Fixed node preview cards in the Resource Map being clipped or overlapped by neighboring node cards when hovered. Thanks to @​Dhruv-Kumar-Singh.
  • Replaced deprecated onKeyPress with onKeyDown in PortForwardStartDialog, ClusterNameEditor, and SettingsCluster for reliable keyboard interaction. Thanks to @​YadavAkhileshh.
  • Cluster search in ClusterChooserPopup is now case-insensitive, so clusters can be found regardless of how their name is typed. Thanks to @​YadavAkhileshh.
  • Fixed a crash when uploading large KubeConfig files by replacing String.fromCharCode.apply with TextDecoder, which has no JavaScript call stack limit. Thanks to @​YadavAkhileshh.
  • Fixed a goroutine leak where runWatcher goroutines were never cancelled when clusters were removed, preventing indefinite resource exhaustion. Thanks to @​Joshna907.
  • Removed the stable module-level staticRelations constant from the useMemo dependency array in relations, eliminating a suppressed ESLint rule. Thanks to @​WasThatRudy.
  • Added a clarifying comment in CustomResourceList explaining why t is intentionally excluded from the cols useMemo deps array, making the suppression self-documenting. Thanks to @​WasThatRudy.
  • Fixed empty -oidc-scopes argument being unconditionally added to Headlamp deployments when using externalSecret OIDC config without an OIDC_SCOPES key. Thanks to @​iashutoshyadav. Also thanks to @​mikeywuu for reporting the issue.
  • Error messages in the resource editor snackbar no longer expose raw Kubernetes regex validation patterns and are now split into readable bullet lines. Thanks to @​RajPrakash681.
  • Infrastructure 5xx errors (502, 503, 504) are no longer cached, so Headlamp recovers promptly after load balancer or reverse proxy failures. Thanks to @​beep-boopp.
  • Fixed the embedded SPA handler so fallback index.html responses correctly set Content-Type based on the actual file served, not always text/html. Thanks to @​harrshita123.
  • Fixed a bug where a failed URL fetch in the Load from URL dialog would silently load the error body into the editor instead of stopping after showing the error. Thanks to @​RajPrakash681.
  • Fixed a setInterval leak in WebSocketManager where a failed WebSocket connection left concurrent callers polling forever, wasting resources. Thanks to @​RajPrakash681.
  • Release notes dialog now renders GitHub Flavored Markdown (tables, strikethrough, task lists) correctly instead of displaying raw markdown text. Thanks to @​prabindersinghh. Also thanks to @​davidpistachio for reporting the issue.
  • Added 8 unit tests for the ConfirmButton component and widened its buttonComponent prop type to accept any React element type. Thanks to @​RajPrakash681.
  • The "Cluster Settings" page title is now wrapped in the i18n t() function so it correctly translates when using non-English languages. Thanks to @​RajPrakash681.
  • Fixed missing translation for the 'Refetch Interval' label in Search Settings, so it now displays correctly in non-English languages. Thanks to @​RajPrakash681.
  • Fixed missing translation for the 'namespace' placeholder in Cluster Settings, ensuring it appears correctly in non-English locales. Thanks to @​RajPrakash681.
  • Removed an unnecessary useMemo in CustomResourceInstancesList that was re-running every render, fixing a stale dependency suppression and adding test coverage. Thanks to @​WasThatRudy.
  • Fixed unstable React reconciliation in the ContainerInfo ports list by moving the key prop to the top-level mapped element, preventing unnecessary re-renders. Thanks to @​gouravi19.
  • Improved cluster error handling in the home view: unavailable or unauthenticated clusters now show clear status labels instead of raw errors like Bad Gateway. Thanks to @​harrshita123.
  • Fixed a watch subscription leak in useKubeObjectList for cluster-scoped resources like Nodes and ClusterRoles when a cluster is deselected. Thanks to @​Sreejesh06.
  • Helm repository add/update requests with missing required fields like name or url now correctly return 400 Bad Request instead of a 500 error. Thanks to @​harrshita123.
  • Fixed the ClusterChooser toolbar label to correctly show the selected cluster name instead of falling back to the wrong route value. Thanks to @​harrshita123.
  • Added a 30-second timeout to the externalproxy HTTP client, preventing goroutine leaks and server hangs from slow or unresponsive external services. Thanks to @​ayushmaan-16.
  • Fixed ArrowUp keyboard navigation in ClusterChooserPopup so pressing it on the first item now correctly wraps around to the last item instead of breaking navigation. Thanks to @​harrshita123.
  • Fixed insufficient WCAG contrast on the global search shortcut hint by using an explicit theme color instead of opacity, improving accessibility. Thanks to @​ChandanKT-git. Also thanks to @​illume for reporting the issue.
  • Refactored GetDefaultKubeConfigPath to return an error instead of calling os.Exit, allowing callers to handle failures gracefully. Thanks to @​YadavAkhileshh.
  • Replaced deprecated trimLeft() with the ES2019 standard trimStart() in EditorDialog, eliminating use of a deprecated string method. Thanks to @​YadavAkhileshh.
  • Table row count setting now rejects decimal inputs instead of silently truncating them, preventing unexpected pagination behavior. Thanks to @​harrshita123.
  • Fixed resource map so a plugin node's custom detailsComponent fully replaces the default kube object details instead of both rendering simultaneously. Thanks to @​mahmoudmagdy1-1.
  • HTTP proxy responses are now streamed rather than fully buffered in memory, preventing OOM crashes and service disruption when proxying large responses. Thanks to @​VijayabaskarR-06.
  • Drain node status now accurately reports pod deletion failures instead of always showing success, giving operators reliable drain completion data. Thanks to @​beep-boopp.
  • Fixed EditorDialog not clearing error messages when using Undo Changes after entering invalid YAML, so the UI now resets correctly. Thanks to @​YadavAkhileshh.
  • OAuth popup now properly removes event listeners when auth completes, the popup closes, or the component unmounts, preventing memory leaks. Thanks to @​Sambhram1. Also thanks to @​Utkarshpandey0001 for reporting the issue.
  • Added regression tests for EditorDialog's Undo Changes behavior to guard against parse errors reappearing after invalid YAML is reverted. Thanks to @​Sambhram1. Also thanks to @​Vikaspal8923 for reporting the issue.
  • Fixed a WebSocket subscription leak in the multiplexer where unmounting a hook before subscribe resolved left orphaned subscriptions. Thanks to @​Utkarshpandey0001.
  • Fixed a startup crash caused by malformed JSON in localStorage settings; Headlamp now falls back to defaults instead of getting stuck loading. Thanks to @​Vikaspal8923.
  • Fixed a stale closure bug in the TimeAgo component that caused displayed relative times to stop updating when the date prop changed. Thanks to @​Utkarshpandey0001.
  • External proxy now correctly forwards status codes and Content-Type headers, so the UI can accurately display errors from failed external requests. Thanks to @​ayushmaan-16.
  • Fixed a stale closure in PortForwardingList that silently swallowed port-forwarding errors and caused async state updates after component unmount. Thanks to @​KumarADITHYA123.
  • Fixed an infinite polling loop and memory leak in NodeDetails when draining a node and navigating away, preventing potential runtime crashes. Thanks to @​KumarADITHYA123.
  • Fixed swapped health icons in the project resources tab so error and warning statuses now display the correct icons. Thanks to @​NAME-ASHWANIYADAV.
  • Replaced the unsafe any onClick type with a proper React.MouseEventHandler type in NewProjectPopup, improving type safety. Thanks to @​itvi-1234.
  • OIDC token refresh now applies the configured issuer override, fixing authentication failures for providers where the discovery URL and issuer differ. Thanks to @​m-wack.
  • Reduced global lock contention in Kubernetes clientset initialization, allowing concurrent authorization requests to proceed without blocking. Thanks to @​Joshna907.
  • WebSocket multiplexer now isolates per-request failures so malformed messages, token errors, or cluster dial issues no longer drop the entire client session. Thanks to @​PrakharJain345. Also thanks to @​prasanna-baskar-igt for reporting the issue.
  • Fixed Windows path handling in the backend by using URL-safe joins for request paths and OS-aware paths for filesystem access, resolving Windows test failures. Thanks to @​PrakharJain345.
  • Fixed React hook dependency violations in the Home component and resolved an empty heading accessibility issue in the Cluster Chooser dialog. Thanks to @​PrakharJain345.
  • Port-forward and WebSocket proxying now work correctly when the kubeconfig server URL includes a path prefix, ensuring compatibility with reverse-proxy setups. Thanks to @​plopoyop.
  • The pod log Prettify toggle preference is now saved to localStorage so it persists across page reloads and sessions. Thanks to @​Athang69. Also thanks to @​LucienLallier for reporting the issue.
  • Fixed App Catalog bearer token extraction and a route key collision that silently broke the feature in default in-cluster deployments. Thanks to @​Athang69. Also thanks to @​v0lkan for reporting the issue.
  • Refactored ClusterSettings to centralize state via a new useClusterSettings hook, removing duplicated load/store logic across child components. Thanks to @​sniok.
  • Resource editor now uses JSON Patch instead of PUT, eliminating 409 Conflict errors when saving frequently-updated resources like HPAs. Thanks to @​gambtho. Also thanks to @​hitsaurabhraj for reporting the issue.
  • SimpleTable now correctly announces when no data is present, improving screen reader accessibility for empty tables. Thanks to @​illume.
  • Fixed SVG type declarations and TSC errors in example plugins, and enabled useClustersConf so plugin developers can use and test it in examples. Thanks to @​illume.
  • Fixed an infinite re-render in useKubeObjectList when the namespace was an empty string. Thanks to @​ashu8912.
  • Refactored how request watching is stopped in useKubeObjectList, ensuring watch requests are reliably cancelled. Thanks to @​sniok.
  • Fixed stateless cluster handling: corrected stale state and the auth header in fetchStatelessClusterKubeConfigs, made setCluster and parseKubeConfig send the kubeconfigs array, and hardened backend stateless context key generation and parse handling, with added e2e regression coverage. Thanks to @​illume.

🔒 Security

  • Bumped fast, brace-expansion, ws, containerd, and qs across app, frontend, and backend for security and maintenance updates. Thanks to @​skoeva.

💻 Development

  • Added comprehensive unit tests for the portforward package, covering HTTP handlers and helper functions that previously had zero CI coverage. Thanks to @​NAME-ASHWANIYADAV.
  • Bumped the pinned gcb-docker-gcloud Cloud Build image digest to fix the failing post-headlamp-push-images Prow job. Thanks to @​skoeva.
  • Updated the bundled prometheus, app-catalog, and plugin-catalog plugins to their latest versions. Thanks to @​sniok.
  • Added unit tests for custom cluster name parsing from the headlamp_info extension to ensure context names are correctly overridden. Thanks to @​CygnusMaximillian.
  • Improved French glossary translations by filling in missing entries and aligning Kubernetes-related terms with standard French usage. Thanks to @​codeurluce.
  • Updated the French translation of 'Open an Issue' to better convey that issues cover bugs, feature requests, and questions, not just incidents. Thanks to @​codeurluce.
  • Bumped the yaml package from 2.8.3 to 2.9.0 to pick up upstream bug fixes and improvements. Thanks to @​vyncent-t.
  • Refreshed outdated Storybook snapshots so frontend tests pass reliably on main. Thanks to @​skoeva.
  • Backend Kubernetes Go dependencies upgraded from v0.35.1 to v0.35.3 alongside related modules, keeping the backend secure, up to date, and lint-clean. Thanks to @​kahirokunn.
  • Replaced nested array iterations with a Map-based lookup for recent cluster resolution, improving re-render performance with large cluster lists. Thanks to @​DashratRajpurohit.
  • Added a 256-character input guard to FuzzSanitizeClusterName to skip pathological inputs that previously caused CI timeout failures. Thanks to @​Athang69.
  • GetDefaultKubeConfigPath() now returns an error instead of calling os.Exit(1), giving callers proper control over failures and making the function testable. Thanks to @​NAME-ASHWANIYADAV.
  • Replaced an uncommon Unicode glyph in Ingress list and detail views with a widely supported alternative, improving cross-platform rendering. Thanks to @​dabico.
  • Updated dependencies including hono, postcss, fast-uri, langsmith, ip-address, and express-rate-limit across app and plugin packages. Thanks to @​skoeva.
  • Added 7 unit tests for NewProjectPopup covering rendering, form validation, and step navigation to prevent project creation regressions. Thanks to @​itvi-1234.
  • Added 5 unit tests for ProjectDeleteDialog covering rendering, cancel flow, and label removal to prevent regressions in project deletion. Thanks to @​itvi-1234.
  • Renamed four pure-logic files in advancedSearch from .tsx to .ts, correctly reflecting that they contain no JSX. Thanks to @​itvi-1234.
  • Extracted RefreshAndSetToken from headlamp.go into the auth package with comprehensive tests, improving backend code organization and testability. Thanks to @​skoeva.
  • Added Loading, Empty, Error, and LongName Storybook stories to the DaemonSet list, enabling complete visual state testing beyond the happy path. Thanks to @​sudhidutta7694.
  • Fixed a missing route dependency in RouteSwitcher.stories so changing the route arg in Storybook controls now correctly updates the redux store. Thanks to @​WasThatRudy.
  • Added a verify-build check to confirm headlamp-server is properly terminated when the Electron app closes on Linux, macOS, and Windows. Thanks to @​illume.
Added Loading, Empty, Error, and LongName Storybook stories to the DaemonSet list
DaemonSet list Storybook stories for Loading, Empty, Error, and LongName states

🧩 Shipped Plugins

📖 Documentation

  • Updated Traefik Middleware apiVersion in the basic auth docs to traefik.io/v1alpha1, replacing the deprecated traefik.containo.us/v1alpha1. Thanks to @​skoeva.
  • Updated Node.js, npm, and Go version requirements in contributor docs to match the actual versions declared in package.json and go.mod. Thanks to @​gravi19. Also thanks to @​harrshita123 for reporting the issue.

Container image: 🐳 ghcr.io/headlamp-k8s/headlamp:v0.43.0
Desktop Apps:

🐧 Flatpak / Linux (AMD64)
🐧 Linux AppImage AMD64, ARM64, ARMv7l
🐧 Linux Tarball AMD64, ARM64, ARMv7l
🐧 Debian / Linux AMD64
🍏 Mac (AMD64)
🍏 Mac (ARM/M1)
🟦 Windows (AMD64), ARM64

v0.42.0: 0.42.0

Compare Source

Hitch hikers guide to Headlamp 0.42.0

Deep-link support was added for pod terminals (?view=exec) and log views (?view=logs), letting users bookmark or share direct links to specific UI states. Resources can now be searched by label in all list views, the Log Viewer gains a severity filter dropdown, and a delete button has been added directly to the plugins list. Node Details received two new sections for pod capacity usage and resource allocation, and the Resource Map now renders status badges on plugin-provided nodes and includes previously missing configuration resources. GRPCRoute details reach full parity with HTTPRoute, and a guided form-based resource creation UI (starting with Pods) is now available alongside the YAML editor.

On the reliability side, a silent cache desync that caused permanently stale cluster data was fixed, along with a lock-order inversion deadlock that could freeze WebSocket connections under load, and a wave of React hooks rule violations across more than a dozen frontend components. Several backend panics were fixed in port-forwarding, kubeconfig parsing, cache key generation, and Helm chart type handling, alongside debounced log aggregation to prevent UI freezes in All Pods mode. Security hardening includes path traversal prevention in the service proxy and dependency bumps.

✨ Enhancements (part 1)

Enhancements
Added deep-link support for pod exec via ?view=exec query parameter, letting users bookmark or share direct links to open a terminal into a specific pod. Thanks to @​justinas-wix. #​4941
Added a hidden 'labels' column to all resource list views so users can search resources by label (e.g. app=test) using the existing search bar. Thanks to @​sniok. Also thanks to @​illume for reporting the issue. #​5035
Resource map graph nodes now support optional status metadata, allowing plugin-provided nodes to display warning and error badges like built-in resources. Thanks to @​mahmoudmagdy1-1. #​5349
Added a pod capacity usage tile to the node details view so users can see how many pods are scheduled versus the node's allocatable pod limit. Thanks to @​Vikaspal8923. Also thanks to @​jimmyjones2 for reporting the issue. #​5039
Extended a8r.io annotation support from Services to all Kubernetes resources, letting users see human-readable service discovery metadata on any annotated resource. Thanks to @​mastermaxx03. #​5007
Added a severity filter dropdown to the Log Viewer, letting users quickly filter logs by level (ERROR, WARN, INFO, DEBUG) to cut through noisy streams. Thanks to @​Utkarshpandey0001. #​5338
Added a delete button directly to the plugins list page, so users can remove plugins without navigating to the detail page first. Thanks to @​rickbrouwer. #​5314
Added ?view=logs deep-link support on Deployment, ReplicaSet, DaemonSet, and StatefulSet detail pages, letting users open the logs view directly from a URL. Thanks to @​bhat-ganesh. #​5312
Added missing configuration resources to the Resource Map graph so they are now fully visible in the Configuration group. Thanks to @​vishnukothakapu. #​5223
Added a hidden 'labels' column to all resource list views so users can search resources by label (e.g. app=test) using the existing search bar.
frontend: ResourceTable: Add new 'labels' column to all list views to allow searching by label
Added a delete button directly to the plugins list page, so users can remove plugins without navigating to the detail page first.
frontend: Add delete button to plugin list
Added a guided form-based UI for creating Kubernetes resources (starting with Pods), accessible from the sidebar and Pod list page alongside the existing YAML editor workflow.
frontend: CreateResourceForm: Add resource form create feature and CreateResourceForm






✨ Enhancements (part 2)

Enhancements
Added ephemeral storage usage chart to the Node Details view, giving users visibility into ephemeral storage consumption alongside other node stats. Thanks to @​Vikaspal8923. Also thanks to @​jimmyjones2 for reporting the issue. #​5169
Added a 'Review changes' tab to the resource editor dialog so users can diff the original manifest against their edits before applying. Thanks to @​Vikaspal8923. #​5018
Added a background janitor to evict expired Kubernetes clientsets, fixing an unbounded memory leak that could cause OOM crashes on busy clusters. Thanks to @​Joshna907. #​5286
Wrapped the Reconnect button label in LogViewer with the translation function and added the key to all 12 locale files, enabling full i18n support. Thanks to @​NAME-ASHWANIYADAV. #​5176
GRPCRoute details view now shows rules, hostnames, matches, backendRefs, and filters, bringing it to full parity with HTTPRoute details. Thanks to @​NAME-ASHWANIYADAV. #​5174
Resource map graph nodes now support optional status metadata, allowing plugin-provided nodes to display warning and error badges like built-in resources.
docs: frontend: resourceMap: Add status support for map nodes
Added ephemeral storage usage chart to the Node Details view, giving users visibility into ephemeral storage consumption alongside other node stats.
Screenshot from 2026-04-20 14-32-54
Added a download YAML button to the resource table, letting users export any resource manifest directly from the table view.
Screenshot from 2026-04-12 19-27-27
Improved global search UX by adding a clear button to the search input and showing a pointer cursor on hover over search results.
Screenshot from 2026-03-25 13-18-28






✨ Enhancements (part 3)

Enhancements
Added a toast notification when port-forwarding fails so users are explicitly informed instead of errors being silently logged to the console. Thanks to @​itvi-1234. #​5145
Added a download YAML button to the resource table, letting users export any resource manifest directly from the table view. Thanks to @​Vikaspal8923. #​5126
Added UI support for the Kubernetes VolumeAttributesClass resource in the Storage section, including list and detail views. Thanks to @​Vikaspal8923. #​5119
Added service.extraServicePorts and matching Ingress backend support to the Helm chart, allowing sidecar containers to be exposed without a separate Service resource. Thanks to @​Soli0222. #​5078
Added a Resource Allocation section to Node Details showing total CPU/Memory requests, limits, and their percentage of node capacity alongside existing usage metrics. Thanks to @​itvi-1234. #​5048
Added a guided form-based UI for creating Kubernetes resources (starting with Pods), accessible from the sidebar and Pod list page alongside the existing YAML editor workflow. Thanks to @​vyncent-t. #​5044
Container port names are now displayed alongside protocol and port number in the containers list, providing more complete port information at a glance. Thanks to @​itvi-1234. Also thanks to @​trashhead for reporting the issue. #​4956
Added a pod capacity usage tile to the node details view so users can see how many pods are scheduled versus the node's allocatable pod limit.
Screenshot from 2026-04-02 23-21-10
Added a 'Review changes' tab to the resource editor dialog so users can diff the original manifest against their edits before applying.
frontend: EditorDialog :add yaml diff view in editor to compare original manifest against edited
Added UI support for the Kubernetes VolumeAttributesClass resource in the Storage section, including list and detail views.
Screenshot from 2026-04-11 13-59-36
Container port names are now displayed alongside protocol and port number in the containers list, providing more complete port information at a glance.
frontend:Show container port name if available






✨ Enhancements (part 4)

Enhancements
Aligned frontend duration/age formatting with Kubernetes apimachinery logic, ensuring consistent age display matching kubectl behavior. Thanks to @​ChayanDass. Also thanks to @​joaquimrocha for reporting the issue. #​4931
Improved global search UX by adding a clear button to the search input and showing a pointer cursor on hover over search results. Thanks to @​Vikaspal8923. #​4965
Extended a8r.io annotation support from Services to all Kubernetes resources, letting users see human-readable service discovery metadata on any annotated resource.
frontend: App: resource: Extend a8r.io annotation support to all Kubernetes resources
Added a Resource Allocation section to Node Details showing total CPU/Memory requests, limits, and their percentage of node capacity alongside existing usage metrics.
frontend: nodes: Add resource allocation summary in Node Details
Aligned frontend duration/age formatting with Kubernetes apimachinery logic, ensuring consistent age display matching kubectl behavior.
frontend: align duration formatting with apimachinery logic






🐞 Bug fixes (part 1)

Bug fixes
Fixed pod status icon remaining stuck on warning in list view after a pod becomes healthy, without requiring a page refresh. Thanks to @​nidhi-9900. Also thanks to @​nullzone for reporting the issue. #​5059
Fixed performance regressions in the resource map by properly memoizing values to avoid redundant graph rebuilds, improving responsiveness on larger clusters. Thanks to @​sniok. Also thanks to @​itpick for reporting the issue. #​4961
Fixed a silent cache desync bug where a dead watcher locked the registry and prevented cache invalidation, causing the UI to show permanently stale cluster data. Thanks to @​KumarADITHYA123. #​5163
Removed the --no-quarantine flag from the macOS Homebrew installation command to reflect the current recommended install process. Thanks to @​saivenkateshi. Also thanks to @​hyorimlee for reporting the issue. #​4943
Debounced log aggregation in All Pods mode to eliminate UI freezes when streaming large volumes of logs. Thanks to @​Utkarshpandey0001. #​5320
Fixed react-hooks/rules-of-hooks violations in secret/Details.tsx by extracting the inline section helper into a proper React component, preventing potential hook-related bugs. Thanks to @​iashutoshyadav. Also thanks to @​illume for reporting the issue. #​5266
Fixed missing data columns (Status, Replicas, etc.) in CustomResourceDetails for core resources whose apiVersion contains no slash, such as Nodes. Thanks to @​Joshna907. #​5259
Fixed react-hooks/rules-of-hooks violations in GraphView.tsx by moving hook calls unconditionally into function bodies, preventing potential rendering bugs. Thanks to @​iashutoshyadav. Also thanks to @​illume for reporting the issue. #​5252
Fixed react-hooks/rules-of-hooks violations in configmap/Details.tsx by extracting the inline section helper into a proper React component, also resolving a variable shadowing issue in map callbacks. Thanks to @​jedbillyb. Also thanks to @​illume for reporting the issue. #​5203
Fixed a React hooks violation in VolumeDetails where useTranslation was called after an early return, preventing potential runtime errors. Thanks to @​itvi-1234. Also thanks to @​illume for reporting the issue. #​5201






🐞 Bug fixes (part 2)

Bug fixes
Replaced fmt.Printf calls with structured logging in ListPlugins, improving log consistency and simplifying plugin-related test reliability. Thanks to @​NAME-ASHWANIYADAV. #​5072
Fixed a crash on the Namespace details page when ResourceQuota status is absent immediately after creation, preventing blank or broken quota displays. Thanks to @​Vikaspal8923. #​4990
Fixed heading hierarchy in the ReleaseNotes story so h3 elements are always preceded by proper h1/h2 ancestors, ensuring correct document structure. Thanks to @​iashutoshyadav. Also thanks to @​illume for reporting the issue. #​5356
Added missing aria-controls attribute to EditorDialog action buttons, improving accessibility for assistive technology users. Thanks to @​Utkarshpandey0001. #​5355
Fixed a nil-pointer panic in port-forwarding that could crash the backend when a port-forward process exited gracefully and its error channel was closed. Thanks to @​Joshna907. #​5342
Resource map breadcrumbs now pass apiGroup alongside kind to icon lookups, so resources like apps/ReplicaSet display their correct icon instead of the generic cube. Thanks to @​mahmoudmagdy1-1. #​5332
Fixed the "Use evict for pod deletion" setting not persisting as disabled across reloads by replacing a logical OR with nullish coalescing so an explicit false is correctly saved. Thanks to @​Utkarshpandey0001. #​5328
Fixed orphaned goroutines and lingering port listeners in the port-forwarding module, preventing memory leaks and stuck local ports after a port-forward is deleted or times out. Thanks to @​Joshna907. #​5316
Fixed a lock-order inversion deadlock in the multiplexer that could freeze WebSocket connections under concurrent load. Thanks to @​KumarADITHYA123. #​5307






🐞 Bug fixes (part 3)

Bug fixes
Fixed corrupted Kubernetes cache keys caused by incorrect parsing of internal URLs, preventing cache pollution and key collisions. Thanks to @​Joshna907. #​5292
Silent errors in advanced search query parsing and filter evaluation are now logged via console.debug, making failures easier to diagnose. Thanks to @​NAME-ASHWANIYADAV. #​5284
Fixed a double-response bug in InstallRelease where execution continued after sending a 500 error, preventing corrupted HTTP responses. Thanks to @​NAME-ASHWANIYADAV. #​5277
Fixed a crash (white screen) caused by malformed JWTs during decoding, improving stability for plugins using the getUserInfo utility. Thanks to @​Joshna907. #​5270
Fixed npm run star so developers can load Headlamp in dev mode on Windows without repeated reloads or long waits. Thanks to @​illume. #​5256
Fixed a React hooks-rules violation in useKubeObject where WebSocket hooks were called conditionally, ensuring reliable WebSocket behaviour regardless of feature flags. Thanks to @​aabhinavvvvvvv. Also thanks to @​illume for reporting the issue. #​5253
Fixed a React hooks-rules violation in the router by extracting an inline arrow function into a named component, preventing unpredictable hook behaviour during routing. Thanks to @​aabhinavvvvvvv. Also thanks to @​illume for reporting the issue. #​5251
Fixed a React hooks-rules violation in usePrefersColorScheme by moving useState and useEffect above the early return, ensuring consistent color-scheme detection. Thanks to @​aabhinavvvvvvv. Also thanks to @​illume for reporting the issue. #​5250
Fixed a React hooks-rules violation in useWatchKubeObjectLists by calling both sub-hooks unconditionally, preventing potential runtime errors from conditional hook calls. Thanks to @​aabhinavvvvvvv. Also thanks to @​illume for reporting the issue. #​5249
Fixed the AuthChooser AnError Storybook story to always render a non-empty DialogTitle, eliminating an empty h1 accessibility issue. Thanks to @​iashutoshyadav. Also thanks to @​illume for reporting the issue. #​5239






🐞 Bug fixes (part 4)

Bug fixes
Fixed a fatal UI crash caused by malformed or empty sidebar data in browser localStorage during Redux state initialization. Thanks to @​Joshna907. #​5235
Fixed React hooks rule violations in the PortForward component that could cause unpredictable rendering behavior. Thanks to @​iashutoshyadav. Also thanks to @​illume for reporting the issue. #​5231
Pinned the gcb-docker-gcloud Cloud Build image by digest to prevent CI failures caused by garbage-collected tags. Thanks to @​skoeva. #​5229
Fixed a server crash that occurred when installing or upgrading unsupported Helm chart types such as library charts. Thanks to @​KumarADITHYA123. #​5217
Fixed a backend panic in cache invalidation that crashed the server when a GenerateKey error was silently ignored on short API paths. Thanks to @​KumarADITHYA123. #​5215
Fixed React hooks rule violations in CustomResourceListTable where useMemo calls after an early return caused unpredictable rendering. Thanks to @​aabhinavvvvvvv. Also thanks to @​illume for reporting the issue. #​5213
Renamed withEnv decorator to PascalCase in AppContainer stories, fixing rules-of-hooks ESLint violations. Thanks to @​jedbillyb. Also thanks to @​illume for reporting the issue. #​5210
Renamed story component functions to PascalCase in PluginSettingsDetails stories, resolving rules-of-hooks ESLint errors. Thanks to @​jedbillyb. Also thanks to @​illume for reporting the issue. #​5209
Moved useCallback before the early return in DialogTitle and added missing focusTitle dependency, fixing rules-of-hooks violations. Thanks to @​jedbillyb. Also thanks to @​illume for reporting the issue. #​5208
Moved all hook calls before the early return in RollbackButton, fixing rules-of-hooks violations and improving TypeScript type narrowing. Thanks to @​jedbillyb. Also thanks to @​illume for reporting the issue. #​5206






🐞 Bug fixes (part 5)

Bug fixes
Fixed and re-enabled a previously skipped multiplexer test, improving test suite reliability. Thanks to @​sniok. #​5179
Removed an unsafe as any TypeScript cast in VersionButton by providing an explicit generic type to useQuery, improving type safety. Thanks to @​itvi-1234. #​5164
Fixed a backend panic crash in GetAPIGroup caused by index out of range errors when Kubernetes discovery paths were shortened or truncated. Thanks to @​KumarADITHYA123. #​5161
Fixed a bug where a stale global namespace filter could hide results in namespace-scoped views when no namespace filter should apply. Thanks to @​Vikaspal8923. Also thanks to @​jimmyjones2 for reporting the issue. #​5157
Fixed Helm repository and chart handler error behavior, including proper 404 responses on missing repos and safer lock error handling. Thanks to @​Athang69. #​5149
Fixed Content-Type: application/json header being silently dropped in 7 Helm release API handlers, ensuring clients receive correct response metadata. Thanks to @​NAME-ASHWANIYADAV. #​5147
Fixed a server panic caused by bare type assertions in kubeconfig parsing when processing malformed kubeconfig files. Thanks to @​KumarADITHYA123. #​5138
Added missing Pi and P memory unit support to normalizeUnit and corrected off-by-one multipliers for Ei and E, ensuring accurate Kubernetes quantity parsing. Thanks to @​KumarADITHYA123. #​5135
Fixed a bug in k8cache where Kubernetes resources older than 60 seconds silently skipped cache invalidation on Update or Delete, preventing stale data from being cleared. Thanks to @​KumarADITHYA123. #​5130
Removed debug console.log statements and fixed a typo in the frontend, keeping the production console clean. Thanks to @​NAME-ASHWANIYADAV. #​5129






🐞 Bug fixes (part 6)

Bug fixes
Removed an unnecessary debug console.log from the clusterRequests remove() function to keep the production console clean. Thanks to @​NAME-ASHWANIYADAV. #​5127
Fixed backend linting on Windows with LF line endings and compatible Makefile targets, replaced deprecated fake clientset, and bumped helm/v3 to 3.20.2. Thanks to @​skoeva. #​5121
Long cluster names in the Home page table now expand dynamically and show the full name on hover, improving readability. Thanks to @​vyncent-t. Also thanks to @​hpschry and @​jimmyjones2 for reporting the issue. #​5109
Fixed resourceFieldRef env vars failing to resolve for admission-injected sidecar containers like istio-proxy, eliminating 'Container not found' errors. Thanks to @​itvi-1234. Also thanks to @​vmozghovyi for reporting the issue. #​5107
Fixed helm route auth token handling to work unconditionally and added regression tests for helm auth and RouteSwitcher key uniqueness. Thanks to @​Athang69. Also thanks to @​v0lkan for reporting the issue. #​5105
Replaced console.log with console.error in catch blocks so exceptions are correctly flagged in browser DevTools and log monitoring tools. Thanks to @​NAME-ASHWANIYADAV. #​5104
Users now see an error notification when cluster deletion fails instead of silently receiving no feedback. Thanks to @​NAME-ASHWANIYADAV. #​5102
Fixed the ResourceTable Name Search Storybook example so the search input is correctly prefilled and table filtering works as expected. Thanks to @​Vikaspal8923. Also thanks to @​sniok for reporting the issue. #​5100
Updated npm dependencies via audit to address known vulnerabilities, with Electron upgraded to the latest version. Thanks to @​sniok. #​5097
Fixed a crash on CronJob list and details pages when spec.suspend is absent from the API response, preventing a TypeError on undefined. Thanks to @​Athang69. Also thanks to @​RobertSkawinski for reporting the issue. #​5085






🐞 Bug fixes (part 7)

Bug fixes
Helm chart now automatically mounts an emptyDir volume at /tmp when readOnlyRootFilesystem is enabled, fixing deployment failures in restricted security contexts. Thanks to @​YotamKorah. Also thanks to @​wkbrd for reporting the issue. #​5079
Removed a leftover console.log debug statement from HTTPRouteDetails, eliminating unnecessary noise in the browser console. Thanks to @​NAME-ASHWANIYADAV. #​5074
Fixed double-write HTTP responses and missing headers in Helm backend handlers, ensuring correct and well-formed API responses. Thanks to @​NAME-ASHWANIYADAV. #​5056
Fixed typos and improved error logging in OauthPopup by correcting 'occured' to 'occurred' and using console.error for proper error severity reporting. Thanks to @​NAME-ASHWANIYADAV. #​5054
Fixed a copy-paste bug where GRPCRoute used the wrong section ID (httproute-parentrefs) and removed leftover debug console.log statements from production code. Thanks to @​NAME-ASHWANIYADAV. #​5052
Cluster action error notifications now surface detailed Kubernetes API error messages instead of generic failure text, making it easier to diagnose rejected operations like ValidatingAdmissionPolicy failures. Thanks to @​itvi-1234. Also thanks to @​jimmyjones2 for reporting the issue. #​5047
Fixed broken app startup after npm install due to an esbuild error by regenerating package-lock.json, updating frontend snapshots, and reverting the merge commit check. Thanks to @​illume. #​5029
Fixed a Map view bug where resources with the same name in different namespaces were incorrectly linked by adding namespace checks to resource relation matching. Thanks to @​itvi-1234. Also thanks to @​rassie for reporting the issue. #​5006
Fixed AppImage crash on Linux caused by chrome-sandbox permission issues by disabling the setuid sandbox in AppImage environments. Thanks to @​kunaldevsahu. Also thanks to @​eftewuer for reporting the issue. #​4996
Fixed truncation of long Kubernetes condition names (e.g. PodReadyToStartContainers) in resource detail Conditions tables so full names are always visible. Thanks to @​itvi-1234. #​4967
Fixed pod metrics matching to use both name and namespace, preventing incorrect CPU/memory stats for pods sharing the same name across different namespaces. Thanks to @​Utkarshpandey0001. #​4933
Fixed GlobalSearch bar visibility on dark or colored navbars by adding explicit backgrounds, ensuring the search field is visible at all zoom levels and themes. Thanks to @​skoeva. #​4930






🔒 Security

Security improvements
Hardened service proxy URI validation to block path traversal and protocol-relative URLs that could redirect requests to arbitrary hosts. Thanks to @​skoeva. #​5299
Bumped multiple app, plugin, and backend dependencies including storybook, i18next-fs-backend, xmldom, and headlamp-plugin to keep packages up to date and fix build issues. Thanks to @​skoeva. #​5122
Bumped backend and headlamp-plugin dependencies including OpenTelemetry, go-jose, and Vite to keep packages up to date and secure. Thanks to @​skoeva. #​5108
Validate host header to protect desktop and headless users. Thanks to @​illume. Also thanks to Koda Reef for reporting the issue. #​5419
Updated SECURITY.md to reference the kubernetes-sigs security policy, making it easier to find for contributors browsing the repo. Thanks to @​illume. Also thanks to @​rassie for reporting the issue. #​5081
Bumped multiple dependencies including tar, flatted, typedoc, body-parser, undici, and others to address security and compatibility updates. Thanks to @​skoeva. #​4948
Bumped tar dependency from 7.5.10 to 7.5.11 in the sidebar plugin example to include a symlink escape fix. . #​4880






♿ Accessibility

Accessibility improvements
Replaced the accessible-name violation caused by role=button on a label element in DropZoneBox with a ref-based file input trigger. Thanks to @​skoeva. #​5272
Unified sorting icons in SimpleTable to match ResourceTable's MUI arrow style and added tooltips to sorting buttons for better accessibility. Thanks to @​Utkarshpandey0001. #​4952
Fixed heading hierarchy in the ReleaseNotesModal story so the h3 fixture is properly nested under h1/h2 ancestors, and updated the storyshot snapshot to match. Thanks to @​iashutoshyadav. Also thanks to @​illume for reporting the issue. #​5315






📖 Documentation

Documentation improvements
Deduplicated nodes and edges in the resource map graph after merging sources, eliminating duplicate elements that could cause rendering issues. Thanks to @​mahmoudmagdy1-1. #​5400
Added NKP (Nutanix Kubernetes Platform) to the supported platforms documentation, confirming it works with Headlamp out of the box. Thanks to @​jlnhnng. #​5173
Added Linode Kubernetes Engine (LKE) to the list of tested and supported platforms in the documentation. Thanks to @​ruckus-voxi. #​5116
Added a tutorial showing how to build a WhoAmI plugin that displays user identity in the cluster sidebar using the SelfSubjectReview API. Thanks to @​yolossn. #​5080
Fixed multiple documentation issues including a grammatical error, stale Code of Conduct link, duplicate sections, outdated dependency versions, and broken internal links. Thanks to @​Athang69. #​5060
Added documentation for MCP (Model Context Protocol) support to the Headlamp learn section, helping users discover and configure the feature. Thanks to @​vyncent-t. #​4998
Added HolmesGPT documentation to the Learn section, making it easier to find and use HolmesGPT guidance within the docs. Thanks to @​vyncent-t. #​4997






💻 Development (part 1)

Development improvements
Added end-to-end tests verifying the Prometheus plugin is correctly bundled and its settings page is accessible in the UI. Thanks to @​illume. #​5362
Storybook mocks now return HTTP 404 for deprecated v1beta1 CRD endpoints, better reflecting real cluster behavior in component stories. Thanks to @​mystic-06. Also thanks to @​skoeva for reporting the issue. #​5040
Host header validation added on loopback listeners to reduce the risk of DNS rebinding attacks against the local backend server. Thanks to @​illume. #​5419
Bumped Go to 1.25.9 to address stdlib CVEs, improving the security of the backend. Thanks to @​yolossn. #​5410
Kubernetes volume status phases such as "Bound" and "Pending" are now translated, so they respect the user's selected locale instead of always appearing in English. Thanks to @​Joshna907. #​5331
Core API discovery failures (e.g. due to timeouts or RBAC issues) are now logged instead of silently swallowed, making it easier to diagnose missing resources in the UI. Thanks to @​Joshna907. #​5329
Switched plugin cache error checks to use errors.Is() so wrapped cache.ErrNotFound errors are correctly detected and plugin listing behaves reliably. Thanks to @​NAME-ASHWANIYADAV. #​5326
Reverted Storybook stories for AddCluster component that were causing CI failures. Thanks to @​skoeva. #​5301
Silent errors in terminal shell detection functions are now logged via console.debug, making node shell connection failures easier to debug. Thanks to @​NAME-ASHWANIYADAV. #​5282
Replaced direct Helm sentinel error comparisons with errors.Is, ensuring wrapped errors are correctly detected in release-not-found checks. Thanks to @​NAME-ASHWANIYADAV. #​5280
Reverted a namespace filter reset change that caused crashes when navigating to namespace views with an active namespace filter selected. Thanks to @​sniok. #​5271
Added an i18n-check step to CI to automatically catch translation file regressions as dependencies and code are updated. Thanks to @​illume. #​5257
Added Storybook stories for the KubeConfigLoader component, enabling visual testing of all kubeconfig upload and cluster import UI states.
frontend(KubeConfigLoader): Add Storybook stories with all component …






💻 Development (part 2)

Development improvements
Refactored Event hooks into standalone exported functions, fixing React hooks-rules violations and making useEventListForClusters and useEventWarningList available to consumers. Thanks to @​Utkarshpandey0001. Also thanks to @​illume for reporting the issue. #​5255
Replaced log.Printf with the structured logger in the telemetry package, aligning warning output with the rest of the backend. Thanks to @​NAME-ASHWANIYADAV. #​5221
Added Copilot PR review instructions to automate common review feedback, helping enforce project standards more consistently. Thanks to @​joaquimrocha. #​4937
Added console.debug logging to previously silent catch blocks across frontend components, making errors visible during debugging. Thanks to @​NAME-ASHWANIYADAV. #​5220
Replaced hardcoded context.TODO() in the service proxy with proper request-scoped context, enabling correct cancellation and deadline propagation. Thanks to @​NAME-ASHWANIYADAV. #​5219
Replaced an incorrectly imported MUI icon with the Iconify equivalent in the Table component, restoring consistent icon rendering. Thanks to @​sniok. #​5178
Replaced console.log with console.debug for IndexedDB operational messages, keeping them available in development while hiding them in production. Thanks to @​NAME-ASHWANIYADAV. #​5177
Removed 54 lines of unreachable dead code from UpdatePopup and hardened window.open usage, simplifying the component and improving safety. Thanks to @​NAME-ASHWANIYADAV. #​5175
Expanded test coverage for the k8cache package, covering previously untested branches to improve backend reliability. Thanks to @​Athang69. #​5172
Upgraded Node.js to v22.x LTS across all CI workflows and package.json engines fields to stay ahead of Node 20 end-of-life. Thanks to @​sniok. #​5170
Removed a legacy Webpack-specific workaround from ErrorPage, cleaning up the component now that Headlamp fully uses Vite for SVG imports. Thanks to @​itvi-1234. #​5143
Enabled eslint-plugin-react-hooks lint rules in the frontend to surface hard-to-debug React hook mistakes earlier in development. Thanks to @​sniok. #​5155
Frontend lint warnings are now enforced as CI-blocking errors, with pre-existing violations suppressed, improving long-term code quality. Thanks to @​illume. #​5196
Added Storybook stories for the AddCluster component, making it easier to visually develop and test its key UI states.
Screenshot 2026-04-27 at 6 58 04 PM






💻 Development (part 3)

Development improvements
Added a README for the Headlamp Releaser CLI tool documenting prerequisites, usage, and how it automates version bumping, tagging, and publishing. Thanks to @​illume. #​4942
Increased pkg/config test coverage from 74.2% to 83.9% by adding unit tests for session TTL validation and default-application logic. Thanks to @​Athang69. #​5139
Removed the Create button from pod lists inside parent resource detail views (e.g. Jobs, Deployments) where adding pods directly is not valid. Thanks to @​kannon92. #​5136
CRD list fetch errors in the sidebar now use console.error instead of console.log, ensuring correct severity in browser developer tools. Thanks to @​NAME-ASHWANIYADAV. #​5128
Added unit tests for the Helm handler, bringing test coverage from 0% to 90.8% and improving backend reliability. Thanks to @​Athang69. #​5124
Replaced context.TODO() with explicit context.Background() in the drainNode goroutine, fixing improper context propagation in the backend. Thanks to @​itvi-1234. #​5095
Removed leftover development console.log statements from the Backstage integration to keep the browser console clean in production. Thanks to @​itvi-1234. #​5094
Replaced loose as any casts with strictly typed Partial<Response> in auth tests, reducing the risk of silent false-positive test results. Thanks to @​itvi-1234. #​5075
Removed an outdated TODO comment in NameValueTable.tsx that no longer applies after the React 18 migration was completed. Thanks to @​itvi-1234. #​5064
Escaped URLs in library typedoc comments to prevent the parser from misinterpreting them. Thanks to @​ashu8912. #​5027
Fixed activity panel text alignment for the cluster indicator and corrected text colors for themes with custom primary colors such as 'Lights Out'. Thanks to @​sniok. #​5020
Added 13 Storybook stories for ResourceTableMultiActions, covering all meaningful selection states to aid frontend development and testing. Thanks to @​mystic-06. Also thanks to @​illume for reporting the issue. #​4971
Added Storybook stories for the AddCluster component, making it easier to visually develop and test its key UI states. Thanks to @​Dharmiksarvaiya24. Also thanks to @​illume for reporting the issue. #​5171
Added Storybook stories for the KubeConfigLoader component, enabling visual testing of all kubeconfig upload and cluster import UI states. Thanks to @​vishnukothakapu. Also thanks to @​illume for reporting the issue. #​5166






🧩 Official Plugin releases




Container image: 🐳 ghcr.io/headlamp-k8s/headlamp:v0.42.0
Desktop Apps:

⚠️ Important: Information on warnings from Mac and Windows when running Headlamp unsigned apps.

🐧 Flatpak / Linux (AMD64)
🐧 Linux AppImage AMD64, ARM64, ARMv7l
🐧 Linux Tarball AMD64, ARM64, ARMv7l
🐧 Debian / Linux AMD64
🍏 Mac (AMD64)
🍏 Mac (ARM/M1)
🟦 Windows (AMD64)


Configuration

📅 Schedule: (in timezone America/New_York)

  • Branch creation
    • "after 3am and before 6am"
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR has been generated by Mend Renovate CLI.

This PR contains the following updates: | Package | Update | Change | |---|---|---| | [headlamp](https://headlamp.dev/) ([source](https://github.com/kubernetes-sigs/headlamp)) | minor | `>=0.41.0 <0.42.0` → `<0.47.0` | --- > ⚠️ **Warning** > > Some dependencies could not be looked up. Check the [Dependency Dashboard](issues/91) for more information. --- ### Release Notes <details> <summary>kubernetes-sigs/headlamp (headlamp)</summary> ### [`v0.46.0`](https://github.com/kubernetes-sigs/headlamp/releases/tag/v0.46.0): 0.46.0 [Compare Source](https://github.com/kubernetes-sigs/headlamp/compare/v0.45.0...v0.46.0) [Headlamp](https://headlamp.dev) 0.46.0 introduces alpha support for Kubernetes Dynamic Resource Allocation, making device classes, GPU claims, and claim templates visible in the dashboard. New hierarchical workload views, Job suspend and resume actions, a configurable details drawer, and a guided Endpoints form simplify everyday cluster work, while service port-forwards reconnect automatically after pod restarts. The release also improves OIDC login and logout, strengthens plugin credential isolation and release signing, and expands integration points for desktop products. Accessibility, localization, frontend build tooling, and reliability improvements round out the release across web and desktop. #### 🌟 Dynamic Resource Allocation (alpha): see how workloads get GPUs and other devices Headlamp now shows Kubernetes [Dynamic Resource Allocation (DRA)](https://kubernetes.io/docs/concepts/scheduling-eviction/dynamic-resource-allocation/), the Kubernetes API that workloads use to request GPUs and other devices. A new Devices section appears on clusters that serve `resource.k8s.io/v1` (Kubernetes 1.34+). DRA support is in alpha. ##### Devices section and Device Classes Browse the device classes your cluster offers, with their CEL selectors, driver settings, and extended resource names, in a Devices section that only appears where DRA is served. <img width="1901" height="627" alt="Headlamp Devices section showing the Device Classes list with class names, selector counts, drivers, and extended resources" src="https://github.com/user-attachments/assets/ce500b4e-50e4-4d19-af82-f70f02561e1b" /> ##### Device Class details See the CEL selectors a class uses to pick devices, shown exactly as written, along with its extended resource name and driver settings. <img width="1892" height="717" alt="DeviceClass big-gpu.example.com details showing its extended resource and two CEL selector expressions" src="https://github.com/user-attachments/assets/c49725f2-a8b3-4c38-a996-14ebe8a0c755" /> ##### Resource Claims See whether each claim is waiting for a device, allocated, or in use, along with the devices it was granted and the node they are on. <img width="1877" height="801" alt="Resource Claims list showing pending and in-use GPU claims with their device classes, allocated devices, and nodes" src="https://github.com/user-attachments/assets/89120f76-eb3d-4eff-8735-383d75564fab" /> ##### Resource Claim Templates Templates describe the devices a Pod asks for, and Kubernetes makes a new claim from them for every Pod. See each template's namespace, how many requests it makes, and which device classes it uses. <img width="1896" height="531" alt="Resource Claim Templates list showing template names, namespaces, request counts, and GPU device classes" src="https://github.com/user-attachments/assets/4d1be022-fe42-4d8d-8278-54633b0963bf" /> Implemented across [#&#8203;7724](https://github.com/kubernetes-sigs/headlamp/pull/7724), [#&#8203;7820](https://github.com/kubernetes-sigs/headlamp/pull/7820), and [#&#8203;7971](https://github.com/kubernetes-sigs/headlamp/pull/7971). Thanks to [@&#8203;Anjali-Chauhan1](https://github.com/Anjali-Chauhan1). Feedback is welcome on [#&#8203;4831](https://github.com/kubernetes-sigs/headlamp/issues/4831). <br><br> <br><br> #### ✨ Enhancements (part 1) | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="800" height="0" alt=""> | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="200" height="0" alt=""> | | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | | Adds an OIDC auto-login server flag and Helm setting so users are redirected straight to the identity provider without clicking a login button, fixing post-login redirect bugs along the way. | Thanks to:<br>[@&#8203;Suyog241005](https://github.com/Suyog241005)<br>[@&#8203;mudit06mah](https://github.com/mudit06mah).<br>Thanks to [@&#8203;menardorama](https://github.com/menardorama) for reporting.<br>[#&#8203;7071](https://github.com/kubernetes-sigs/headlamp/issues/7071) | | Adds Suspend and Resume actions for Jobs in the details header and table row menu, so users can toggle spec.suspend without editing YAML or using kubectl. | Thanks to [@&#8203;PixelRobots](https://github.com/PixelRobots).<br>[#&#8203;7698](https://github.com/kubernetes-sigs/headlamp/issues/7698) | | Adds a setting to open the details drawer on the right, left, or bottom instead of a hardcoded right side, letting users place the panel where they prefer, with the choice saved locally. | Thanks to [@&#8203;WasThatRudy](https://github.com/WasThatRudy).<br>Thanks to [@&#8203;jasoncologix](https://github.com/jasoncologix) for reporting.<br>[#&#8203;7126](https://github.com/kubernetes-sigs/headlamp/issues/7126) | | Added French translations for 75 missing strings, mostly in the new create forms and address validation messages, so French-speaking users see these forms in their language while Kubernetes API values stay untranslated. | Thanks to [@&#8203;berlewis](https://github.com/berlewis).<br>[#&#8203;7902](https://github.com/kubernetes-sigs/headlamp/issues/7902) | | The desktop build manifest now accepts a product-owned company name and a separate Linux maintainer contact, mapped to Electron Builder metadata, so branded products can set their own publisher details. | Thanks to [@&#8203;illume](https://github.com/illume).<br>[#&#8203;7746](https://github.com/kubernetes-sigs/headlamp/issues/7746) | | Products can now declare an explicit approvedCommands list separate from plugin-authorized commands, giving product-owned defaults without seeding user settings or auto-approving every shipped plugin command. | Thanks to [@&#8203;illume](https://github.com/illume).<br>[#&#8203;7685](https://github.com/kubernetes-sigs/headlamp/issues/7685) | | Added a guided create form for Endpoints that edits subsets, addresses and ports and validates them like the API server, so users avoid hand-writing YAML and catch errors such as loopback IPs before submitting. | Thanks to [@&#8203;vyncent-t](https://github.com/vyncent-t).<br>[#&#8203;7666](https://github.com/kubernetes-sigs/headlamp/issues/7666) | ##### Adds Suspend and Resume actions for Jobs in the details header and table row menu, so users can toggle spec.suspend without editing YAML or using kubectl. <img width="1720" height="1392" alt="Headlamp Jobs page with the headlamp-suspend-demo details drawer and its suspend action in the toolbar" src="https://github.com/user-attachments/assets/f726edbd-20e6-476a-a950-10497774cbab" /> <br><br> <br><br> #### ✨ Enhancements (part 2) | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="800" height="0" alt=""> | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="200" height="0" alt=""> | | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | | Added CompositePodGroup views for hierarchical gang scheduling, so users can see the nested pod group tree and tell which part of a nested workload failed to schedule. | Thanks to [@&#8203;Anjali-Chauhan1](https://github.com/Anjali-Chauhan1).<br>[#&#8203;7542](https://github.com/kubernetes-sigs/headlamp/issues/7542) | | Browser document titles now include the configured product name, so branded Headlamp builds remain identifiable in tabs and browser history. | Thanks to:<br>[@&#8203;illume](https://github.com/illume)<br>[@&#8203;sniok](https://github.com/sniok).<br>[#&#8203;7298](https://github.com/kubernetes-sigs/headlamp/issues/7298) | | Branded Headlamp builds can now set an optional distribution product version that the top-bar menu shows, while the version dialog keeps the Headlamp version and Git commit for clear identification. | Thanks to:<br>[@&#8203;illume](https://github.com/illume)<br>[@&#8203;joaquimrocha](https://github.com/joaquimrocha).<br>[#&#8203;7287](https://github.com/kubernetes-sigs/headlamp/issues/7287) | | Adds a validated registry for desktop OAuth callback providers that routes startup, second-instance and macOS protocol callbacks to them, while unmatched product URLs keep using the existing deep-link path. | Thanks to:<br>[@&#8203;illume](https://github.com/illume)<br>[@&#8203;gambtho](https://github.com/gambtho).<br>[#&#8203;7281](https://github.com/kubernetes-sigs/headlamp/issues/7281) | | Exporting stable IDs for the built-in project creation choices lets plugins replace the namespace or YAML option with their own creator, while additional plugin choices stay after the two built-in ones. | Thanks to:<br>[@&#8203;illume](https://github.com/illume)<br>[@&#8203;gambtho](https://github.com/gambtho).<br>[#&#8203;7280](https://github.com/kubernetes-sigs/headlamp/issues/7280) | | Project overview cards from plugins are now hidden when their component renders nothing, so users no longer see empty cards while populated sections keep the standard three-column layout. | Thanks to:<br>[@&#8203;illume](https://github.com/illume)<br>[@&#8203;sniok](https://github.com/sniok)<br>[@&#8203;ashu8912](https://github.com/ashu8912).<br>[#&#8203;7279](https://github.com/kubernetes-sigs/headlamp/issues/7279) | | The desktop app now reads checkForUpdates from the packaged build manifest, falling back to HEADLAMP_CHECK_FOR_UPDATES, so downstream builds can configure update checks at packaging time. | Thanks to:<br>[@&#8203;illume](https://github.com/illume)<br>[@&#8203;sniok](https://github.com/sniok).<br>[#&#8203;7278](https://github.com/kubernetes-sigs/headlamp/issues/7278) | | Service-backed port-forwards now reconnect automatically by resolving a new pod through the Endpoints API after a pod restart, so rolling updates no longer leave them stopped and needing a manual restart. | Thanks to [@&#8203;Slambot01](https://github.com/Slambot01).<br>[#&#8203;7273](https://github.com/kubernetes-sigs/headlamp/issues/7273) | | The desktop app now reads its protocol scheme from product metadata and rejects malformed or other-product deep links, so branded builds handle only their own links while headlamp remains the default. | Thanks to:<br>[@&#8203;illume](https://github.com/illume)<br>[@&#8203;gambtho](https://github.com/gambtho).<br>[#&#8203;7252](https://github.com/kubernetes-sigs/headlamp/issues/7252) | ##### Added CompositePodGroup views for hierarchical gang scheduling, so users can see the nested pod group tree and tell which part of a nested workload failed to schedule. <img width="1600" height="723" alt="PodGroup prefill-0 details showing gang policy, minimum count, workload, composite pod group, and scheduled condition" src="https://github.com/user-attachments/assets/dc103669-cc50-4214-9869-5197e470b2e7" /> ##### Project overview cards from plugins are now hidden when their component renders nothing, so users no longer see empty cards while populated sections keep the standard three-column layout. ![Project overview before the fix, with an empty custom card beside populated sections](https://raw.githubusercontent.com/illume/headlamp/pr-screenshots-0064-assets-20260815-v2/.github/screenshots/0064/before.png) <br><br> <br><br> #### ✨ Enhancements (part 3) | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="800" height="0" alt=""> | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="200" height="0" alt=""> | | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------: | | Headlamp's custom Table now honors `enableTopToolbar={false}` and `enableRowSelection={false}`, so hidden toolbars stay hidden and independent checkbox cells keep their native behavior. | Thanks to:<br>[@&#8203;illume](https://github.com/illume)<br>[@&#8203;sniok](https://github.com/sniok).<br>[#&#8203;7051](https://github.com/kubernetes-sigs/headlamp/issues/7051) | | Plugins can register custom project namespace grouping through `registerProjectGrouping`, while default grouping and repeated project IDs stay distinct so namespaces are not wrongly merged. | Thanks to:<br>[@&#8203;illume](https://github.com/illume)<br>[@&#8203;yolossn](https://github.com/yolossn).<br>[#&#8203;6905](https://github.com/kubernetes-sigs/headlamp/issues/6905) | | LogViewer gains a Copy to Clipboard action, allowing users to copy log output directly without downloading it first. | Thanks to [@&#8203;Priyanshu-rgbb](https://github.com/Priyanshu-rgbb).<br>[#&#8203;6813](https://github.com/kubernetes-sigs/headlamp/issues/6813) | <br><br> <br><br> #### 🐞 Bug fixes (part 1) | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="800" height="0" alt=""> | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="200" height="0" alt=""> | | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | | Adds RP-initiated OIDC logout for server-owned contexts so signing out ends the provider's SSO session instead of silently signing the same user straight back in. | Thanks to:<br>[@&#8203;big-appled](https://github.com/big-appled)<br>[@&#8203;skoeva](https://github.com/skoeva).<br>Thanks to [@&#8203;manujayanth](https://github.com/manujayanth) for reporting.<br>[#&#8203;5972](https://github.com/kubernetes-sigs/headlamp/issues/5972) | | Quiets the kubeconfig watcher when kubeconfig files are missing, so a default in-cluster Headlamp no longer fills its pod log with misleading ERROR lines when nothing is wrong. | Thanks to [@&#8203;govindup63](https://github.com/govindup63).<br>Thanks to [@&#8203;NoamBrodie](https://github.com/NoamBrodie) and [@&#8203;BigFlagBurito](https://github.com/BigFlagBurito) for reporting.<br>[#&#8203;5731](https://github.com/kubernetes-sigs/headlamp/issues/5731) | | Checks the latest Helm release revision instead of only deployed ones, so failed or pending releases can be viewed, rolled back, or uninstalled and missing releases correctly return 404. | Thanks to [@&#8203;NachiketPatil26](https://github.com/NachiketPatil26).<br>Thanks to [@&#8203;ghost](https://github.com/ghost) for reporting.<br>[#&#8203;7859](https://github.com/kubernetes-sigs/headlamp/issues/7859) | | Service pod lookup for port-forwarding now uses the service resource's own cluster, so the port-forward button no longer goes missing when service details are opened from a project view. | Thanks to [@&#8203;tejhan](https://github.com/tejhan).<br>[#&#8203;7958](https://github.com/kubernetes-sigs/headlamp/issues/7958) | | EndpointSlices are now matched to Services via the kubernetes.io/service-name label before falling back to ownerReferences, so API-server-created slices like the default kubernetes one link to their Service. | Thanks to [@&#8203;aashu2006](https://github.com/aashu2006).<br>[#&#8203;7931](https://github.com/kubernetes-sigs/headlamp/issues/7931) | | Editing a container port in the create resource form now preserves other ports and the edited port's fields like name and protocol, preventing silent data loss and crashes on partially typed YAML rows. | Thanks to [@&#8203;HarshPopat23](https://github.com/HarshPopat23).<br>[#&#8203;7914](https://github.com/kubernetes-sigs/headlamp/issues/7914) | | Fixed a crash in the Service details view when an EndpointSlice has null endpoints, so services with no ready backends, such as a Deployment scaled to 0, still display correctly. | Thanks to [@&#8203;Pradyuman-aviator](https://github.com/Pradyuman-aviator).<br>[#&#8203;7909](https://github.com/kubernetes-sigs/headlamp/issues/7909) | | Service External IP now shows the external name for ExternalName services and \<pending> for LoadBalancers without ingress, matching kubectl instead of showing a misleading "-". | Thanks to [@&#8203;Aarti-panchal01](https://github.com/Aarti-panchal01).<br>[#&#8203;7907](https://github.com/kubernetes-sigs/headlamp/issues/7907) | | Diagnostics now surface negative-polarity conditions like ReplicaFailure=True, so workloads blocked by a ResourceQuota or admission controller from creating pods show the explanatory failure message. | Thanks to [@&#8203;HarshPopat23](https://github.com/HarshPopat23).<br>[#&#8203;7904](https://github.com/kubernetes-sigs/headlamp/issues/7904) | | StorageClass now recognizes the beta is-default-class annotation as well as the GA one, so default classes show as default in list and details views, matching kubectl get sc. | Thanks to [@&#8203;NachiketPatil26](https://github.com/NachiketPatil26).<br>Thanks to [@&#8203;ghost](https://github.com/ghost) for reporting.<br>[#&#8203;7900](https://github.com/kubernetes-sigs/headlamp/issues/7900) | ##### EndpointSlices now link to their Services <img width="1200" alt="Headlamp resource map showing the kubernetes Service connected to its Endpoints and EndpointSlice" src="https://github.com/user-attachments/assets/d6d8527b-a83b-4ae7-a2b3-393e27f825f8" /> <br><br> <br><br> #### 🐞 Bug fixes (part 2) | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="800" height="0" alt=""> | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="200" height="0" alt=""> | | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | | The PVC create form now keeps the StorageClass input visible while its text is being edited, so replacing a name no longer hides the field and creates the PVC with the default StorageClass instead. | Thanks to [@&#8203;9p-tech](https://github.com/9p-tech).<br>[#&#8203;7897](https://github.com/kubernetes-sigs/headlamp/issues/7897) | | Replica count helpers now tolerate workloads with no status, such as JobSets waiting on a Kueue MultiKueue manager cluster, preventing the Workloads overview from crashing. | Thanks to [@&#8203;glassharbor](https://github.com/glassharbor).<br>[#&#8203;7893](https://github.com/kubernetes-sigs/headlamp/issues/7893) | | Custom resource date printer columns are now formatted only when the field has a value, so unset dates show an empty cell instead of "Invalid Date". | Thanks to [@&#8203;Aarti-panchal01](https://github.com/Aarti-panchal01).<br>[#&#8203;7892](https://github.com/kubernetes-sigs/headlamp/issues/7892) | | The log viewer search now subscribes to result changes before running findNext, so the match count updates correctly while typing instead of showing "Too many matches" or a stale count. | Thanks to [@&#8203;9p-tech](https://github.com/9p-tech).<br>[#&#8203;7889](https://github.com/kubernetes-sigs/headlamp/issues/7889) | | Docker extension releases now build, publish and sign the image without pushing a version bump to main, which Prow rejects, so the extension can update beyond 0.35.0 again. | Thanks to [@&#8203;govindup63](https://github.com/govindup63).<br>Thanks to [@&#8203;skoeva](https://github.com/skoeva) for reporting.<br>[#&#8203;7877](https://github.com/kubernetes-sigs/headlamp/issues/7877) | | The desktop app's deep-link handler now adds a missing slash after the # in the URL, so returns from flows like OAuth route to the correct page. | Thanks to [@&#8203;sapnilbiswas](https://github.com/sapnilbiswas).<br>[#&#8203;7872](https://github.com/kubernetes-sigs/headlamp/issues/7872) | | The Home Warnings column now merges results from every allowed namespace per cluster instead of keeping only the last, so warning counts are correct with multiple namespaces. | Thanks to [@&#8203;9p-tech](https://github.com/9p-tech).<br>[#&#8203;7866](https://github.com/kubernetes-sigs/headlamp/issues/7866) | | Renaming a cluster back to its original name now works and clears the saved custom name, instead of failing with a 'custom name already in use' error. | Thanks to [@&#8203;h55n](https://github.com/h55n).<br>Thanks to [@&#8203;9p-tech](https://github.com/9p-tech) for reporting.<br>[#&#8203;7843](https://github.com/kubernetes-sigs/headlamp/issues/7843) | | Backend start scripts now run through cross-env, so npm start works on Windows where cmd.exe can't parse POSIX-style variable prefixes and the backend previously never started. | Thanks to [@&#8203;carterpewpew](https://github.com/carterpewpew).<br>Thanks to [@&#8203;Adi-204](https://github.com/Adi-204) for reporting.<br>[#&#8203;7839](https://github.com/kubernetes-sigs/headlamp/issues/7839) | | Request tracing and metrics middleware are now attached to the router that actually serves requests, restoring HTTP spans with -tracing-enabled while keeping streaming responses working. | Thanks to [@&#8203;dlanov](https://github.com/dlanov).<br>Thanks to [@&#8203;silvioincalza](https://github.com/silvioincalza) for reporting.<br>[#&#8203;7762](https://github.com/kubernetes-sigs/headlamp/issues/7762) | <br><br> <br><br> #### 🐞 Bug fixes (part 3) | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="800" height="0" alt=""> | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="200" height="0" alt=""> | | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | | Node Details now shows all capacity and allocatable resources instead of a hardcoded key list, so extended resources such as GPUs and hugepages are visible to users. | Thanks to [@&#8203;Anushka-2905](https://github.com/Anushka-2905).<br>Thanks to [@&#8203;jayaprajapatii](https://github.com/jayaprajapatii) for reporting.<br>[#&#8203;7603](https://github.com/kubernetes-sigs/headlamp/issues/7603) | | The Release Notes dialog now keeps GitHub's zero-height table header images and their sizing instead of stripping them, so release note tables and images render readably. | Thanks to [@&#8203;NachiketPatil26](https://github.com/NachiketPatil26).<br>Thanks to [@&#8203;sniok](https://github.com/sniok) for reporting.<br>[#&#8203;7573](https://github.com/kubernetes-sigs/headlamp/issues/7573) | | Settings now reads the app's live theme through useTheme() instead of importing a test-only fixture, so production code no longer depends on TestHelpers and follows the real theme. | Thanks to [@&#8203;Priyanshu-rgbb](https://github.com/Priyanshu-rgbb).<br>[#&#8203;7493](https://github.com/kubernetes-sigs/headlamp/issues/7493) | | Safe requests are now retried after client-go refreshes an exec credential following a transient 401, so users no longer see the token login dialog when the next request would succeed. | Thanks to [@&#8203;nungster](https://github.com/nungster).<br>[#&#8203;7483](https://github.com/kubernetes-sigs/headlamp/issues/7483) | | The macOS tray icon now uses 16×16 and 32×32 template images in place of the 22×22 and 44×44 ones, so it matches the size of neighboring menu-bar icons instead of looking oversized. | Thanks to [@&#8203;nova9](https://github.com/nova9).<br>[#&#8203;7476](https://github.com/kubernetes-sigs/headlamp/issues/7476) | | CronJob Spawn Job now binds the request to the CronJob's own cluster, so the Job is no longer created on the wrong cluster when the URL cluster differs after the grace period. | Thanks to:<br>[@&#8203;YousufFFFF](https://github.com/YousufFFFF)<br>[@&#8203;yolossn](https://github.com/yolossn).<br>[#&#8203;7304](https://github.com/kubernetes-sigs/headlamp/issues/7304) | | Desktop runCommand IPC listeners are now released when commands exit or are rejected, preventing leaked subscriptions and making plugin manager command cleanup consistent. | Thanks to:<br>[@&#8203;illume](https://github.com/illume)<br>[@&#8203;tejhan](https://github.com/tejhan).<br>[#&#8203;7277](https://github.com/kubernetes-sigs/headlamp/issues/7277) | | Lowercase `k` is now parsed as kilo in byte quantities, so Kubernetes values like `500k` read as 500000 bytes instead of being silently under-reported by 1000x. | Thanks to:<br>[@&#8203;omlahore](https://github.com/omlahore)<br>[@&#8203;skoeva](https://github.com/skoeva).<br>[#&#8203;7073](https://github.com/kubernetes-sigs/headlamp/issues/7073) | | Query retries now stop immediately for permanent HTTP errors below 500 while still retrying temporary ones like 408 and 429, avoiding pointless repeat requests that cannot succeed. | Thanks to:<br>[@&#8203;illume](https://github.com/illume)<br>[@&#8203;sniok](https://github.com/sniok).<br>[#&#8203;6907](https://github.com/kubernetes-sigs/headlamp/issues/6907) | ##### Release notes render tables and images correctly <img width="1200" alt="Headlamp Release Notes dialog displaying formatted tables and images" src="https://github.com/user-attachments/assets/712b72b0-7255-4b3e-a19f-a8e105416ea2" /> <br><br> <br><br> #### 🐞 Bug fixes (part 4) | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="800" height="0" alt=""> | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="200" height="0" alt=""> | | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------: | | Electron Zoom In, Zoom Out, and Reset menu actions are restored after plugin menu serialization strips callbacks, so users can zoom the app again from the menu. | Thanks to:<br>[@&#8203;illume](https://github.com/illume)<br>[@&#8203;skoeva](https://github.com/skoeva).<br>[#&#8203;6891](https://github.com/kubernetes-sigs/headlamp/issues/6891) | | Byte-quantity parsing now handles micro (`u`) and nano (`n`) suffixes, so fractional values no longer fall through as raw bytes and skew memory usage percentages by about 1000x. | Thanks to [@&#8203;Pratikdeb07](https://github.com/Pratikdeb07).<br>[#&#8203;6817](https://github.com/kubernetes-sigs/headlamp/issues/6817) | | MCP clients no longer restart when only secondary selected clusters are reordered, avoiding unnecessary disruption while keeping the current cluster first and backend context order deterministic. | Thanks to [@&#8203;rootp1](https://github.com/rootp1).<br>[#&#8203;6536](https://github.com/kubernetes-sigs/headlamp/issues/6536) | <br><br> <br><br> #### 🔒 Security | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="800" height="0" alt=""> | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="200" height="0" alt=""> | | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------: | | Added grouped weekly Dependabot updates for Go modules, GitHub Actions and Docker base images, so dependencies and pinned actions stay current without manual work or one PR per backend module. | Thanks to [@&#8203;skoeva](https://github.com/skoeva).<br>[#&#8203;7864](https://github.com/kubernetes-sigs/headlamp/issues/7864) | | Release signing now works for checksums, container images and release tags, dropping the broken GPG signature, so users can verify releases and tags are signed consistently. | Thanks to [@&#8203;skoeva](https://github.com/skoeva).<br>[#&#8203;7858](https://github.com/kubernetes-sigs/headlamp/issues/7858) | | Added a provider-neutral cluster registration framework to the desktop app, allowing authorized product plugins to retrieve cluster credentials and safely register clusters in the user's kubeconfig. | Thanks to [@&#8203;illume](https://github.com/illume).<br>[#&#8203;7744](https://github.com/kubernetes-sigs/headlamp/issues/7744) | | Service proxy requests with a relative URI now keep the configured URIPrefix base path and block encoded traversal, so requests like /status resolve under /api/v1/proxy instead of the host root. | Thanks to [@&#8203;zanarellidev](https://github.com/zanarellidev).<br>[#&#8203;7594](https://github.com/kubernetes-sigs/headlamp/issues/7594) | | Desktop plugins can now use Electron safeStorage through a frozen pluginSecureStorage API with per-plugin namespaces and token-based access, so each plugin's encrypted values stay isolated from others. | Thanks to:<br>[@&#8203;illume](https://github.com/illume)<br>[@&#8203;gambtho](https://github.com/gambtho).<br>[#&#8203;7253](https://github.com/kubernetes-sigs/headlamp/issues/7253) | | MCP desktop debug logging is now off by default and redacts values when HEADLAMP_MCP_DEBUG=true, so arguments and cluster metadata no longer leak into logs. | Thanks to [@&#8203;rootp1](https://github.com/rootp1).<br>[#&#8203;6529](https://github.com/kubernetes-sigs/headlamp/issues/6529) | | Desktop MCP child processes now get only the SDK's default platform environment plus explicitly configured server env values, so the full Headlamp process environment is no longer inherited. | Thanks to [@&#8203;rootp1](https://github.com/rootp1).<br>[#&#8203;6521](https://github.com/kubernetes-sigs/headlamp/issues/6521) | <br><br> <br><br> #### ♿ Accessibility | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="800" height="0" alt=""> | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="200" height="0" alt=""> | | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | | Adds alt+shift+p and alt+shift+d hotkeys for Pods and Deployments that keep the selected namespace filter, so users no longer have to re-select it after keyboard navigation. | Thanks to [@&#8203;aditya-c7](https://github.com/aditya-c7).<br>Thanks to [@&#8203;Rucha0901](https://github.com/Rucha0901) for reporting.<br>[#&#8203;7851](https://github.com/kubernetes-sigs/headlamp/issues/7851) | | Removes a stale RestartMultipleButton entry from the accessibility baseline, so CI strictly enforces the already-fixed aria-required-parent rule and catches regressions. | Thanks to [@&#8203;Bhargava-Ram-Thunga](https://github.com/Bhargava-Ram-Thunga).<br>Thanks to [@&#8203;illume](https://github.com/illume) for reporting.<br>[#&#8203;7395](https://github.com/kubernetes-sigs/headlamp/issues/7395) | | Cluster Overview pod and node status pie charts now link to filtered list views, so users can jump straight to unready pods, cordoned nodes, or unready nodes when troubleshooting. | Thanks to [@&#8203;Suyog241005](https://github.com/Suyog241005).<br>Thanks to [@&#8203;kriswuollett](https://github.com/kriswuollett) for reporting.<br>[#&#8203;6748](https://github.com/kubernetes-sigs/headlamp/issues/6748) | | Removed the resolved scrollable-region-focusable entry from the Storybook accessibility baseline for ClusterChooserPopup, keeping the baseline accurate now that the list is keyboard-focusable and axe-core no longer flags it. | Thanks to [@&#8203;ubermensch177](https://github.com/ubermensch177).<br>Thanks to [@&#8203;illume](https://github.com/illume) for reporting.<br>[#&#8203;7898](https://github.com/kubernetes-sigs/headlamp/issues/7898) | | DropZoneBox now uses a theme-aware border instead of hardcoded pure black, so the drop area outline stays visible in dark mode. | Thanks to [@&#8203;Priyanshu-rgbb](https://github.com/Priyanshu-rgbb).<br>[#&#8203;7551](https://github.com/kubernetes-sigs/headlamp/issues/7551) | | The editor dialog now asks for confirmation before discarding unsaved changes via Close, X, Escape or backdrop, preventing accidental loss of edits while pristine editors still close immediately. | Thanks to [@&#8203;Adi-204](https://github.com/Adi-204).<br>[#&#8203;7443](https://github.com/kubernetes-sigs/headlamp/issues/7443) | | VersionDialog now falls back to 'Headlamp' when the product name is unset and stale axe baseline entries are removed, so the dialog always has an accessible name and title. | Thanks to [@&#8203;Bhargava-Ram-Thunga](https://github.com/Bhargava-Ram-Thunga).<br>Thanks to [@&#8203;illume](https://github.com/illume) for reporting.<br>[#&#8203;7425](https://github.com/kubernetes-sigs/headlamp/issues/7425) | | Project Details can now grow past the viewport, the resources grid keeps a 300 px minimum height and the category list is capped and scrollable, keeping content usable at high zoom. | Thanks to:<br>[@&#8203;illume](https://github.com/illume)<br>[@&#8203;gambtho](https://github.com/gambtho).<br>[#&#8203;7293](https://github.com/kubernetes-sigs/headlamp/issues/7293) | | ShowHideLabel's expand/collapse button now sits outside the label element and carries the aria-expanded and aria-controls attributes, fixing an accessibility issue for assistive technology users. | Thanks to [@&#8203;Alok-work23](https://github.com/Alok-work23).<br>Thanks to [@&#8203;illume](https://github.com/illume) for reporting.<br>[#&#8203;7267](https://github.com/kubernetes-sigs/headlamp/issues/7267) | | Stale label-title-only entries were removed from the accessibility baseline for the Settings stories, so the baseline reflects the fixed Debug Image field and no longer lists resolved violations. | Thanks to [@&#8203;Bhargava-Ram-Thunga](https://github.com/Bhargava-Ram-Thunga).<br>Thanks to [@&#8203;illume](https://github.com/illume) for reporting.<br>[#&#8203;7224](https://github.com/kubernetes-sigs/headlamp/issues/7224) | | Resource-map labels now reflow instead of using fixed sizing, preventing content from being clipped at 200% text zoom. | Thanks to:<br>[@&#8203;illume](https://github.com/illume)<br>[@&#8203;gambtho](https://github.com/gambtho).<br>[#&#8203;6910](https://github.com/kubernetes-sigs/headlamp/issues/6910) | | Kubeconfig load dialog errors now use the themed MUI Alert component instead of a hardcoded red box, so they follow the active theme and include an error icon rather than relying on color alone. | Thanks to [@&#8203;Satyam087](https://github.com/Satyam087).<br>[#&#8203;7751](https://github.com/kubernetes-sigs/headlamp/issues/7751) | ##### Visible file upload borders in dark mode <img width="1200" alt="File upload area in dark mode with a visible dashed border and readable selection text" src="https://github.com/user-attachments/assets/3db007e9-1a2b-49cb-8c8d-6872ffed74bf" /> ##### Confirmation before discarding unsaved edits <img width="1200" alt="Confirmation dialog asking whether to discard unsaved editor changes" src="https://github.com/user-attachments/assets/4efa1ec4-380f-49d1-ab10-6b72bd14294a" /> ##### Themed kubeconfig error alerts <img width="1200" alt="Kubeconfig load dialog showing a themed error alert with an error icon" src="https://raw.githubusercontent.com/Satyam087/headlamp/assets/img/kubeconfig-error-after.png" /> <br><br> <br><br> #### ⚡ Performance and Build Speed | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="800" height="0" alt=""> | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="200" height="0" alt=""> | | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | | Table filters now reuse stable row models and cache dropdown options on demand, avoiding repeated work while restoring Status and Namespace filters on large clusters with their memory safeguards intact. | Thanks to [@&#8203;srebb](https://github.com/srebb).<br>[#&#8203;7486](https://github.com/kubernetes-sigs/headlamp/issues/7486) | | Makes Rsbuild the default frontend builder while keeping Vite scripts available, addressing build crashes on low-memory CI and slow or broken dev mode on Windows. | Thanks to [@&#8203;illume](https://github.com/illume).<br>Thanks to [@&#8203;vyncent-t](https://github.com/vyncent-t) for reporting.<br>[#&#8203;7712](https://github.com/kubernetes-sigs/headlamp/issues/7712) | | Packaging no longer runs an intermediate unpacked Electron Builder pass and adds a prepared-assets path, so repeated package preparation is avoided and builds with prebuilt assets skip redundant work. | Thanks to [@&#8203;illume](https://github.com/illume).<br>[#&#8203;7727](https://github.com/kubernetes-sigs/headlamp/issues/7727) | | The Build App workflow now caches npm and Go dependencies and cancels superseded runs on new pushes, making one of the slowest PR checks faster and avoiding wasted builds. | Thanks to [@&#8203;skoeva](https://github.com/skoeva).<br>[#&#8203;6210](https://github.com/kubernetes-sigs/headlamp/issues/6210) | | Removed the dead base-branch coverage step from the backend-test workflow, so PRs run the test suite once instead of twice and save roughly 40-50 seconds. | Thanks to [@&#8203;skoeva](https://github.com/skoeva).<br>[#&#8203;6190](https://github.com/kubernetes-sigs/headlamp/issues/6190) | <br><br> <br><br> #### 📖 Documentation | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="800" height="0" alt=""> | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="200" height="0" alt=""> | | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -----------------------------------------------------------------------------------------------------------------------------: | | The identity-aware proxy guide now includes a Pomerium example with Ingress Controller setup and Headlamp Helm values, helping users configure it and understand the shared service account for API access. | Thanks to [@&#8203;desimone](https://github.com/desimone).<br>[#&#8203;7227](https://github.com/kubernetes-sigs/headlamp/issues/7227) | <br><br> <br><br> #### 💻 Development (part 1) | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="800" height="0" alt=""> | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="200" height="0" alt=""> | | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------: | | Wraps the SettingsCluster loading text in the translation function, so the loading indicator appears in the user's chosen language like other loaders. | Thanks to [@&#8203;Priyanshu-rgbb](https://github.com/Priyanshu-rgbb).<br>[#&#8203;7553](https://github.com/kubernetes-sigs/headlamp/issues/7553) | | Bundled Plugin Catalog updated from 0.4.4 to 0.4.5 with its new archive SHA-256 checksum pinned, so builds ship the latest catalog release with a verified archive. | Thanks to [@&#8203;illume](https://github.com/illume).<br>[#&#8203;7979](https://github.com/kubernetes-sigs/headlamp/issues/7979) | | Added the missing Portuguese translation key for the table filter message, so the frontend i18n check passes again on main. | Thanks to [@&#8203;Aarti-panchal01](https://github.com/Aarti-panchal01).<br>[#&#8203;7953](https://github.com/kubernetes-sigs/headlamp/issues/7953) | | Terminal storybook snapshots now normalize xterm's counter-based ids in injected style tags, making the storyshots independent of how many xterm instances were created earlier in the test run. | Thanks to [@&#8203;Priyanshu-rgbb](https://github.com/Priyanshu-rgbb).<br>[#&#8203;7908](https://github.com/kubernetes-sigs/headlamp/issues/7908) | | Added unit tests for the BackLink component covering its label, styling and back navigation, so regressions in this shared navigation element are caught early. | Thanks to [@&#8203;sapnilbiswas](https://github.com/sapnilbiswas).<br>[#&#8203;7895](https://github.com/kubernetes-sigs/headlamp/issues/7895) | | Added unit tests for the SectionBox layout component covering its content and title rendering, so regressions in this widely used common component are caught early. | Thanks to [@&#8203;sapnilbiswas](https://github.com/sapnilbiswas).<br>[#&#8203;7884](https://github.com/kubernetes-sigs/headlamp/issues/7884) | | Added unit tests for the EmptyContent component covering string and ReactNode children and color forwarding, helping catch regressions in how it renders. | Thanks to [@&#8203;sapnilbiswas](https://github.com/sapnilbiswas).<br>[#&#8203;7868](https://github.com/kubernetes-sigs/headlamp/issues/7868) | | Packaging now reports start times and elapsed durations for backend, app assembly, post-pack and artifact build phases, making it easier for developers to see where build time goes. | Thanks to [@&#8203;illume](https://github.com/illume).<br>[#&#8203;7731](https://github.com/kubernetes-sigs/headlamp/issues/7731) | <br><br> <br><br> #### 💻 Development (part 2) | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="800" height="0" alt=""> | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="200" height="0" alt=""> | | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------: | | The product manifest's display name is now applied to the Electron runtime before storage modules load, so branded development builds use their own default profile directory instead of sharing Headlamp's. | Thanks to [@&#8203;illume](https://github.com/illume).<br>[#&#8203;7615](https://github.com/kubernetes-sigs/headlamp/issues/7615) | | Adds empty batch/v1 Job and CronJob list responses to the frontend and plugin-template Storybook mocks, so workload list stories no longer depend on unhandled Kubernetes API requests. | Thanks to:<br>[@&#8203;illume](https://github.com/illume)<br>[@&#8203;skoeva](https://github.com/skoeva).<br>[#&#8203;7473](https://github.com/kubernetes-sigs/headlamp/issues/7473) | | Expands Storybook apps/v1 workload mocks to cover namespaced and cluster-prefixed requests, with end-to-end regressions for all four apps workload list pages so these stories render reliably. | Thanks to:<br>[@&#8203;illume](https://github.com/illume)<br>[@&#8203;skoeva](https://github.com/skoeva).<br>[#&#8203;7438](https://github.com/kubernetes-sigs/headlamp/issues/7438) | | Desktop command execution now reports distinct exit codes (-1, -2, -3) for invalid data, rejected permission secrets and denied consent, letting renderer callers tell these rejections apart. | Thanks to:<br>[@&#8203;illume](https://github.com/illume)<br>[@&#8203;tejhan](https://github.com/tejhan).<br>[#&#8203;7294](https://github.com/kubernetes-sigs/headlamp/issues/7294) | | Added regression tests for ActivitiesRenderer's route-change policy, so ordinary split-right activities stay visible while blocking activities and details drawers are minimized as intended. | Thanks to [@&#8203;illume](https://github.com/illume).<br>[#&#8203;6323](https://github.com/kubernetes-sigs/headlamp/issues/6323) | <br><br> <br><br> #### 💻 Development (part 3) | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="800" height="0" alt=""> | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="200" height="0" alt=""> | | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------: | | Frontend product name, version and source revision are now generated from the selected build manifest and safely escaped for Vite's dotenv format, so packaged-source metadata is preserved without comment or expansion corruption. | Thanks to [@&#8203;illume](https://github.com/illume).<br>[#&#8203;7474](https://github.com/kubernetes-sigs/headlamp/issues/7474) | | Added TypeScript declarations and test coverage for the shared i18next parser and runtime configuration, making locale selection and right-to-left direction verifiable for developers. | Thanks to:<br>[@&#8203;illume](https://github.com/illume)<br>[@&#8203;sniok](https://github.com/sniok).<br>[#&#8203;7066](https://github.com/kubernetes-sigs/headlamp/issues/7066) | | Added a Storybook story for the EventsLifetimeInfo component, giving it snapshot test coverage through the repo's storybook tests where it previously had none. | Thanks to [@&#8203;xonas1101](https://github.com/xonas1101).<br>[#&#8203;6507](https://github.com/kubernetes-sigs/headlamp/issues/6507) | | The warning bar in the PerformanceTest2000Pods story now uses full width and border-box sizing, so it stays aligned when Change % is set to 25% or 50%. | Thanks to [@&#8203;anurag-p6](https://github.com/anurag-p6).<br>[#&#8203;7477](https://github.com/kubernetes-sigs/headlamp/issues/7477) | ##### Added TypeScript declarations and test coverage for the shared i18next parser and runtime configuration, making locale selection and right-to-left direction verifiable for developers. <img width="1200" alt="Headlamp General Settings with Arabic selected and the interface displayed right to left" src="https://raw.githubusercontent.com/illume/headlamp/pr-7066-screenshot-assets/pr-screenshots/7066/i18n-arabic-rtl.png" /> <!-- end-release-notes --> **Container image:** :whale: [ghcr.io/headlamp-k8s/headlamp:v0.46.0](https://github.com/kubernetes-sigs/headlamp/pkgs/container/headlamp) **Desktop Apps:** ⚠️ <strong>Important:</strong> Information on warnings from Windows <a href="https://headlamp.dev/docs/latest/installation/desktop/" target="_blank" rel="noopener noreferrer">when running Headlamp unsigned apps.</a> :penguin: [Flatpak / Linux (AMD64)](https://flathub.org/apps/details/io.kinvolk.Headlamp) :penguin: Linux AppImage [AMD64](https://github.com/kubernetes-sigs/headlamp/releases/download/v0.46.0/Headlamp-0.46.0-linux-x64.AppImage), [ARM64](https://github.com/kubernetes-sigs/headlamp/releases/download/v0.46.0/Headlamp-0.46.0-linux-arm64.AppImage), [ARMv7l](https://github.com/kubernetes-sigs/headlamp/releases/download/v0.46.0/Headlamp-0.46.0-linux-armv7l.AppImage) :penguin: Linux Tarball [AMD64](https://github.com/kubernetes-sigs/headlamp/releases/download/v0.46.0/Headlamp-0.46.0-linux-x64.tar.gz), [ARM64](https://github.com/kubernetes-sigs/headlamp/releases/download/v0.46.0/Headlamp-0.46.0-linux-arm64.tar.gz), [ARMv7l](https://github.com/kubernetes-sigs/headlamp/releases/download/v0.46.0/Headlamp-0.46.0-linux-armv7l.tar.gz) :penguin: Debian / Linux [AMD64](https://github.com/kubernetes-sigs/headlamp/releases/download/v0.46.0/headlamp_0.46.0-1_amd64.deb) :green_apple: [Mac (AMD64)](https://github.com/kubernetes-sigs/headlamp/releases/download/v0.46.0/Headlamp-0.46.0-mac-x64.dmg) :green_apple: [Mac (ARM/M1)](https://github.com/kubernetes-sigs/headlamp/releases/download/v0.46.0/Headlamp-0.46.0-mac-arm64.dmg) :blue_square: [Windows (AMD64)](https://github.com/kubernetes-sigs/headlamp/releases/download/v0.46.0/Headlamp-0.46.0-win-x64.exe) :blue_square: [Windows (ARM64)](https://github.com/kubernetes-sigs/headlamp/releases/download/v0.46.0/Headlamp-0.46.0-win-arm64.exe) ### [`v0.45.0`](https://github.com/kubernetes-sigs/headlamp/releases/tag/v0.45.0): 0.45.0 [Compare Source](https://github.com/kubernetes-sigs/headlamp/compare/v0.44.0...v0.45.0) Headlamp 0.45.0 reduces desktop startup memory and unnecessary background requests, while adding new scheduling and Gateway API views, guided resource creation forms, and more flexible plugin and product customization. Security updates protect desktop APIs, verify external plugin archives, and close command-consent and dependency vulnerabilities. Accessibility improvements make high-zoom layouts, keyboard controls, and custom theme contrast more usable, alongside 31 bug fixes across authentication, port forwarding, Resource Map, tables, and the desktop app. #### ⚡ Performance | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="800" height="0" alt=""> | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="200" height="0" alt=""> | | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | | Plugin i18n now fetches only the active locale's translation file instead of all declared locales, preventing a flood of 404 requests when a plugin declares multiple languages. | Thanks to:<br>[@&#8203;YousufFFFF](https://github.com/YousufFFFF)<br>[@&#8203;r0hansaxena](https://github.com/r0hansaxena).<br>Thanks to [@&#8203;mjeanrichard](https://github.com/mjeanrichard) for reporting.<br>[#&#8203;7363](https://github.com/kubernetes-sigs/headlamp/issues/7363) | | Desktop startup now defers optional work, retains smaller Kubernetes objects, and tunes garbage collection, reducing memory by about 60 MiB RSS across combined isolated measurements. | Thanks to [@&#8203;illume](https://github.com/illume).<br>[#&#8203;7358](https://github.com/kubernetes-sigs/headlamp/issues/7358) | | Replaced the manual `setInterval` in `useClustersVersion` with React Query's `useQueries`, so polling pauses when the browser tab is hidden and unnecessary network requests to connected clusters are avoided. | Thanks to:<br>[@&#8203;shreyas-acharya](https://github.com/shreyas-acharya)<br>[@&#8203;illume](https://github.com/illume).<br>[#&#8203;6707](https://github.com/kubernetes-sigs/headlamp/issues/6707) | #### ✨ Enhancements (part 1) | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="800" height="0" alt=""> | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="200" height="0" alt=""> | | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | | Added target container selection for ephemeral debug containers, allowing users to share the process namespace and filesystem of a specific container in multi-container pods during debugging. | Thanks to:<br>[@&#8203;Suyog241005](https://github.com/Suyog241005)<br>[@&#8203;yush-1018](https://github.com/yush-1018).<br>Thanks to [@&#8203;eightfourseventwo](https://github.com/eightfourseventwo) for reporting.<br>[#&#8203;7245](https://github.com/kubernetes-sigs/headlamp/issues/7245) | | Added a 'Keep Large Graph Groups Expanded' setting that persists namespace group expansion state across sessions, eliminating repetitive manual expansion clicks on large cluster resource maps. | Thanks to:<br>[@&#8203;Suyog241005](https://github.com/Suyog241005)<br>[@&#8203;mudit06mah](https://github.com/mudit06mah).<br>Thanks to [@&#8203;syorito-hatsuki](https://github.com/syorito-hatsuki) for reporting.<br>[#&#8203;7156](https://github.com/kubernetes-sigs/headlamp/issues/7156) | | A right-click context menu with copy and paste options has been added to the pod terminal, so users can copy and paste text without workarounds. | Thanks to [@&#8203;rootp1](https://github.com/rootp1).<br>Thanks to [@&#8203;jimmyjones2](https://github.com/jimmyjones2) for reporting.<br>[#&#8203;7121](https://github.com/kubernetes-sigs/headlamp/issues/7121) | | Added a form-based UI for creating PersistentVolumeClaims, including multi-select access mode support, so users can provision storage directly from the Storage section without writing raw YAML. | Thanks to [@&#8203;anoopw3bdev](https://github.com/anoopw3bdev).<br>[#&#8203;5333](https://github.com/kubernetes-sigs/headlamp/issues/5333) | | Validated legal documents from the build manifest now appear in About and Legal tabs, letting desktop products present licenses and third-party notices in the app. | Thanks to:<br>[@&#8203;illume](https://github.com/illume)<br>[@&#8203;joaquimrocha](https://github.com/joaquimrocha).<br>[#&#8203;7299](https://github.com/kubernetes-sigs/headlamp/issues/7299) | | Exposed the host operating-system platform through the context-isolated desktop preload API, allowing frontend plugin authors to write platform-aware behavior in Electron builds. | Thanks to:<br>[@&#8203;illume](https://github.com/illume)<br>[@&#8203;sniok](https://github.com/sniok).<br>[#&#8203;7291](https://github.com/kubernetes-sigs/headlamp/issues/7291) | | Products can now configure custom titles and graphics for error and not-found pages at build time, allowing branded distributions to replace Headlamp's default error content without modifying source code. | Thanks to:<br>[@&#8203;illume](https://github.com/illume)<br>[@&#8203;joaquimrocha](https://github.com/joaquimrocha).<br>[#&#8203;7288](https://github.com/kubernetes-sigs/headlamp/issues/7288) | | The backend app name is configurable through `--app-name` or `HEADLAMP_CONFIG_APP_NAME`, letting branded distributions customize version output and User-Agent headers without maintaining a fork. | Thanks to:<br>[@&#8203;illume](https://github.com/illume)<br>[@&#8203;sniok](https://github.com/sniok).<br>[#&#8203;7248](https://github.com/kubernetes-sigs/headlamp/issues/7248) | | The Azure AKS plugin now receives its required script permissions from app configuration, allowing it to run without manual permission setup. | Thanks to [@&#8203;sniok](https://github.com/sniok).<br>[#&#8203;7144](https://github.com/kubernetes-sigs/headlamp/issues/7144) | ##### Target a specific container when debugging a pod Choose which application container an ephemeral debug container targets, making its processes and filesystem available for more effective troubleshooting. <img width="1470" height="724" alt="Dialog for selecting the target container when debugging a pod" src="https://github.com/user-attachments/assets/e50d44b1-0be2-4e3d-85fb-5ea20181cbec" /> ##### Cordoned and Drained node status indicators See at a glance when a node is unavailable for scheduling instead of mistaking every Ready node for an active one. <img width="70%" height="auto" alt="frontend: Show Cordoned and Drained status indicators" src="https://github.com/user-attachments/assets/9e38932c-7b6a-491d-8809-f5296e3f2d4a" /> ##### TCPRoute and UDPRoute resource views Browse and inspect Gateway API TCPRoute and UDPRoute resources directly alongside Headlamp's other Kubernetes resources. <img width="1280" height="720" alt="frontend: Add TCPRoute and UDPRoute views" src="https://github.com/user-attachments/assets/6ad723f7-0c1c-4ec3-9903-3749476998bf" /> ##### Delete or evict pods Choose eviction when maintenance should respect disruption safeguards, while retaining direct deletion when it is explicitly needed. <img width="1470" height="831" alt="Pod action menu offering both Delete and Evict" src="https://github.com/user-attachments/assets/a182ee53-0394-4476-be89-4709185c699e" /> ##### PodGroup and Workload scheduling views Inspect scheduling resources and their status in dedicated views, making batch workload placement easier to understand. <img width="1917" height="797" alt="PodGroup and Workload scheduling views" src="https://github.com/user-attachments/assets/e04ecede-f73d-4b21-a667-6f60cf64e4aa" /> <br><br> <br><br> #### ✨ Enhancements (part 2) | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="800" height="0" alt=""> | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="200" height="0" alt=""> | | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | | Node list and detail views now display Cordoned and Drained status indicators, making it immediately clear when nodes are unschedulable without requiring users to inspect node conditions manually. | Thanks to [@&#8203;tejhan](https://github.com/tejhan).<br>Thanks to [@&#8203;sarg3nt](https://github.com/sarg3nt) for reporting.<br>[#&#8203;7100](https://github.com/kubernetes-sigs/headlamp/issues/7100) | | Plugins can replace or wrap the no-clusters Home page through `registerClusterEmptyState`, enabling custom onboarding while retaining Headlamp's default actions. | Thanks to:<br>[@&#8203;illume](https://github.com/illume)<br>[@&#8203;sniok](https://github.com/sniok).<br>[#&#8203;7075](https://github.com/kubernetes-sigs/headlamp/issues/7075) | | Pods without a scheduled node are now grouped under an Unscheduled node in the Resource Map when grouping by node, so pending pods remain visible instead of disappearing from the view. | Thanks to:<br>[@&#8203;illume](https://github.com/illume)<br>[@&#8203;gambtho](https://github.com/gambtho).<br>[#&#8203;7069](https://github.com/kubernetes-sigs/headlamp/issues/7069) | | Desktop plugin and kubeconfig directories are now isolated by product name using a new `--kubeconfig-dir` option, preventing data collisions between different branded distributions sharing the same machine. | Thanks to:<br>[@&#8203;illume](https://github.com/illume)<br>[@&#8203;yolossn](https://github.com/yolossn).<br>[#&#8203;7068](https://github.com/kubernetes-sigs/headlamp/issues/7068) | | JobSetList now probes the cluster for the JobSet API before rendering, showing a clear unavailable state with install docs when JobSet is not present instead of a confusing generic error. | Thanks to [@&#8203;Pritz395](https://github.com/Pritz395).<br>[#&#8203;7016](https://github.com/kubernetes-sigs/headlamp/issues/7016) | | TCPRoute and UDPRoute resources now have dedicated list and detail views in the Gateway API section, giving users full L4 route visibility alongside the existing HTTPRoute and GRPCRoute support. | Thanks to [@&#8203;areycruzer](https://github.com/areycruzer).<br>[#&#8203;7002](https://github.com/kubernetes-sigs/headlamp/issues/7002) | | GraphView and KubeIcon are now exported through pluginLib, allowing plugin authors to embed the resource map's graph renderer and icon set directly in their own pages. | Thanks to [@&#8203;rootp1](https://github.com/rootp1).<br>Thanks to [@&#8203;danbruno101](https://github.com/danbruno101) for reporting.<br>[#&#8203;6992](https://github.com/kubernetes-sigs/headlamp/issues/6992) | | The Service details view now lists the pods matched by the service selector, making it immediately obvious when a selector is misconfigured or targets no pods without manually cross-referencing endpoints. | Thanks to [@&#8203;krsatyamthakur-droid](https://github.com/krsatyamthakur-droid).<br>Thanks to [@&#8203;jimmyjones2](https://github.com/jimmyjones2) for reporting.<br>[#&#8203;6972](https://github.com/kubernetes-sigs/headlamp/issues/6972) | | Hover-to-copy buttons have been added to IP and address table cells, allowing users to grab Pod IP, Cluster IP, External IP, and Endpoint addresses without manually selecting text. | Thanks to:<br>[@&#8203;rootp1](https://github.com/rootp1)<br>[@&#8203;pallava-joshi](https://github.com/pallava-joshi).<br>Thanks to [@&#8203;joaquimrocha](https://github.com/joaquimrocha) for reporting.<br>[#&#8203;7097](https://github.com/kubernetes-sigs/headlamp/issues/7097) | ##### Terminal context menu Copy and paste from a pod terminal using a familiar right-click menu instead of relying only on keyboard shortcuts. <img width="1900" height="950" alt="Right-clicking in the terminal opens a Copy and Paste context menu" src="https://raw.githubusercontent.com/rootp1/headlamp/rootp1/pr-7146-screenshots/pr-7121-after.png" /> ##### Custom cluster empty states Plugins can replace or extend the no-clusters screen, allowing distributions to provide onboarding that fits their environment. ![Custom cluster empty state](https://raw.githubusercontent.com/illume/headlamp/pr-7075-assets/pr-assets/7075/cluster-empty-state.png) ##### Resource Map plugin APIs Plugins can reuse Headlamp's graph view and Kubernetes icons to build visualizations that remain consistent with the rest of the interface. ![GraphView rendered standalone in Storybook with Resource Map controls](https://github.com/user-attachments/assets/0f208f59-635a-40ba-a964-a828c418729a) ##### High-resolution system tray icon The desktop tray icon now stays sharp on high-density displays instead of appearing soft or pixelated. <img width="54" height="35" alt="app: Add retina system tray icon" src="https://github.com/user-attachments/assets/4a6f614c-60c8-4dd2-8260-4016ea64ad89" /> ##### StatefulSet creation form Create StatefulSets through a structured form with guided fields instead of writing the complete manifest by hand. <img width="1900" height="994" alt="frontend: CreateStatefulSetForm: Add create form for stateful set" src="https://github.com/user-attachments/assets/00e5cad7-7264-4de1-a4fd-c0a6eec0e0f7" /> <br><br> <br><br> #### ✨ Enhancements (part 3) | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="800" height="0" alt=""> | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="200" height="0" alt=""> | | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | | Project header actions can switch detail tabs programmatically, enabling plugin-defined workflows without relying on DOM event workarounds. | Thanks to:<br>[@&#8203;illume](https://github.com/illume)<br>[@&#8203;gambtho](https://github.com/gambtho).<br>[#&#8203;6936](https://github.com/kubernetes-sigs/headlamp/issues/6936) | | Added Czech, Hungarian, Indonesian, Dutch, Polish, Swedish, and Turkish locales and expanded Brazilian Portuguese, letting more users work in their preferred language. | Thanks to:<br>[@&#8203;illume](https://github.com/illume)<br>[@&#8203;skoeva](https://github.com/skoeva).<br>[#&#8203;6893](https://github.com/kubernetes-sigs/headlamp/issues/6893) | | macOS builds can embed product-specific license agreements in DMG installers, so users can review terms during installation. | Thanks to:<br>[@&#8203;illume](https://github.com/illume)<br>[@&#8203;joaquimrocha](https://github.com/joaquimrocha).<br>[#&#8203;6887](https://github.com/kubernetes-sigs/headlamp/issues/6887) | | Exported the WorkloadLogs component and its props through the plugin API, allowing plugin authors to embed the multi-pod workload log viewer inline in their own UI surfaces. | Thanks to:<br>[@&#8203;illume](https://github.com/illume)<br>[@&#8203;sniok](https://github.com/sniok).<br>[#&#8203;6886](https://github.com/kubernetes-sigs/headlamp/issues/6886) | | Plugin overview sections can decide whether they apply to the current project, hiding irrelevant content and reducing page clutter. | Thanks to:<br>[@&#8203;illume](https://github.com/illume)<br>[@&#8203;sniok](https://github.com/sniok).<br>[#&#8203;6860](https://github.com/kubernetes-sigs/headlamp/issues/6860) | | Headlamp fetches configured namespaces individually when cluster-wide listing is forbidden, so restricted users can see allowed namespaces without unauthorized requests. | Thanks to:<br>[@&#8203;illume](https://github.com/illume)<br>[@&#8203;sniok](https://github.com/sniok).<br>[#&#8203;6834](https://github.com/kubernetes-sigs/headlamp/issues/6834) | | Build manifests can set validated product identity and protocol metadata, letting distributors brand packages without overwriting unrelated Headlamp defaults. | Thanks to:<br>[@&#8203;illume](https://github.com/illume)<br>[@&#8203;sniok](https://github.com/sniok)<br>[@&#8203;joaquimrocha](https://github.com/joaquimrocha).<br>[#&#8203;6831](https://github.com/kubernetes-sigs/headlamp/issues/6831) | | The system tray tooltip and Open/About menu labels now use the configured app name instead of the hardcoded string 'Headlamp', so custom-branded builds display their product name consistently throughout the tray UI. | Thanks to [@&#8203;skoeva](https://github.com/skoeva).<br>[#&#8203;6931](https://github.com/kubernetes-sigs/headlamp/issues/6931) | | The Linux executable name is now derived automatically from package and product metadata rather than being hardcoded, so renaming the product correctly propagates to the Linux binary without manual updates. | Thanks to:<br>[@&#8203;illume](https://github.com/illume)<br>[@&#8203;joaquimrocha](https://github.com/joaquimrocha).<br>[#&#8203;6909](https://github.com/kubernetes-sigs/headlamp/issues/6909) | | Changed Electron Builder artifact filenames to use the package name instead of the display product name, allowing downstream distributions to customize package identity without altering the user-facing product name. | Thanks to:<br>[@&#8203;illume](https://github.com/illume)<br>[@&#8203;joaquimrocha](https://github.com/joaquimrocha).<br>[#&#8203;6859](https://github.com/kubernetes-sigs/headlamp/issues/6859) | ##### Persistent volume claim creation form Request persistent storage through a guided form, reducing the need to remember volume claim YAML fields and syntax. <img width="1423" height="718" alt="Form for creating a persistent volume claim" src="https://github.com/user-attachments/assets/5a83ee2d-cb3c-451d-93eb-4507fd9f48b2" /> ##### Unscheduled pods grouped in Resource Map Pending pods remain visible when grouping by node, collected under an Unscheduled group until the scheduler places them. ![Resource Map grouped by node with pending pods under Node Unscheduled](https://raw.githubusercontent.com/illume/headlamp/b84f6afa8f9c9891bfd21a59566962bf0c85f339/0059-unscheduled-pod-grouping.png) ##### Pods selected by a Service View the pods matched by a Service directly from its details, making selector and routing problems faster to diagnose. <img width="1470" height="956" alt="frontend: service: Show the pods a Service targets" src="https://github.com/user-attachments/assets/764ab86f-293e-479c-8f6c-3fc7992c6d76" /> ##### Namespace label selectors in cluster settings Define allowed namespaces by label so access follows matching workloads automatically without maintaining a static namespace list. <img width="1155" height="402" alt="frontend: Add allowed namespaces label selector to cluster settings" src="https://github.com/user-attachments/assets/55a3edb6-4ba5-4ade-af08-853c3c4754f0" /> ##### Plugin-provided resource relationships Plugins can teach Resource Map about domain-specific relationships, revealing connections that Headlamp cannot infer on its own. <img width="1280" height="720" alt="frontend: Implement registerResourceRelationProvider Plugin API" src="https://github.com/user-attachments/assets/ea9a99fe-b43d-4624-82c0-f0572ae5f160" /> <br><br> <br><br> #### ✨ Enhancements (part 4) | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="800" height="0" alt=""> | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="200" height="0" alt=""> | | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | | Build manifests can customize validated Linux, macOS, and Windows packaging metadata, letting distributors tailor artifacts while catching invalid configuration before packaging. | Thanks to:<br>[@&#8203;illume](https://github.com/illume)<br>[@&#8203;ashu8912](https://github.com/ashu8912).<br>[#&#8203;6830](https://github.com/kubernetes-sigs/headlamp/issues/6830) | | Bundled plugins can declare `enabledByDefault` in the build manifest, letting distributors ship plugins disabled without post-build edits. | Thanks to:<br>[@&#8203;illume](https://github.com/illume)<br>[@&#8203;joaquimrocha](https://github.com/joaquimrocha).<br>[#&#8203;6828](https://github.com/kubernetes-sigs/headlamp/issues/6828) | | Workload detail pages now display the Service Account with a link to its RoleBindings, making it easy to audit a workload's permissions without having to drill into individual pods. | Thanks to [@&#8203;krsatyamthakur-droid](https://github.com/krsatyamthakur-droid).<br>Thanks to [@&#8203;jimmyjones2](https://github.com/jimmyjones2) for reporting.<br>[#&#8203;6819](https://github.com/kubernetes-sigs/headlamp/issues/6819) | | Pod action menus now expose both Delete and Evict as a split button so users can choose the appropriate action — such as evict to respect PodDisruptionBudgets — without changing the global setting in Settings. | Thanks to [@&#8203;krsatyamthakur-droid](https://github.com/krsatyamthakur-droid).<br>Thanks to [@&#8203;segevfiner](https://github.com/segevfiner) for reporting.<br>[#&#8203;6792](https://github.com/kubernetes-sigs/headlamp/issues/6792) | | Added a 2× retina system tray icon so the Headlamp icon renders sharply on macOS high-density displays instead of appearing blurry. | Thanks to [@&#8203;skoeva](https://github.com/skoeva).<br>[#&#8203;6775](https://github.com/kubernetes-sigs/headlamp/issues/6775) | | Cluster settings now accept a namespace label selector, so shared-cluster teams can automatically scope Headlamp without maintaining a static namespace list. | Thanks to [@&#8203;guillaumebernard84](https://github.com/guillaumebernard84).<br>[#&#8203;6759](https://github.com/kubernetes-sigs/headlamp/issues/6759) | | ClusterProfile discovery is scoped to each consumer namespace by default, reducing broad access while still supporting explicitly configured shared inventories. | Thanks to [@&#8203;kahirokunn](https://github.com/kahirokunn).<br>[#&#8203;6669](https://github.com/kubernetes-sigs/headlamp/issues/6669) | | Made the resource detail page header (back button, title, and action buttons) sticky while scrolling, so users no longer need to scroll back to the top to navigate or perform actions. | Thanks to [@&#8203;NAME-ASHWANIYADAV](https://github.com/NAME-ASHWANIYADAV).<br>[#&#8203;6616](https://github.com/kubernetes-sigs/headlamp/issues/6616) | ##### Product legal documents Distributions can surface their licenses and other legal documents inside the app, keeping required information easy to find. <img src="https://raw.githubusercontent.com/illume/headlamp/pr-screenshots-0065-assets-20260816/.github/screenshots/0065/after.png" width="480" alt="Legal tab showing manifest-declared product documents"> ##### Seven additional language packs More users can navigate Headlamp in their preferred language, with new Czech, Hungarian, Indonesian, Dutch, Polish, Swedish, and Turkish translations. ![General Settings language selector showing the added Czech, Hungarian, Indonesian, Dutch, Polish, Swedish, and Turkish locales alongside existing languages](https://raw.githubusercontent.com/illume/headlamp/6e794f8552eda3ebc1394961246fd15007e71f8c/0041-translated-locale-packs.png) ##### Namespace-scoped ClusterProfile discovery Limit ClusterProfile discovery to the configured namespace, reducing unnecessary access and supporting more restrictive cluster permissions. <img width="800" height="415" alt="ClusterProfile discovery scoped to a namespace" src="https://github.com/user-attachments/assets/18f18a05-a45b-4617-aaa0-82d36a70aa46" /> <br><br> <br><br> #### ✨ Enhancements (part 5) | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="800" height="0" alt=""> | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="200" height="0" alt=""> | | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | | Added dedicated views for the Kubernetes v1.36 PodGroup and Workload scheduling APIs, making gang-scheduling resources visible in Headlamp without requiring CRDs or Advanced Search workarounds. | Thanks to [@&#8203;Anjali-Chauhan1](https://github.com/Anjali-Chauhan1).<br>Thanks to [@&#8203;kannon92](https://github.com/kannon92) for reporting.<br>[#&#8203;6562](https://github.com/kubernetes-sigs/headlamp/issues/6562) | | Added a guided create form for StatefulSets with metadata, spec, and pod template sections, bringing StatefulSet creation to feature parity with Deployments, DaemonSets, and other workload types. | Thanks to [@&#8203;vyncent-t](https://github.com/vyncent-t).<br>[#&#8203;6554](https://github.com/kubernetes-sigs/headlamp/issues/6554) | | Re-added the workload diagnostics section to workload detail pages with a redesigned layout matching other Headlamp detail sections, giving users a consolidated view of workload health issues. | Thanks to [@&#8203;xonas1101](https://github.com/xonas1101).<br>[#&#8203;5964](https://github.com/kubernetes-sigs/headlamp/issues/5964) | | The editor now preserves unsaved changes and shows an inline warning when a Kubernetes resource is modified externally, preventing silent data loss and giving users a clear path to resolve conflicts. | Thanks to:<br>[@&#8203;sudhidutta7694](https://github.com/sudhidutta7694)<br>[@&#8203;illume](https://github.com/illume).<br>Thanks to [@&#8203;jimmyjones2](https://github.com/jimmyjones2) for reporting.<br>[#&#8203;5894](https://github.com/kubernetes-sigs/headlamp/issues/5894) | | Plugins can define custom Resource Map relationships, so implicit dependencies such as Crossplane composite resources appear beyond OwnerReferences. | Thanks to [@&#8203;Joshna907](https://github.com/Joshna907).<br>[#&#8203;5453](https://github.com/kubernetes-sigs/headlamp/issues/5453) | ##### Product-specific error pages Branded distributions can provide their own error titles and illustrations while preserving Headlamp's defaults when no customization is supplied. ![Product-specific not-found title and illustration](https://raw.githubusercontent.com/illume/headlamp/727de45edb2bcb10123e44c054f56884e2a81faf/pr-screenshots/0048-product-error-after.png) ##### Service accounts in workload details See which service account a workload uses without inspecting its YAML, making identity and permission troubleshooting more direct. <img width="1468" height="757" alt="Workload details showing its service account" src="https://github.com/user-attachments/assets/a2818159-18c8-4dc8-9012-f29e8c072ca9" /> ##### Sticky resource detail headers Resource names and actions remain available while scrolling through long detail pages, preserving context and reducing navigation. <img width="1538" height="855" alt="frontend: DetailsGrid: Add sticky header to resource detail pages" src="https://github.com/user-attachments/assets/149133f9-89ff-4f01-a027-d931020e6c72" /> #### 🐞 Bug fixes (part 1) | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="800" height="0" alt=""> | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="200" height="0" alt=""> | | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | | Fixed a broken context lookup key in the port-forward handler so that port forwarding no longer fails with "Unreachable" on clusters affected by the regression introduced in 0.43. | Thanks to:<br>[@&#8203;r0hansaxena](https://github.com/r0hansaxena)<br>[@&#8203;illume](https://github.com/illume).<br>Thanks to [@&#8203;rforced](https://github.com/rforced) for reporting.<br>[#&#8203;6109](https://github.com/kubernetes-sigs/headlamp/issues/6109) | | Zoom level is now saved immediately and re-applied after pane switches, window focus changes, and route navigation, so the chosen zoom setting persists reliably across the Electron app session. | Thanks to [@&#8203;Aamod007](https://github.com/Aamod007).<br>Thanks to [@&#8203;andrewbaxter](https://github.com/andrewbaxter) for reporting.<br>[#&#8203;6502](https://github.com/kubernetes-sigs/headlamp/issues/6502) | | Restored translations that were accidentally removed in a prior PR, so previously localized strings are visible again across the UI. | Thanks to [@&#8203;sniok](https://github.com/sniok).<br>[#&#8203;7237](https://github.com/kubernetes-sigs/headlamp/issues/7237) | | Script paths are now resolved to file URLs before importing, so running scripts with HEADLAMP_RUN_SCRIPT=true no longer fails on Windows paths starting with a drive letter like C:/. | Thanks to [@&#8203;sniok](https://github.com/sniok).<br>[#&#8203;7143](https://github.com/kubernetes-sigs/headlamp/issues/7143) | | Fixed a sticky header overlapping page content and a hidden back-link in the resource details side panel, so users can see all content and navigation without layout interference. | Thanks to [@&#8203;tejhan](https://github.com/tejhan).<br>[#&#8203;7103](https://github.com/kubernetes-sigs/headlamp/issues/7103) | | Headlamp-plugin CLI commands now route .cmd shims through cmd.exe on Windows, fixing failures caused by Node's CVE-2024-27980 mitigation that blocks direct .cmd/.bat execution. | Thanks to [@&#8203;skoeva](https://github.com/skoeva).<br>[#&#8203;5861](https://github.com/kubernetes-sigs/headlamp/issues/5861) | <br><br> <br><br> #### 🐞 Bug fixes (part 2) | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="800" height="0" alt=""> | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="200" height="0" alt=""> | | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | | Relative PKI paths in kubeconfig files are now resolved against the kubeconfig file's directory, so kubeconfigs that work with kubectl also connect successfully in Headlamp Desktop. | Thanks to [@&#8203;Pritz395](https://github.com/Pritz395).<br>Thanks to [@&#8203;AGou-ops](https://github.com/AGou-ops) for reporting.<br>[#&#8203;6657](https://github.com/kubernetes-sigs/headlamp/issues/6657) | | When an in-cluster OIDC provider is rejected by the Kubernetes API server, Headlamp now surfaces a clear error message instead of silently redirecting users to the login screen in an endless loop. | Thanks to:<br>[@&#8203;tejhan](https://github.com/tejhan)<br>[@&#8203;illume](https://github.com/illume).<br>[#&#8203;6431](https://github.com/kubernetes-sigs/headlamp/issues/6431) | | Improved useLocalStorageState to restore missing features and fix a real sync bug, so global search and other components relying on local storage state behave correctly across tabs and rerenders. | Thanks to [@&#8203;vishnukothakapu](https://github.com/vishnukothakapu).<br>[#&#8203;5936](https://github.com/kubernetes-sigs/headlamp/issues/5936) | | Fixed WebSocket cluster API requests failing to derive user-specific auth tokens correctly, so WebSocket connections now authenticate properly instead of falling back incorrectly. | Thanks to:<br>[@&#8203;gambtho](https://github.com/gambtho)<br>[@&#8203;rishh09](https://github.com/rishh09).<br>Thanks to [@&#8203;ecthelion77](https://github.com/ecthelion77) for reporting.<br>[#&#8203;7319](https://github.com/kubernetes-sigs/headlamp/issues/7319) | | Shell discovery on Windows now skips Unix-specific lookups, preventing errors during desktop environment resolution on Windows systems. | Thanks to:<br>[@&#8203;illume](https://github.com/illume)<br>[@&#8203;joaquimrocha](https://github.com/joaquimrocha).<br>[#&#8203;7065](https://github.com/kubernetes-sigs/headlamp/issues/7065) | | SimpleTable body cells can now display overflowing content instead of clipping it, so users see complete cell values without truncation while header layout stays constrained. | Thanks to:<br>[@&#8203;illume](https://github.com/illume)<br>[@&#8203;sniok](https://github.com/sniok).<br>[#&#8203;7052](https://github.com/kubernetes-sigs/headlamp/issues/7052) | <br><br> <br><br> #### 🐞 Bug fixes (part 3) | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="800" height="0" alt=""> | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="200" height="0" alt=""> | | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | | Local and shipped plugin assets are now served with no-cache headers, ensuring operators and developers always receive the latest plugin files without stale cached versions. | Thanks to:<br>[@&#8203;illume](https://github.com/illume)<br>[@&#8203;sniok](https://github.com/sniok).<br>[#&#8203;7061](https://github.com/kubernetes-sigs/headlamp/issues/7061) | | The resource Map view no longer hangs indefinitely on a loading spinner when a data source fails to resolve, so users can continue using the map even when some sources are unavailable. | Thanks to [@&#8203;rootp1](https://github.com/rootp1).<br>Thanks to [@&#8203;danbruno101](https://github.com/danbruno101) for reporting.<br>[#&#8203;6988](https://github.com/kubernetes-sigs/headlamp/issues/6988) | | Inline plugin source-map line offsets are now shifted to account for the two lines added by the Function constructor, so stack traces in browser developer tools point to the correct source locations in large plugins. | Thanks to:<br>[@&#8203;illume](https://github.com/illume)<br>[@&#8203;sniok](https://github.com/sniok).<br>[#&#8203;6903](https://github.com/kubernetes-sigs/headlamp/issues/6903) | | Fixed AddRepo silently wiping credentials and TLS certificate fields when re-adding an existing Helm repository, preventing subsequent failures against private or mTLS-secured repos. | Thanks to [@&#8203;CygnusMaximillian](https://github.com/CygnusMaximillian).<br>Thanks to [@&#8203;Abhi190702](https://github.com/Abhi190702) for reporting.<br>[#&#8203;6885](https://github.com/kubernetes-sigs/headlamp/issues/6885) | | Fixed cache-suppression headers being registered with defer in the service proxy so they are now sent before any response writes, making no-cache directives actually reach clients. | Thanks to [@&#8203;CygnusMaximillian](https://github.com/CygnusMaximillian).<br>Thanks to [@&#8203;Abhi190702](https://github.com/Abhi190702) for reporting.<br>[#&#8203;6880](https://github.com/kubernetes-sigs/headlamp/issues/6880) | | Reloaded the page after successful cluster deletion so stale cluster-scoped browser state is cleared, while preserving the current page and error context when deletion fails. | Thanks to:<br>[@&#8203;illume](https://github.com/illume)<br>[@&#8203;sniok](https://github.com/sniok).<br>[#&#8203;6864](https://github.com/kubernetes-sigs/headlamp/issues/6864) | | Node shell pod creation errors are now surfaced in the terminal UI instead of only logging to the console, so users can see why a shell failed to open instead of waiting on a blank screen. | Thanks to [@&#8203;YousufFFFF](https://github.com/YousufFFFF).<br>[#&#8203;6844](https://github.com/kubernetes-sigs/headlamp/issues/6844) | | Deferred translation of default keyboard shortcuts until i18next is ready, eliminating the console warnings about uninitialized i18next and missing keys that appeared on every app startup. | Thanks to [@&#8203;KeerthiKumarR](https://github.com/KeerthiKumarR).<br>[#&#8203;6814](https://github.com/kubernetes-sigs/headlamp/issues/6814) | <br><br> <br><br> #### 🐞 Bug fixes (part 4) | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="800" height="0" alt=""> | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="200" height="0" alt=""> | | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | | Added scroll-position preservation to auto-refreshing resource tables so the view no longer jumps back to the top when data is polled, allowing users to stay in place while browsing long lists. | Thanks to [@&#8203;WasThatRudy](https://github.com/WasThatRudy).<br>Thanks to [@&#8203;prisha-sh](https://github.com/prisha-sh) for reporting.<br>[#&#8203;6787](https://github.com/kubernetes-sigs/headlamp/issues/6787) | | Added underscore-based folder name variants for the AI assistant plugin so marketplace-installed users whose plugin folder is named `headlamp_ai_assistant` correctly receive run-command consent and injection. | Thanks to [@&#8203;PixelRobots](https://github.com/PixelRobots).<br>[#&#8203;6737](https://github.com/kubernetes-sigs/headlamp/issues/6737) | | Suppressed misleading kubeconfig error messages on startup for in-cluster deployments, so operators are no longer alarmed by errors that are expected and harmless in that mode. | Thanks to:<br>[@&#8203;tejhan](https://github.com/tejhan)<br>[@&#8203;illume](https://github.com/illume).<br>[#&#8203;6688](https://github.com/kubernetes-sigs/headlamp/issues/6688) | | Fixed `streamResultsForCluster` to retain the newest resources instead of the oldest when the result set is capped, so the streaming API limit behaves as intended. | Thanks to [@&#8203;xevrion](https://github.com/xevrion).<br>[#&#8203;6675](https://github.com/kubernetes-sigs/headlamp/issues/6675) | | Removed Kubernetes 1.22-deleted `v1beta1` API versions for Ingress and CRD resources, preventing 404 errors and console noise on every modern cluster. | Thanks to [@&#8203;qiangli](https://github.com/qiangli).<br>[#&#8203;6655](https://github.com/kubernetes-sigs/headlamp/issues/6655) | | Fixed `normalizeUnit()` returning the literal string `"undefined"` or `"NaN undefined"` for memory values below 1 byte, so sub-byte Kubernetes quantities like `500m` display correctly. | Thanks to [@&#8203;anushkagupta200615-jpg](https://github.com/anushkagupta200615-jpg).<br>[#&#8203;6629](https://github.com/kubernetes-sigs/headlamp/issues/6629) | <br><br> <br><br> #### 🐞 Bug fixes (part 5) | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="800" height="0" alt=""> | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="200" height="0" alt=""> | | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | | Fixed decimal CPU quantities like '2.0' displaying with a trailing zero in the UI, so values now render as '2 cores' for a cleaner and less confusing presentation. | Thanks to [@&#8203;AarishMansur](https://github.com/AarishMansur).<br>[#&#8203;6444](https://github.com/kubernetes-sigs/headlamp/issues/6444) | | Fixed an off-by-one logic error that caused tab components to always open at index 0 regardless of the configured default, allowing tabs to correctly honor their initial selection. | Thanks to [@&#8203;skools-here](https://github.com/skools-here).<br>[#&#8203;6410](https://github.com/kubernetes-sigs/headlamp/issues/6410) | | Fixed a conflict between the global shortcut handler and Chrome's paste behavior that blocked pasting authentication tokens into the ID token field, allowing users to paste credentials normally. | Thanks to [@&#8203;bhuvan-somisetty](https://github.com/bhuvan-somisetty).<br>[#&#8203;6282](https://github.com/kubernetes-sigs/headlamp/issues/6282) | | Fixed memory quantity parsing to correctly handle the milli-bytes (m) suffix, preventing wildly incorrect memory usage percentages from appearing in the Node detail view. | Thanks to [@&#8203;yu-heejin](https://github.com/yu-heejin).<br>[#&#8203;5809](https://github.com/kubernetes-sigs/headlamp/issues/5809) | | Added null guards for partial CRD specs in makeCRClass and related methods, preventing crashes that could take down the dashboard during transient watch updates or in-flight refetches. | Thanks to [@&#8203;WasThatRudy](https://github.com/WasThatRudy).<br>Thanks to [@&#8203;isgj](https://github.com/isgj) for reporting.<br>[#&#8203;5717](https://github.com/kubernetes-sigs/headlamp/issues/5717) | #### 🔒 Security | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="800" height="0" alt=""> | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="200" height="0" alt=""> | | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | | Desktop backend APIs are now protected by the per-launch app token, preventing other processes on the same machine from accessing Kubernetes APIs through the local backend. | Thanks to [@&#8203;illume](https://github.com/illume).<br>[#&#8203;7353](https://github.com/kubernetes-sigs/headlamp/issues/7353) | | Empty namespace selectors remain restricted instead of falling back to cluster-wide access, preventing unintended resource requests. | Thanks to [@&#8203;illume](https://github.com/illume).<br>[#&#8203;7361](https://github.com/kubernetes-sigs/headlamp/issues/7361) | | Fixed the `runCommand` consent flow in the desktop app so that denying a plugin's command request immediately stops execution, preventing the command from running even on the first invocation. | Thanks to [@&#8203;utkarshalpha](https://github.com/utkarshalpha).<br>Thanks to [@&#8203;bhuvan-somisetty](https://github.com/bhuvan-somisetty) for reporting.<br>[#&#8203;7295](https://github.com/kubernetes-sigs/headlamp/issues/7295) | | Updated dependencies across backend, frontend, app, headlamp-plugin, and container images to resolve known security vulnerabilities, including five Go stdlib CVEs affecting net/url, html/template, and TLS handling. | Thanks to [@&#8203;illume](https://github.com/illume).<br>[#&#8203;7373](https://github.com/kubernetes-sigs/headlamp/issues/7373) | | Updated oras-go and x/sync dependencies to satisfy security scans and remove known dependency risk without changing Headlamp APIs or behavior. | Thanks to [@&#8203;skoeva](https://github.com/skoeva).<br>[#&#8203;6953](https://github.com/kubernetes-sigs/headlamp/issues/6953) | | External plugin manifests can now be selected via `HEADLAMP_BUILD_MANIFEST` and are verified with SHA-256 digests, preventing tampered or unexpected plugin archives from being loaded in product builds. | Thanks to:<br>[@&#8203;illume](https://github.com/illume)<br>[@&#8203;sniok](https://github.com/sniok).<br>[#&#8203;6827](https://github.com/kubernetes-sigs/headlamp/issues/6827) | | Added a `releaser security-check` command that scans the Go backend with `govulncheck` and Dockerfiles with `hadolint`, allowing maintainers to catch known vulnerabilities before cutting a release. | Thanks to [@&#8203;rootp1](https://github.com/rootp1).<br>[#&#8203;6730](https://github.com/kubernetes-sigs/headlamp/issues/6730) | | Replaced execSync with execFileSync in scripts that interpolate dynamic values into shell commands, preventing potential command injection from paths containing spaces or shell metacharacters. | Thanks to [@&#8203;skoeva](https://github.com/skoeva).<br>[#&#8203;4099](https://github.com/kubernetes-sigs/headlamp/issues/4099) | #### ♿ Accessibility | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="800" height="0" alt=""> | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="200" height="0" alt=""> | | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | | Activity panel overview tiles and activity-bar entries now wrap text instead of shrinking on small screens, keeping the panel readable on narrow displays. | Thanks to:<br>[@&#8203;rootp1](https://github.com/rootp1)<br>[@&#8203;greedy-wudpeckr](https://github.com/greedy-wudpeckr).<br>[#&#8203;7146](https://github.com/kubernetes-sigs/headlamp/issues/7146) | | Warning alerts in dark theme now use explicit background, text, and icon colors, making them meet contrast requirements and easier to read in low-light environments. | Thanks to:<br>[@&#8203;illume](https://github.com/illume)<br>[@&#8203;tejhan](https://github.com/tejhan).<br>[#&#8203;7247](https://github.com/kubernetes-sigs/headlamp/issues/7247) | | The View YAML panel now opens responsively — full-screen on small viewports and in a right-side pane on large screens — so users can read manifests without losing resource-list context. | Thanks to:<br>[@&#8203;illume](https://github.com/illume)<br>[@&#8203;sniok](https://github.com/sniok).<br>[#&#8203;7063](https://github.com/kubernetes-sigs/headlamp/issues/7063) | | AppTheme now supports a configurable contrast text color for custom secondary colors, allowing plugin authors and theme creators to ensure readable button labels on any secondary palette. | Thanks to:<br>[@&#8203;illume](https://github.com/illume)<br>[@&#8203;tejhan](https://github.com/tejhan).<br>[#&#8203;7054](https://github.com/kubernetes-sigs/headlamp/issues/7054) | | Fixed EditorDialog being clipped at high browser zoom levels by giving its content a stable minimum height and vertical scrolling, so the dialog remains fully usable at any zoom setting. | Thanks to:<br>[@&#8203;illume](https://github.com/illume)<br>[@&#8203;sniok](https://github.com/sniok).<br>[#&#8203;6890](https://github.com/kubernetes-sigs/headlamp/issues/6890) | | The Debug Image field now has an accessible label and strips whitespace from image references, improving screen-reader narration and preventing invalid references. | Thanks to:<br>[@&#8203;illume](https://github.com/illume)<br>[@&#8203;vyncent-t](https://github.com/vyncent-t).<br>[#&#8203;6858](https://github.com/kubernetes-sigs/headlamp/issues/6858) | | Appearance controls now include Accent color and Cluster icon section labels in their accessible names, helping screen-reader users distinguish these settings. | Thanks to:<br>[@&#8203;illume](https://github.com/illume)<br>[@&#8203;vyncent-t](https://github.com/vyncent-t).<br>[#&#8203;6836](https://github.com/kubernetes-sigs/headlamp/issues/6836) | | Project Details tabs are now horizontally scrollable at high text zoom and resource categories stack above the resource table at narrow breakpoints, preventing content from being cut off or unusable when zoomed to 200%. | Thanks to:<br>[@&#8203;illume](https://github.com/illume)<br>[@&#8203;sniok](https://github.com/sniok).<br>[#&#8203;6835](https://github.com/kubernetes-sigs/headlamp/issues/6835) | | The column selector is rebuilt with semantic menuitemcheckbox items and full keyboard navigation support, allowing keyboard-only users to show and hide table columns without requiring a mouse. | Thanks to:<br>[@&#8203;illume](https://github.com/illume)<br>[@&#8203;sniok](https://github.com/sniok).<br>[#&#8203;6833](https://github.com/kubernetes-sigs/headlamp/issues/6833) | | Wrapped disabled `ActionButton` icon buttons in a neutral span so tooltips remain visible on hover and keyboard focus, making disabled actions discoverable without breaking activation guards. | Thanks to [@&#8203;rootp1](https://github.com/rootp1).<br>[#&#8203;6584](https://github.com/kubernetes-sigs/headlamp/issues/6584) | ##### Responsive YAML viewer The YAML editor uses the available space at every viewport size, keeping long manifests readable without losing surrounding context on larger screens. ![Fullscreen YAML viewer on a phone](https://raw.githubusercontent.com/illume/headlamp/screenshots/pr-screenshots/0060-view-yaml-phone.png) ##### Accessible text contrast for custom themes Theme authors can set a readable text color for secondary controls, preventing low-contrast buttons on custom backgrounds. ![Cluster settings color picker showing the secondary Cancel button](https://raw.githubusercontent.com/illume/headlamp/41713bc427256ef6c5ff949e1bf596297a96be62/pr-screenshots/0054-secondary-theme-contrast.png) #### 📖 Documentation | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="800" height="0" alt=""> | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="200" height="0" alt=""> | | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -----------------------------------------------------------------------------------------------------------------------------: | | Added a user-facing OpenTelemetry documentation guide covering tracing, metrics, configuration flags, and in-cluster manifests, so operators can now find and enable Headlamp's backend observability support. | Thanks to [@&#8203;Harsh63870](https://github.com/Harsh63870).<br>[#&#8203;6407](https://github.com/kubernetes-sigs/headlamp/issues/6407) | | Replaced the direct Dex OIDC tutorial with a reproducible OAuth2-Proxy pattern and added automated e2e tests, giving operators a verified, recommended reference for deploying Headlamp with OIDC authentication. | Thanks to [@&#8203;illume](https://github.com/illume).<br>[#&#8203;5408](https://github.com/kubernetes-sigs/headlamp/issues/5408) | #### 💻 Development | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="800" height="0" alt=""> | <img src="https://raw.githubusercontent.com/kubernetes-sigs/headlamp/main/docs/images/icon.png" width="200" height="0" alt=""> | | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | | Plugin CI tests are now split into parallel jobs, cutting wall-clock time from roughly 16 minutes to 8 minutes and speeding up feedback for contributors. | Thanks to [@&#8203;skoeva](https://github.com/skoeva).<br>[#&#8203;5895](https://github.com/kubernetes-sigs/headlamp/issues/5895) | | OIDC login handlers now have characterization tests, protecting existing authentication behavior while the flow is consolidated and improved. | Thanks to [@&#8203;gambtho](https://github.com/gambtho).<br>[#&#8203;5420](https://github.com/kubernetes-sigs/headlamp/issues/5420) | | Added empty cluster-wide PodList mock responses to Storybook so Pod-dependent stories render without errors while still allowing story-specific Pod fixtures to take precedence. | Thanks to:<br>[@&#8203;illume](https://github.com/illume)<br>[@&#8203;skoeva](https://github.com/skoeva).<br>[#&#8203;7297](https://github.com/kubernetes-sigs/headlamp/issues/7297) | | Helm end-to-end tests for plugin manager installations are now part of CI, so regressions in Helm-based plugin workflows are caught automatically before release. | Thanks to:<br>[@&#8203;rootp1](https://github.com/rootp1)<br>[@&#8203;Vaishnav-Dhaval](https://github.com/Vaishnav-Dhaval).<br>Thanks to [@&#8203;illume](https://github.com/illume) for reporting.<br>[#&#8203;7216](https://github.com/kubernetes-sigs/headlamp/issues/7216) | | The Electron e2e suite now has its own dedicated Playwright config, removing runtime skip logic and making it easier for developers to run desktop tests reliably without environment variable workarounds. | Thanks to [@&#8203;unlikelyzero](https://github.com/unlikelyzero).<br>[#&#8203;7003](https://github.com/kubernetes-sigs/headlamp/issues/7003) | | Package verification now derives Linux, macOS, and Windows names from Electron Builder metadata, so rebranded products validate correctly without hardcoded names. | Thanks to:<br>[@&#8203;illume](https://github.com/illume)<br>[@&#8203;sniok](https://github.com/sniok).<br>[#&#8203;6911](https://github.com/kubernetes-sigs/headlamp/issues/6911) | | Unit and end-to-end tests now cover shell-free plugin listing across success, failure, and default outputs, catching plugin discovery regressions earlier. | Thanks to [@&#8203;illume](https://github.com/illume).<br>[#&#8203;6908](https://github.com/kubernetes-sigs/headlamp/issues/6908) | | Prevented the GraphView BasicExample story from starting unnecessary CRD watches by making source and relation discovery lazy, so explicit story definitions skip Kubernetes discovery hooks. | Thanks to:<br>[@&#8203;illume](https://github.com/illume)<br>[@&#8203;skoeva](https://github.com/skoeva).<br>[#&#8203;6892](https://github.com/kubernetes-sigs/headlamp/issues/6892) | | Shared Storybook mocks now cover current CRD discovery and the v1beta1 fallback, so built-in and plugin-template stories render consistently and catch contract regressions. | Thanks to:<br>[@&#8203;illume](https://github.com/illume)<br>[@&#8203;skoeva](https://github.com/skoeva)<br>[@&#8203;gambtho](https://github.com/gambtho).<br>[#&#8203;6832](https://github.com/kubernetes-sigs/headlamp/issues/6832) | | Added dedicated Storybook stories for ClusterTable covering all connection statuses, origin labels, warnings, versions, the empty state, and the loading state, so regressions in any table variant are caught visually. | Thanks to [@&#8203;xonas1101](https://github.com/xonas1101).<br>[#&#8203;6862](https://github.com/kubernetes-sigs/headlamp/issues/6862) | | Helm chart version, appVersion, and expected templates are now automatically updated during `releaser start`, ensuring every release git tag contains the correct chart configuration. | Thanks to [@&#8203;Suyog241005](https://github.com/Suyog241005).<br>Thanks to [@&#8203;erwinkramer](https://github.com/erwinkramer) for reporting.<br>[#&#8203;6227](https://github.com/kubernetes-sigs/headlamp/issues/6227) | | Fixed an incorrect `useMemo` dependency in the port-forward component by depending on `t` directly instead of `i18n.language`, so the hook correctly re-runs when translations change without suppressing lint warnings. | Thanks to [@&#8203;iashutoshyadav](https://github.com/iashutoshyadav).<br>[#&#8203;6824](https://github.com/kubernetes-sigs/headlamp/issues/6824) | | Fixed the release testing checklist generator to use the correct `-html-static-dir` flag, preventing invalid commands from being generated during release validation. | Thanks to [@&#8203;Pragati5-DEBUG](https://github.com/Pragati5-DEBUG).<br>[#&#8203;6738](https://github.com/kubernetes-sigs/headlamp/issues/6738) | | Fixed a bug where namespace placeholders were never replaced in generated test resource lists, so mock data now correctly reflects the intended namespace values and regressions are caught by new unit tests. | Thanks to [@&#8203;ahmad-kashkoush](https://github.com/ahmad-kashkoush).<br>[#&#8203;6475](https://github.com/kubernetes-sigs/headlamp/issues/6475) | | Accessibility Storybook testing has been restored and updated for the current Storybook version with improved violation reporting, allowing developers to catch a11y regressions in CI. | Thanks to:<br>[@&#8203;unichronic](https://github.com/unichronic)<br>[@&#8203;illume](https://github.com/illume).<br>[#&#8203;6559](https://github.com/kubernetes-sigs/headlamp/issues/6559) | | Pod tooltips are now excluded only from landmark placement checks while remaining covered by all other accessibility rules, preventing false axe `region` violations without reducing overall accessibility coverage. | Thanks to:<br>[@&#8203;illume](https://github.com/illume)<br>[@&#8203;skoeva](https://github.com/skoeva).<br>[#&#8203;7255](https://github.com/kubernetes-sigs/headlamp/issues/7255) | | Accessibility end-to-end tests now run axe-core in legacy mode, preventing a fatal protocol error caused by axe's default flow attempting to open a new browser page in the Playwright test environment. | Thanks to [@&#8203;unlikelyzero](https://github.com/unlikelyzero).<br>[#&#8203;6967](https://github.com/kubernetes-sigs/headlamp/issues/6967) | <!-- end-release-notes --> **Container image:** :whale: [ghcr.io/headlamp-k8s/headlamp:v0.45.0](https://github.com/kubernetes-sigs/headlamp/pkgs/container/headlamp) **Desktop Apps:** ⚠️ <strong>Important:</strong> Information on warnings from Mac and Windows <a href="https://headlamp.dev/docs/latest/installation/desktop/" target="_blank" rel="noopener noreferrer">when running Headlamp unsigned apps.</a> :penguin: [Flatpak / Linux (AMD64)](https://flathub.org/apps/details/io.kinvolk.Headlamp) :penguin: Linux AppImage [AMD64](https://github.com/kubernetes-sigs/headlamp/releases/download/v0.45.0/Headlamp-0.45.0-linux-x64.AppImage), [ARM64](https://github.com/kubernetes-sigs/headlamp/releases/download/v0.45.0/Headlamp-0.45.0-linux-arm64.AppImage), [ARMv7l](https://github.com/kubernetes-sigs/headlamp/releases/download/v0.45.0/Headlamp-0.45.0-linux-armv7l.AppImage) :penguin: Linux Tarball [AMD64](https://github.com/kubernetes-sigs/headlamp/releases/download/v0.45.0/Headlamp-0.45.0-linux-x64.tar.gz), [ARM64](https://github.com/kubernetes-sigs/headlamp/releases/download/v0.45.0/Headlamp-0.45.0-linux-arm64.tar.gz), [ARMv7l](https://github.com/kubernetes-sigs/headlamp/releases/download/v0.45.0/Headlamp-0.45.0-linux-armv7l.tar.gz) :penguin: Debian / Linux [AMD64](https://github.com/kubernetes-sigs/headlamp/releases/download/v0.45.0/headlamp_0.45.0-1_amd64.deb) :green_apple: [Mac (AMD64)](https://github.com/kubernetes-sigs/headlamp/releases/download/v0.45.0/Headlamp-0.45.0-mac-x64.dmg) :green_apple: [Mac (ARM/M1)](https://github.com/kubernetes-sigs/headlamp/releases/download/v0.45.0/Headlamp-0.45.0-mac-arm64.dmg) :blue_square: [Windows (AMD64)](https://github.com/kubernetes-sigs/headlamp/releases/download/v0.45.0/Headlamp-0.45.0-win-x64.exe) :blue_square: [Windows (ARM64)](https://github.com/kubernetes-sigs/headlamp/releases/download/v0.45.0/Headlamp-0.45.0-win-arm64.exe) ### [`v0.44.0`](https://github.com/kubernetes-sigs/headlamp/releases/tag/v0.44.0): 0.44.0 [Compare Source](https://github.com/kubernetes-sigs/headlamp/compare/v0.43.0...v0.44.0) **Need for speed!** :racing_car: :dash:  [Headlamp 0.44.0](https://github.com/kubernetes-sigs/headlamp/releases/tag/v0.44.0) extends practical cluster support beyond 30,000 pods. Resource Map remains usable at this scale, Pod lists fetch 1,000 items at a time, Cluster Overview avoids unbounded watch traffic, and Brotli pre-compression reduces typical JavaScript and CSS transfers by 75-80% and server load for compression to 0%. Got dozens of clusters? Headlamp doesn't try to connect to all of them at startup anymore (potentially opening several browser login windows). Four new structured forms cover DaemonSets, CronJobs, Jobs, and ReplicaSets, while ConfigMap `binaryData`, ServiceAccount permission visibility, Gateway API v1.5.1, and new plugin controls expand day-to-day capabilities. The release includes 99+ bug fixes, including protections against white-screen startup failures when developing Headlamp on Windows, more accurate workload health reporting, stable large-manifest editing on large busy clusters, and actionable cluster connection errors. Accessibility work restores macOS zoom, improves WCAG AA contrast in a few spots, and broadens automated a11y checks. Security and documentation updates add github cosign of release checksums, safer redirects, tested in-cluster kubeconfig examples, and ready-to-use MCP configurations. These changes were contributed by over 100+ people. Thanks! :tada: #### ⚡ Performance | | | | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | | ResourceMap performance improved with iterative BFS, graph simplification, and incremental WebSocket updates — 59% faster initial load and 86% faster updates at 2,000 pods, and clusters with 20,000+ pods are now usable where they previously crashed the browser. | Thanks to [@&#8203;illume](https://github.com/illume). Also thanks to [@&#8203;itpick](https://github.com/itpick) for reporting the issue. [#&#8203;4991](https://github.com/kubernetes-sigs/headlamp/issues/4991) | | Cluster overview now polls pod, node, and event data every minute instead of using persistent watch streams, preventing browser OOMs on large clusters. | Thanks to [@&#8203;Aamod007](https://github.com/Aamod007). Also thanks to [@&#8203;lucas-jackson](https://github.com/lucas-jackson) for reporting the issue. [#&#8203;6021](https://github.com/kubernetes-sigs/headlamp/issues/6021) | | Optimized sidebar rendering to eliminate UI lag and main thread blocking caused by unnecessary DOM nodes and layout thrashing during CSS transitions. | Thanks to [@&#8203;Psykii22](https://github.com/Psykii22). [#&#8203;6233](https://github.com/kubernetes-sigs/headlamp/issues/6233) | | Frontend and plugin static assets are now precompressed with Brotli and served as .br sidecars — JS/CSS bundles are 75–80% smaller over the wire, WASM assets \~60% smaller, and runtime CPU compression overhead drops to zero. | Thanks to [@&#8203;illume](https://github.com/illume). [#&#8203;6004](https://github.com/kubernetes-sigs/headlamp/issues/6004) | | Fixed a memory leak where Backstage receiver event listeners accumulated on each remount of the Home component, improving stability during navigation. | Thanks to [@&#8203;Rohith-Saran](https://github.com/Rohith-Saran). [#&#8203;5775](https://github.com/kubernetes-sigs/headlamp/issues/5775) | | Fixed unbounded memory growth in OIDC login by evicting abandoned state tokens that were never cleaned up when users left the login flow. | Thanks to [@&#8203;ayushmaan-16](https://github.com/ayushmaan-16). [#&#8203;5866](https://github.com/kubernetes-sigs/headlamp/issues/5866) | | Reduced per-message memory allocations in the WebSocket multiplexer hot path by replacing reflection-based decoding and fmt.Sprintf with typed structs and string concatenation. | Thanks to [@&#8203;Slambot01](https://github.com/Slambot01). [#&#8203;6294](https://github.com/kubernetes-sigs/headlamp/issues/6294) | | Reduced memory allocations in the k8cache hot path by checking error status before marshalling and replacing `fmt.Sprintf` with string concatenation, improving cache performance. | Thanks to [@&#8203;Slambot01](https://github.com/Slambot01). [#&#8203;6420](https://github.com/kubernetes-sigs/headlamp/issues/6420) | | Replaced repeated linear metrics searches with a memoized namespace/name-keyed Map in the Pod List, reducing CPU overhead during metric lookups. | Thanks to [@&#8203;skools-here](https://github.com/skools-here). [#&#8203;6011](https://github.com/kubernetes-sigs/headlamp/issues/6011) | | Added pagination to the Pods list with a 1000-item budget and a load-more button, preventing out-of-memory crashes on clusters with tens of thousands of pods. | Thanks to [@&#8203;drewbailey](https://github.com/drewbailey). [#&#8203;5660](https://github.com/kubernetes-sigs/headlamp/issues/5660) | ##### ResourceMap performance improved with iterative BFS, graph simplification, and incremental WebSocket updates. 20,000+ pods — all operations under 37ms, where previously the browser would crash: <img width="1700" alt="Resource Map showing 20,000+ pods with all operations under 37ms" src="https://github.com/user-attachments/assets/0f208f59-635a-40ba-a964-a828c418729a" /> ##### Added pagination to the Pods list with a 1,000-item budget and a load-more button, preventing out-of-memory crashes on clusters with tens of thousands of pods. <img width="1700" alt="Pod list showing 1,000 of ~35,600 pods with a Load more button" src="https://github.com/user-attachments/assets/fbb5e598-693d-4538-a1ea-2a0d70c033c0" /> <img width="336" height="71" alt="lots of pods" src="https://github.com/user-attachments/assets/7cbc2b5c-70d0-409f-b234-3dbb9dc9efe0" /> <br><br> <br><br> #### 📱 Mobile A mobile audit was done, and a number of improvements were made. | | | | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------: | | Tables now hide least-important columns first on narrow viewports instead of squashing them, keeping visible data readable at high zoom levels. | Thanks to [@&#8203;skoeva](https://github.com/skoeva). [#&#8203;6468](https://github.com/kubernetes-sigs/headlamp/issues/6468) | | Fixed several mobile UI issues including overflow-menu, dialog, terminal, editor, and temporary-sidebar behaviour, making the interface more reliable on small screens. | Thanks to [@&#8203;illume](https://github.com/illume). [#&#8203;5739](https://github.com/kubernetes-sigs/headlamp/issues/5739) | ##### Tables now hide least-important columns first on narrow viewports instead of squashing them. <img width="390" alt="Resource table keeping important columns readable on a narrow viewport" src="https://github.com/user-attachments/assets/53cdc2d7-32f1-4c4c-bbe4-dd23321b205a" /> ##### Mobile overflow menus and terminal dialogs now use the available screen space more effectively. <img width="390" alt="Mobile overflow menu with labelled Settings and Account actions" src="https://github.com/user-attachments/assets/0417f3e6-21ab-4f54-afea-0123664b45ef" /> <img width="390" alt="Full-screen terminal dialog using the available mobile viewport" src="https://github.com/user-attachments/assets/42754076-c3c9-47fa-bc98-e0477ad8c81a" /> <br><br> <br><br> #### ✨ Enhancements (part 1 of 2) | | | | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | | Administrators can now set a custom default node shell image via a `--node-shell-image` flag and Helm value, useful for airgapped or restricted deployments. | Thanks to [@&#8203;aryanraj45](https://github.com/aryanraj45). [#&#8203;6056](https://github.com/kubernetes-sigs/headlamp/issues/6056) | | The ServiceAccount detail page now lists all RoleBindings and ClusterRoleBindings that reference the account, making it easy to audit granted permissions. | Thanks to [@&#8203;sudhidutta7694](https://github.com/sudhidutta7694). Also thanks to [@&#8203;jcpunk](https://github.com/jcpunk) for reporting the issue. [#&#8203;6040](https://github.com/kubernetes-sigs/headlamp/issues/6040) | | Added a structured creation form for DaemonSets, letting users create DaemonSet resources through the UI form alongside the existing YAML editor. | Thanks to [@&#8203;vyncent-t](https://github.com/vyncent-t). [#&#8203;6514](https://github.com/kubernetes-sigs/headlamp/issues/6514) | | Added a structured `CreateCronJobForm` for CronJob resources, letting users configure schedule, time zone, concurrency policy, and job template fields through the UI. | Thanks to [@&#8203;vyncent-t](https://github.com/vyncent-t). [#&#8203;6422](https://github.com/kubernetes-sigs/headlamp/issues/6422) | | Added a structured create form for Job resources with field validation, reusable metadata fields, and a new boolean/checkbox field type. | Thanks to [@&#8203;vyncent-t](https://github.com/vyncent-t). [#&#8203;6343](https://github.com/kubernetes-sigs/headlamp/issues/6343) | | In-cluster context name is now automatically derived from the `kubeadm-config` ConfigMap, removing the need to manually set `--in-cluster-context-name`. | Thanks to [@&#8203;Anjali-Chauhan1](https://github.com/Anjali-Chauhan1). Also thanks to [@&#8203;jcpunk](https://github.com/jcpunk) for reporting the issue. [#&#8203;6342](https://github.com/kubernetes-sigs/headlamp/issues/6342) | | Added support for the `binaryData` field in ConfigMap detail and list views, so binary entries are now displayed, editable, and counted alongside `data`. | Thanks to [@&#8203;dabico](https://github.com/dabico). [#&#8203;6264](https://github.com/kubernetes-sigs/headlamp/issues/6264) | | Node debugger settings now show the actual default Docker image and namespace as dynamic placeholders, matching backend configuration including custom overrides. | Thanks to [@&#8203;dabico](https://github.com/dabico). [#&#8203;6253](https://github.com/kubernetes-sigs/headlamp/issues/6253) | | Added Arabic, Hebrew, and Russian localizations to the data table component so users of those languages see correctly translated table UI strings. | Thanks to [@&#8203;Priyanshu-rgbb](https://github.com/Priyanshu-rgbb). [#&#8203;6226](https://github.com/kubernetes-sigs/headlamp/issues/6226) | | YAML syntax errors in EditorDialog now display a red squiggly underline at the exact line and column, making it easier to spot and fix invalid YAML before applying. | Thanks to [@&#8203;Psykii22](https://github.com/Psykii22). [#&#8203;5954](https://github.com/kubernetes-sigs/headlamp/issues/5954) | ##### Added support for the `binaryData` field in ConfigMap detail and list views, so binary entries are now displayed, editable, and counted alongside `data`. <img width="2976" height="1822" alt="ConfigMap detail view showing binaryData field alongside data" src="https://github.com/user-attachments/assets/27d18def-bdb9-4895-a09e-347392ed6794" /> ##### Added a structured creation form for DaemonSets, letting users create DaemonSet resources through the UI form alongside the existing YAML editor. <img width="2058" height="1248" alt="DaemonSet structured creation form" src="https://github.com/user-attachments/assets/94cefc8a-e5ff-40c3-b8f6-35173511faee" /> ##### YAML syntax errors in EditorDialog now display a red squiggly underline at the exact line and column, making it easier to spot and fix invalid YAML before applying. <img width="1700" alt="Monaco editor showing red squiggly underline on YAML syntax error" src="https://github.com/user-attachments/assets/b7f731f8-b5bd-41d0-ac98-3589a9e5caa7" /> <br><br> <br><br> #### ✨ Enhancements (part 2 of 2) | | | | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -----------------------------------------------------------------------------------------------------------------------------: | | Headlamp now auto-connects only to recently-used clusters on startup, avoiding slow or disruptive credential prompts for users with many clusters in their kubeconfig. | Thanks to [@&#8203;skoeva](https://github.com/skoeva). [#&#8203;6169](https://github.com/kubernetes-sigs/headlamp/issues/6169) | | Added a --node-shell-namespace flag and Helm value so admins can configure the namespace used for node shell pods instead of defaulting to 'default'. | Thanks to [@&#8203;aryanraj45](https://github.com/aryanraj45). [#&#8203;6072](https://github.com/kubernetes-sigs/headlamp/issues/6072) | | Added a structured create form for ReplicaSets with Metadata, Spec, and Pod Template sections, so users no longer need to write raw YAML to create one. | Thanks to [@&#8203;vyncent-t](https://github.com/vyncent-t). [#&#8203;5995](https://github.com/kubernetes-sigs/headlamp/issues/5995) | | Added 100 as a rows-per-page option in resource tables, reducing the number of paginations needed when browsing namespaces with more than 50 resources. | Thanks to [@&#8203;ibshafique](https://github.com/ibshafique). [#&#8203;5971](https://github.com/kubernetes-sigs/headlamp/issues/5971) | | Added a color-coded usage progress bar to the ResourceQuota detail view, making it easy to spot quota pressure at a glance. | Thanks to [@&#8203;beep-boopp](https://github.com/beep-boopp). [#&#8203;5875](https://github.com/kubernetes-sigs/headlamp/issues/5875) | | Added a desktop setting to optionally hide the system tray icon, giving users who prefer no tray presence an easy opt-out. | Thanks to [@&#8203;VlatkoMilisav](https://github.com/VlatkoMilisav). [#&#8203;5754](https://github.com/kubernetes-sigs/headlamp/issues/5754) | | Added a tooltip disclaimer next to Events tables explaining Kubernetes Event retention lifetime, helping users understand why older events may disappear. | Thanks to [@&#8203;dabico](https://github.com/dabico). [#&#8203;5531](https://github.com/kubernetes-sigs/headlamp/issues/5531) | ##### Headlamp now auto-connects only to recently-used clusters on startup, avoiding slow or disruptive credential prompts for users with many clusters in their kubeconfig. <img width="1843" height="750" alt="Home page showing only recently-used clusters" src="https://github.com/user-attachments/assets/a52bd2e4-9117-445c-bc86-383036761f89" /> ##### Added a color-coded usage progress bar to the ResourceQuota detail view, making it easy to spot quota pressure at a glance. <img width="470" alt="ResourceQuota detail view with color-coded usage progress bar" src="https://github.com/user-attachments/assets/df047626-c152-4d1b-973a-a88abd0dd6d7" /> ##### Added a structured `CreateCronJobForm` for CronJob resources, letting users configure schedule, time zone, concurrency policy, and job template fields through the UI. <img width="2069" height="1154" alt="CronJob structured creation form" src="https://github.com/user-attachments/assets/0c17cc45-b468-4c92-b395-6ff07c307589" /> ##### Added a tooltip disclaimer next to Events tables explaining Kubernetes Event retention lifetime, helping users understand why older events may disappear. <img width="1488" height="600" alt="Events table with retention lifetime tooltip" src="https://github.com/user-attachments/assets/ffa79f80-7c31-4e85-9aab-7a561071279b" /> <br><br> <br><br> #### 🐞 Bug fixes (part 1 of 11) | | | | :--------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | | Headlamp desktop now only terminates its own user's headlamp-server processes, preventing one user on a shared machine from killing another user's backend. | Thanks to [@&#8203;Aamod007](https://github.com/Aamod007). Also thanks to [@&#8203;lombardialess](https://github.com/lombardialess) for reporting the issue. [#&#8203;6522](https://github.com/kubernetes-sigs/headlamp/issues/6522) | | Resolved known npm dependency vulnerabilities across all packages by applying npm audit fixes. | Thanks to [@&#8203;yolossn](https://github.com/yolossn). [#&#8203;6671](https://github.com/kubernetes-sigs/headlamp/issues/6671) | | Fixed the active tab highlight in NavigationTabs so tabs like Network Policies are correctly selected when hidden sidebar items are filtered out. | Thanks to [@&#8203;Adii-45](https://github.com/Adii-45). [#&#8203;6251](https://github.com/kubernetes-sigs/headlamp/issues/6251) | | Fixed port forwarding list appearing empty for dynamically added clusters by returning the correct cluster name instead of the internal user-suffixed cache key. | Thanks to [@&#8203;Athang69](https://github.com/Athang69). Also thanks to [@&#8203;ondrab1](https://github.com/ondrab1) for reporting the issue. [#&#8203;6188](https://github.com/kubernetes-sigs/headlamp/issues/6188) | | Fixed the Pods overview chart always showing 100% running by correctly reflecting pods in Error, CrashLoopBackOff, Pending, and other non-running states. | Thanks to [@&#8203;xonas1101](https://github.com/xonas1101). [#&#8203;6114](https://github.com/kubernetes-sigs/headlamp/issues/6114) | | Stale Kubernetes API responses and authorization clientsets are now purged immediately when a kube context is removed, preventing stale data from being served. | Thanks to [@&#8203;Pragati5-DEBUG](https://github.com/Pragati5-DEBUG). [#&#8203;6113](https://github.com/kubernetes-sigs/headlamp/issues/6113) | | StorageClass list no longer shows `undefined` in the Allow Volume Expansion column — the cell now displays Yes/No or remains empty when the field is absent. | Thanks to [@&#8203;dabico](https://github.com/dabico). [#&#8203;6308](https://github.com/kubernetes-sigs/headlamp/issues/6308) | | Added `service.appProtocol` support to the Headlamp Helm chart, fixing WebSocket and Gateway API compatibility issues with Kubernetes ingress routing. | Thanks to [@&#8203;cgiraldo](https://github.com/cgiraldo). [#&#8203;6049](https://github.com/kubernetes-sigs/headlamp/issues/6049) | ##### StorageClass list no longer shows `undefined` in the Allow Volume Expansion column — the cell now displays Yes/No or remains empty when the field is absent. <img width="2376" height="740" alt="StorageClass list with Yes/No in Allow Volume Expansion column" src="https://github.com/user-attachments/assets/f54c6c96-3f18-4bd7-aa6f-d5a2567652d7" /> <br><br> <br><br> #### 🐞 Bug fixes (part 2 of 11) | | | | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | | API discovery errors and fallbacks are now logged instead of silently swallowed, making it easier to diagnose why legacy discovery paths are being taken. | Thanks to [@&#8203;WasThatRudy](https://github.com/WasThatRudy). Also thanks to [@&#8203;krsatyamthakur-droid](https://github.com/krsatyamthakur-droid) for reporting the issue. [#&#8203;6033](https://github.com/kubernetes-sigs/headlamp/issues/6033) | | Helm chart env values schema now supports `valueFrom` (secretKeyRef, configMapKeyRef, fieldRef), enabling Kubernetes-native secret and config injection for Headlamp deployments. | Thanks to [@&#8203;Athang69](https://github.com/Athang69). Also thanks to [@&#8203;The-Judge](https://github.com/The-Judge) for reporting the issue. [#&#8203;6002](https://github.com/kubernetes-sigs/headlamp/issues/6002) | | Fixed cache middleware crashing with 'invalid url format' on non-API cluster paths like `/healthz`, so proxied apiserver endpoints are handled correctly. | Thanks to [@&#8203;Nabsku](https://github.com/Nabsku). [#&#8203;5798](https://github.com/kubernetes-sigs/headlamp/issues/5798) | | Improved hook memoization and lazy initialization in ResourceTable settings, resolving React hook warnings without changing table behavior. | Thanks to [@&#8203;kishore08-07](https://github.com/kishore08-07). [#&#8203;5790](https://github.com/kubernetes-sigs/headlamp/issues/5790) | | Added full support for Kubernetes Gateway API v1.5.1, including BackendTLSPolicy, GRPCRoute, and ReferenceGrant graduating to the Standard channel. | Thanks to [@&#8203;YotamKorah](https://github.com/YotamKorah). [#&#8203;5395](https://github.com/kubernetes-sigs/headlamp/issues/5395) | | Fixed a race condition in kubeconfig `WriteToFile` that caused data corruption or missing files when concurrent calls occurred within the same second. | Thanks to [@&#8203;KumarADITHYA123](https://github.com/KumarADITHYA123). [#&#8203;5309](https://github.com/kubernetes-sigs/headlamp/issues/5309) | | Metrics unavailability (timeouts, CrashLoopBackOff, etc.) now correctly shows a 'metrics unavailable' state instead of silently displaying 0% CPU and memory usage. | Thanks to [@&#8203;Shreya2005-2005](https://github.com/Shreya2005-2005). [#&#8203;5238](https://github.com/kubernetes-sigs/headlamp/issues/5238) | | Guarded against undefined `uid` and `name` in search filtering, preventing a crash when resources with incomplete metadata appear in the list. | Thanks to [@&#8203;krsatyamthakur-droid](https://github.com/krsatyamthakur-droid). [#&#8203;6680](https://github.com/kubernetes-sigs/headlamp/issues/6680) | | Updated outdated frontend packages across app, headlamp-plugin, pluginctl, eslint-config, and i18n tooling to improve compatibility and security. | Thanks to [@&#8203;illume](https://github.com/illume). [#&#8203;6679](https://github.com/kubernetes-sigs/headlamp/issues/6679) | | Fixed a failing cluster snapshot test on the main branch introduced by a recent merge. | Thanks to [@&#8203;illume](https://github.com/illume). [#&#8203;6665](https://github.com/kubernetes-sigs/headlamp/issues/6665) | <br><br> <br><br> #### 🐞 Bug fixes (part 3 of 11) | | | | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | | Images embedded as raw HTML in GitHub release notes now render correctly in the Release Notes dialog instead of being silently dropped. | Thanks to [@&#8203;Pragati5-DEBUG](https://github.com/Pragati5-DEBUG). Also thanks to [@&#8203;skoeva](https://github.com/skoeva) for reporting the issue. [#&#8203;6642](https://github.com/kubernetes-sigs/headlamp/issues/6642) | | Fixed the desktop e2e suite so all tests pass reliably and no longer corrupt the developer's kubeconfig on each run. | Thanks to [@&#8203;unlikelyzero](https://github.com/unlikelyzero). [#&#8203;6641](https://github.com/kubernetes-sigs/headlamp/issues/6641) | | Fixed the DataField editor collapsing to 5px at non-100% browser zoom levels by calculating container height in React instead of via imperative DOM mutations. | Thanks to [@&#8203;bhuvan-somisetty](https://github.com/bhuvan-somisetty). Also thanks to [@&#8203;hxl9654](https://github.com/hxl9654) for reporting the issue. [#&#8203;6619](https://github.com/kubernetes-sigs/headlamp/issues/6619) | | Fixed a crash on the Secrets list page caused by corrupt localStorage JSON for the 'Hide Helm Secrets' toggle, replacing the unguarded parse with safe fallback handling. | Thanks to [@&#8203;Aamod007](https://github.com/Aamod007). [#&#8203;6526](https://github.com/kubernetes-sigs/headlamp/issues/6526) | | Fixed a white-screen-on-boot caused by corrupt `notifications` localStorage JSON being parsed before any error boundary mounted, so the app now loads normally instead of crashing. | Thanks to [@&#8203;Aamod007](https://github.com/Aamod007). [#&#8203;6524](https://github.com/kubernetes-sigs/headlamp/issues/6524) | | Enforced minimum Vitest coverage thresholds for the frontend suite so CI automatically catches real regressions in statements, branches, functions, and lines. | Thanks to [@&#8203;rootp1](https://github.com/rootp1). [#&#8203;6486](https://github.com/kubernetes-sigs/headlamp/issues/6486) | ##### Images embedded as raw HTML in GitHub release notes now render correctly in the Release Notes dialog instead of being silently dropped. <img width="1700" alt="Release Notes dialog rendering HTML images from GitHub releases" src="https://github.com/user-attachments/assets/8e41e6e6-bdf5-4a3f-b17a-64f586309132" /> <br><br> <br><br> #### 🐞 Bug fixes (part 4 of 11) | | | | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------: | | Added a nil-error guard in the backend handleError helper to prevent a panic when a nil error is accidentally passed by any of its callers. | Thanks to [@&#8203;vtushar06](https://github.com/vtushar06). [#&#8203;6437](https://github.com/kubernetes-sigs/headlamp/issues/6437) | | Fixed a regression where searching for a namespace name flooded results with every resource in that namespace; the 'Set namespace' shortcut now appears correctly and only once. | Thanks to [@&#8203;Priyanshu-rgbb](https://github.com/Priyanshu-rgbb). [#&#8203;6432](https://github.com/kubernetes-sigs/headlamp/issues/6432) | | Fixed `MULTI_HOME_ENABLED` always evaluating to `true`, so setting `REACT_APP_MULTI_HOME_ENABLED=false` now correctly disables the Multi Home feature. | Thanks to [@&#8203;ssz2605](https://github.com/ssz2605). [#&#8203;6424](https://github.com/kubernetes-sigs/headlamp/issues/6424) | | Cluster rename via kubeconfig now returns an explicit error when the target context is missing, preventing silent failures that left state unchanged. | Thanks to [@&#8203;rootp1](https://github.com/rootp1). [#&#8203;6415](https://github.com/kubernetes-sigs/headlamp/issues/6415) | | Fixed `metricTargetValue()` in HPA to correctly display `0%` for zero `averageUtilization` values and ensure all metric types are evaluated properly. | Thanks to [@&#8203;skools-here](https://github.com/skools-here). [#&#8203;6412](https://github.com/kubernetes-sigs/headlamp/issues/6412) | | Fixed typos in platform and contributing docs and updated Node.js/npm version prerequisites in plugin tutorials to match current `package.json` requirements. | Thanks to [@&#8203;Harsh63870](https://github.com/Harsh63870). [#&#8203;6408](https://github.com/kubernetes-sigs/headlamp/issues/6408) | | Reformatted the Desktop App dependency list in the architecture docs as a Markdown bullet list, improving readability. | Thanks to [@&#8203;kunaldevsahu](https://github.com/kunaldevsahu). [#&#8203;6384](https://github.com/kubernetes-sigs/headlamp/issues/6384) | | Fixed a typo in the CronJob list's `lastScheduleTime` accessor so the Last Schedule column can now be sorted and filtered correctly. | Thanks to [@&#8203;skools-here](https://github.com/skools-here). [#&#8203;6383](https://github.com/kubernetes-sigs/headlamp/issues/6383) | ##### Fixed a regression where searching for a namespace name flooded results with every resource in that namespace; the 'Set namespace' shortcut now appears correctly and only once. <img width="1700" alt="Global search showing only the Set namespace shortcut for a bare namespace query" src="https://github.com/user-attachments/assets/2ddebadc-ab48-45e0-b2fe-6770a295fa02" /> <br><br> <br><br> #### 🐞 Bug fixes (part 5 of 11) | | | | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------: | | Fixed a stale WebSocket subscription in `useKubeObject` when navigating between resources of the same kind, ensuring live updates reflect the correct resource. | Thanks to [@&#8203;Adii-45](https://github.com/Adii-45). [#&#8203;6345](https://github.com/kubernetes-sigs/headlamp/issues/6345) | | Fixed PortForward tooltip translation, added secure `rel` attributes to external links, and hardened localStorage parsing to prevent crashes or UI desync on failures. | Thanks to [@&#8203;KumarADITHYA123](https://github.com/KumarADITHYA123). [#&#8203;6341](https://github.com/kubernetes-sigs/headlamp/issues/6341) | | Wrapped `recentClusters` localStorage reads in try/catch to prevent app startup crashes when stored data is corrupted or unreadable. | Thanks to [@&#8203;Kakumanu-Harshitha](https://github.com/Kakumanu-Harshitha). [#&#8203;6310](https://github.com/kubernetes-sigs/headlamp/issues/6310) | | Guarded `useLocalStorageState` against corrupted data and `QuotaExceededError`, preventing blank-screen crashes across 13 components that rely on it. | Thanks to [@&#8203;Kakumanu-Harshitha](https://github.com/Kakumanu-Harshitha). [#&#8203;6307](https://github.com/kubernetes-sigs/headlamp/issues/6307) | | Fixed frontend test failures on Node.js 24 caused by an AbortSignal incompatibility between jsdom, nock, and the native Request implementation. | Thanks to [@&#8203;vanshika2720](https://github.com/vanshika2720). [#&#8203;6299](https://github.com/kubernetes-sigs/headlamp/issues/6299) | | Hardened `loadTableSettings` and `storeTableSettings` against corrupt localStorage data, preventing blank-screen crashes on all resource list views. | Thanks to [@&#8203;Kakumanu-Harshitha](https://github.com/Kakumanu-Harshitha). [#&#8203;6298](https://github.com/kubernetes-sigs/headlamp/issues/6298) | | Fixed duplicate HTML `id` attribute in `TimezoneSelect` Autocomplete to prevent conflicts when both `TimezoneSelect` and `Chooser` are rendered on the same page. | Thanks to [@&#8203;Priyanshu-rgbb](https://github.com/Priyanshu-rgbb). [#&#8203;6281](https://github.com/kubernetes-sigs/headlamp/issues/6281) | <br><br> <br><br> #### 🐞 Bug fixes (part 6 of 11) | | | | :--------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | | Fixed `parseCpu()` to use `parseFloat` so decimal CPU values like `0.5` or `1.5` cores are parsed correctly instead of being silently truncated. | Thanks to [@&#8203;xonas1101](https://github.com/xonas1101). [#&#8203;6259](https://github.com/kubernetes-sigs/headlamp/issues/6259) | | Fixed 'Phase: undefined' display in the Project Resources tab by falling back to 'Unknown' when a pod's phase is not yet reported. | Thanks to [@&#8203;krsatyamthakur-droid](https://github.com/krsatyamthakur-droid). [#&#8203;6257](https://github.com/kubernetes-sigs/headlamp/issues/6257) | | Fixed Job detail page incorrectly showing `Duration: 0s` for still-running jobs; the duration row is now hidden until the job completes. | Thanks to [@&#8203;xonas1101](https://github.com/xonas1101). [#&#8203;6237](https://github.com/kubernetes-sigs/headlamp/issues/6237) | | Fixed a nil pointer dereference panic in `OidcConfig()` when `AuthInfo` is nil, preventing crashes during token-based or unresolved-user authentication. | Thanks to [@&#8203;Anjali-Chauhan1](https://github.com/Anjali-Chauhan1). [#&#8203;6235](https://github.com/kubernetes-sigs/headlamp/issues/6235) | | Replaced bare `fmt.Println` calls in backend startup with structured logging so startup messages are now captured consistently by the logger. | Thanks to [@&#8203;Rucha0901](https://github.com/Rucha0901). [#&#8203;6224](https://github.com/kubernetes-sigs/headlamp/issues/6224) | | Fixed the YAML/JSON editor scrolling back to the top on validation errors, so users editing large manifests no longer lose their position while typing. | Thanks to [@&#8203;krsatyamthakur-droid](https://github.com/krsatyamthakur-droid). Also thanks to [@&#8203;prisha-sh](https://github.com/prisha-sh) for reporting the issue. [#&#8203;6209](https://github.com/kubernetes-sigs/headlamp/issues/6209) | | Cluster connection warning bar is now dismissible, shows the real failure reason with an actionable link, and no longer overlaps window controls. | Thanks to [@&#8203;Anjali-Chauhan1](https://github.com/Anjali-Chauhan1). Also thanks to [@&#8203;rnc](https://github.com/rnc) for reporting the issue. [#&#8203;6206](https://github.com/kubernetes-sigs/headlamp/issues/6206) | | Fixed a crash in Chrome when the system timezone resolves to an unrecognized identifier like `Etc/Unknown`, preventing a `RangeError` on affected Linux systems. | Thanks to [@&#8203;bhuvan-somisetty](https://github.com/bhuvan-somisetty). Also thanks to [@&#8203;adriansev](https://github.com/adriansev) for reporting the issue. [#&#8203;6204](https://github.com/kubernetes-sigs/headlamp/issues/6204) | | Fixed a React hooks violation in `CreateNamespaceButton` by deriving validation state during render instead of via `useEffect`, eliminating the stale-state bug. | Thanks to [@&#8203;Shahazadi-Shaguftha-Syed](https://github.com/Shahazadi-Shaguftha-Syed). [#&#8203;6192](https://github.com/kubernetes-sigs/headlamp/issues/6192) | | Fixed Jobs, CronJobs, and JobSet overview charts that were always stuck at 100% healthy by adding correct status logic for workloads without replica fields. | Thanks to [@&#8203;xonas1101](https://github.com/xonas1101). [#&#8203;6185](https://github.com/kubernetes-sigs/headlamp/issues/6185) | ##### Cluster connection warning bar is now dismissible, shows the real failure reason with an actionable link, and no longer overlaps window controls. <img width="1700" alt="Dismissible cluster connection warning bar with failure reason and settings link" src="https://github.com/user-attachments/assets/5bceb4b3-e1ae-446c-8856-95a7a8210254" /> <br><br> <br><br> #### 🐞 Bug fixes (part 7 of 11) | | | | :------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | | Fixed OIDC login 404s in local dev by correcting the proxy path from `/auth` to `/auth/`, and enforced LF line endings for TS/JS/JSON files. | Thanks to [@&#8203;kjosh-bcvmw](https://github.com/kjosh-bcvmw). [#&#8203;6184](https://github.com/kubernetes-sigs/headlamp/issues/6184) | | Fixed a crash when loading kubeconfigs containing non-Latin1 characters (e.g. Chinese cluster names) by replacing `btoa()` with UTF-8-safe base64 helpers. | Thanks to [@&#8203;Anjali-Chauhan1](https://github.com/Anjali-Chauhan1). Also thanks to [@&#8203;youngledo](https://github.com/youngledo) for reporting the issue. [#&#8203;6178](https://github.com/kubernetes-sigs/headlamp/issues/6178) | | Fixed the Activity tab title for workload logs so it is now properly localized instead of always showing a hardcoded English 'Logs: ' prefix. | Thanks to [@&#8203;Adii-45](https://github.com/Adii-45). [#&#8203;6171](https://github.com/kubernetes-sigs/headlamp/issues/6171) | | Container status tooltips in the Pods list are now translated and respect the user's configured timezone instead of always showing English text and UTC times. | Thanks to [@&#8203;krsatyamthakur-droid](https://github.com/krsatyamthakur-droid). [#&#8203;6168](https://github.com/kubernetes-sigs/headlamp/issues/6168) | | Fixed a translation key case mismatch in LogsButton so the correct localized string is now displayed. | Thanks to [@&#8203;srajang1805](https://github.com/srajang1805). [#&#8203;6163](https://github.com/kubernetes-sigs/headlamp/issues/6163) | | Fixed broken frontend snapshot tests on main caused by a merge conflict with outdated snapshots. | Thanks to [@&#8203;illume](https://github.com/illume). [#&#8203;6160](https://github.com/kubernetes-sigs/headlamp/issues/6160) | | Fixed a variable name typo (`namepsace` → `namespace`) and removed dead commented-out code in NodeShellAction with no functional changes. | Thanks to [@&#8203;srajang1805](https://github.com/srajang1805). [#&#8203;6159](https://github.com/kubernetes-sigs/headlamp/issues/6159) | | Added optional chaining to KubeObject subclasses so the UI gracefully handles incomplete Kubernetes object data instead of throwing TypeErrors. | Thanks to [@&#8203;Psykii22](https://github.com/Psykii22). [#&#8203;6145](https://github.com/kubernetes-sigs/headlamp/issues/6145) | | Fixed a typo in the node drain status error message ('repsone' → 'response') for clearer error reporting. | Thanks to [@&#8203;Rucha0901](https://github.com/Rucha0901). [#&#8203;6141](https://github.com/kubernetes-sigs/headlamp/issues/6141) | <br><br> <br><br> #### 🐞 Bug fixes (part 8 of 11) | | | | :-------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | | Isolated TestDynamicClustersKubeConfig to a temp directory so test runs no longer pollute the user's real Headlamp config. | Thanks to [@&#8203;Athang69](https://github.com/Athang69). Also thanks to [@&#8203;sniok](https://github.com/sniok) for reporting the issue. [#&#8203;6136](https://github.com/kubernetes-sigs/headlamp/issues/6136) | | Fixed a spelling mistake ('listernerApi' → 'listenerApi') in headlampEventSlice for cleaner, more readable code. | Thanks to [@&#8203;rutujdhawale](https://github.com/rutujdhawale). [#&#8203;6131](https://github.com/kubernetes-sigs/headlamp/issues/6131) | | Fixed a cache-key collision in k8cache by percent-encoding literal '+' characters so the '+' delimiter is no longer ambiguous with field content. | Thanks to [@&#8203;sid200727](https://github.com/sid200727). [#&#8203;6127](https://github.com/kubernetes-sigs/headlamp/issues/6127) | | Fixed a Storybook startup failure caused by a circular dependency on Node story helpers, allowing all stories to load correctly. | Thanks to [@&#8203;mahesh-09-12](https://github.com/mahesh-09-12). [#&#8203;6126](https://github.com/kubernetes-sigs/headlamp/issues/6126) | | Replaced loose `any` typing on DocsViewer's `docSpecs` prop with a strict type, improving type safety and editor autocompletion. | Thanks to [@&#8203;r0hansaxena](https://github.com/r0hansaxena). [#&#8203;6098](https://github.com/kubernetes-sigs/headlamp/issues/6098) | | Fixed the CRD Details Versions table incorrectly showing the storage value in the Served column instead of the served value. | Thanks to [@&#8203;mahesh-09-12](https://github.com/mahesh-09-12). [#&#8203;6095](https://github.com/kubernetes-sigs/headlamp/issues/6095) | | Fixed a rules-of-hooks violation in AuthVisible that could cause unexpected behavior by ensuring all hooks run before any early returns. | Thanks to [@&#8203;therealharshit](https://github.com/therealharshit). Also thanks to [@&#8203;illume](https://github.com/illume) for reporting the issue. [#&#8203;6092](https://github.com/kubernetes-sigs/headlamp/issues/6092) | | Centralized the hardcoded backend base URL into a single `API_BASE` constant across Storybook stories, making future URL changes a one-line update. | Thanks to [@&#8203;xonas1101](https://github.com/xonas1101). [#&#8203;6088](https://github.com/kubernetes-sigs/headlamp/issues/6088) | | Wrapped hardcoded English strings on the Custom Resource Instances page with i18n so they are now correctly translated with the rest of the UI. | Thanks to [@&#8203;krsatyamthakur-droid](https://github.com/krsatyamthakur-droid). [#&#8203;6087](https://github.com/kubernetes-sigs/headlamp/issues/6087) | <br><br> <br><br> #### 🐞 Bug fixes (part 9 of 11) | | | | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | | Fixed a react-hooks/exhaustive-deps lint suppression in ViewButton by using a ref for the initial toggle value, making the effect correctly dependency-safe. | Thanks to [@&#8203;JoSParker](https://github.com/JoSParker). [#&#8203;6086](https://github.com/kubernetes-sigs/headlamp/issues/6086) | | Fixed Rules of Hooks violations in RestartButton by moving all hook calls before the early-return guard, preventing potential runtime errors. | Thanks to [@&#8203;nabrahma](https://github.com/nabrahma). Also thanks to [@&#8203;illume](https://github.com/illume) for reporting the issue. [#&#8203;6066](https://github.com/kubernetes-sigs/headlamp/issues/6066) | | Fixed security vulnerabilities by updating npm dependencies via audit fix. | Thanks to [@&#8203;skoeva](https://github.com/skoeva). [#&#8203;6055](https://github.com/kubernetes-sigs/headlamp/issues/6055) | | Replaced `Math.random()` with React 18's `useId()` in the `useId` utility, fixing a `react-hooks/purity` lint violation during render. | Thanks to [@&#8203;Shahazadi-Shaguftha-Syed](https://github.com/Shahazadi-Shaguftha-Syed). [#&#8203;6041](https://github.com/kubernetes-sigs/headlamp/issues/6041) | | Added a regression test for undefined i18n locale handling in ThemeProviderNexti18n, preventing reintroduction of the Firefox crash fixed in [#&#8203;5802](https://github.com/kubernetes-sigs/headlamp/issues/5802). | Thanks to [@&#8203;mahesh-09-12](https://github.com/mahesh-09-12). [#&#8203;6026](https://github.com/kubernetes-sigs/headlamp/issues/6026) | | Fixed stale YAML data in the resource editor by fetching the latest object from the API before opening, ensuring edits always reflect the current state. | Thanks to [@&#8203;ayushmaan-16](https://github.com/ayushmaan-16). [#&#8203;6014](https://github.com/kubernetes-sigs/headlamp/issues/6014) | | Added regression tests for the LimitRangeDetails component to verify Container Limits and other DetailsGrid configuration are correctly exposed. | Thanks to [@&#8203;mahesh-09-12](https://github.com/mahesh-09-12). [#&#8203;6013](https://github.com/kubernetes-sigs/headlamp/issues/6013) | | Fixed getPercentStr() so whole-number percentages no longer display a spurious trailing .0, keeping metric displays clean and readable. | Thanks to [@&#8203;xonas1101](https://github.com/xonas1101). [#&#8203;6000](https://github.com/kubernetes-sigs/headlamp/issues/6000) | | Fixed a crash on the Gateways page when a Gateway resource has no `spec.listeners`, preventing a blank view for users with incomplete Gateway objects. | Thanks to [@&#8203;Anjali-Chauhan1](https://github.com/Anjali-Chauhan1). Also thanks to [@&#8203;jianchao990-bit](https://github.com/jianchao990-bit) for reporting the issue. [#&#8203;5996](https://github.com/kubernetes-sigs/headlamp/issues/5996) | | Log viewer preferences for auto-scroll (follow) and show-timestamps are now saved to localStorage so they persist across browser sessions. | Thanks to [@&#8203;Athang69](https://github.com/Athang69). Also thanks to [@&#8203;prisha-sh](https://github.com/prisha-sh) for reporting the issue. [#&#8203;5993](https://github.com/kubernetes-sigs/headlamp/issues/5993) | ##### Fixed a crash on the Gateways page when a Gateway resource has no `spec.listeners`, preventing a blank view for users with incomplete Gateway objects. <img width="1700" alt="Gateway list view rendering correctly with incomplete spec" src="https://github.com/user-attachments/assets/8e560359-483e-4649-a6e9-f25b54924bfb" /> <br><br> <br><br> #### 🐞 Bug fixes (part 10 of 11) | | | | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | | Port-forward requests using an already-active ID now return HTTP 409 Conflict instead of silently overwriting the session, preventing port and goroutine leaks. | Thanks to [@&#8203;Nyx128](https://github.com/Nyx128). [#&#8203;5990](https://github.com/kubernetes-sigs/headlamp/issues/5990) | | Added regression tests for the `IngressDetails` component covering metadata, TLS configuration, and rules rendering to guard against future regressions. | Thanks to [@&#8203;mahesh-09-12](https://github.com/mahesh-09-12). [#&#8203;5966](https://github.com/kubernetes-sigs/headlamp/issues/5966) | | Fixed row selections disappearing after polling refreshes in resource tables when any row lacks a metadata.uid, keeping selections stable across data refreshes. | Thanks to [@&#8203;WasThatRudy](https://github.com/WasThatRudy). Also thanks to [@&#8203;prisha-sh](https://github.com/prisha-sh) for reporting the issue. [#&#8203;5952](https://github.com/kubernetes-sigs/headlamp/issues/5952) | | Fixed open-redirect bypass in `isValidRedirectPath` by stripping whitespace and decoding URL-encoded sequences before protocol checks, preventing malicious redirect exploits. | Thanks to [@&#8203;Athang69](https://github.com/Athang69). [#&#8203;5920](https://github.com/kubernetes-sigs/headlamp/issues/5920) | | Fixed malformed i18n interpolation syntax in CreateNamespaceButton, eliminating duplicate translation keys during extraction. | Thanks to [@&#8203;xonas1101](https://github.com/xonas1101). [#&#8203;5919](https://github.com/kubernetes-sigs/headlamp/issues/5919) | | Fixed Restart button visibility using `patch` permission instead of `update`, so users see and can use the button only when they have the correct access. | Thanks to [@&#8203;mishradwaterlaw](https://github.com/mishradwaterlaw). Also thanks to [@&#8203;wiswesser](https://github.com/wiswesser) for reporting the issue. [#&#8203;5908](https://github.com/kubernetes-sigs/headlamp/issues/5908) | | Replaced deprecated `addListener`/`removeListener` calls in the color-scheme hook with the standard `addEventListener` API, removing browser deprecation warnings. | Thanks to [@&#8203;YadavAkhileshh](https://github.com/YadavAkhileshh). [#&#8203;5785](https://github.com/kubernetes-sigs/headlamp/issues/5785) | <br><br> <br><br> #### 🐞 Bug fixes (part 11 of 11) | | | | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------: | | Removed an unused `themeName` dependency from the MUI theme hook, eliminating a spurious eslint warning and avoiding unnecessary theme recomputation. | Thanks to [@&#8203;kishore08-07](https://github.com/kishore08-07). [#&#8203;5768](https://github.com/kubernetes-sigs/headlamp/issues/5768) | | Fixed incorrect `useMemo` and `useEffect` dependencies in `NumRowsInput` so rows-per-page settings are computed and applied correctly when options change. | Thanks to [@&#8203;kishore08-07](https://github.com/kishore08-07). [#&#8203;5767](https://github.com/kubernetes-sigs/headlamp/issues/5767) | | Fixed a cache authorization bug where named Kubernetes resource requests used the object name instead of the resource type in access reviews, preventing incorrect authorization failures. | Thanks to [@&#8203;harrshita123](https://github.com/harrshita123). [#&#8203;5719](https://github.com/kubernetes-sigs/headlamp/issues/5719) | | Fixed service proxy incorrectly converting upstream non-200 responses into 500 errors, so real upstream status codes like 404 are now accurately passed through. | Thanks to [@&#8203;harrshita123](https://github.com/harrshita123). [#&#8203;5589](https://github.com/kubernetes-sigs/headlamp/issues/5589) | | Fixed theme name capitalization mangling multi-word custom theme names in the Settings picker and Search bar. | Thanks to [@&#8203;dabico](https://github.com/dabico). [#&#8203;5549](https://github.com/kubernetes-sigs/headlamp/issues/5549) | | Fixed a stale closure bug in the Resource Map so node topology now correctly updates when cluster nodes are added or removed. | Thanks to [@&#8203;KumarADITHYA123](https://github.com/KumarADITHYA123). [#&#8203;5389](https://github.com/kubernetes-sigs/headlamp/issues/5389) | | Aligned the Pods list's `Load more` control with the right-side header actions while keeping the create button beside the title. | Thanks to [@&#8203;rootp1](https://github.com/rootp1). [#&#8203;6721](https://github.com/kubernetes-sigs/headlamp/issues/6721) | | Fixed Resource Map viewport fitting, namespace simplification, and resize stability, while hiding performance diagnostics unless explicitly enabled. | Thanks to [@&#8203;illume](https://github.com/illume). [#&#8203;6718](https://github.com/kubernetes-sigs/headlamp/issues/6718) | | Fixed shared WebSocket watches so all subscribers receive updates and one subscriber cannot disconnect the others. | Thanks to [@&#8203;rootp1](https://github.com/rootp1). [#&#8203;6719](https://github.com/kubernetes-sigs/headlamp/issues/6719) | <br><br> <br><br> #### 🔒 Security | | | | :-------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------: | | Release checksums are now signed with cosign keyless signing, improving OpenSSF Scorecard's Signed-Releases score for future releases. | Thanks to [@&#8203;Athang69](https://github.com/Athang69). [#&#8203;6656](https://github.com/kubernetes-sigs/headlamp/issues/6656) | | Updated backend dependencies (Go, oras-go, grpc, crypto, text) and frontend i18next-fs-backend, plus refreshed Dockerfile node image digests. | Thanks to [@&#8203;skoeva](https://github.com/skoeva). [#&#8203;6330](https://github.com/kubernetes-sigs/headlamp/issues/6330) | | Bumped Alpine to 3.24.1, containerd to 1.7.33, and Go to 1.26.4 in the Dockerfile to patch known vulnerabilities. | Thanks to [@&#8203;skoeva](https://github.com/skoeva). [#&#8203;6135](https://github.com/kubernetes-sigs/headlamp/issues/6135) | | Bumped undici to 6.27.0 in app and 7.28.0 in headlamp-plugin to address security vulnerabilities. | Thanks to [@&#8203;skoeva](https://github.com/skoeva). [#&#8203;6133](https://github.com/kubernetes-sigs/headlamp/issues/6133) | | Moved cluster hooks to break a circular import that previously caused CodeQL's TypeScript extractor to hang, enabling SAST scanning. | Thanks to [@&#8203;Athang69](https://github.com/Athang69). [#&#8203;6076](https://github.com/kubernetes-sigs/headlamp/issues/6076) | | Expanded backend fuzz test coverage for parser and normalizer code paths, improving reliability and security of backend input handling. | Thanks to [@&#8203;tejhan](https://github.com/tejhan). [#&#8203;6063](https://github.com/kubernetes-sigs/headlamp/issues/6063) | ##### Release checksums are now signed with cosign keyless signing, improving OpenSSF Scorecard's Signed-Releases score for future releases. <img width="1864" height="1049" alt="Cosign keyless signing verification for release checksums" src="https://github.com/user-attachments/assets/4c887248-0423-4ce4-b728-6ed433736266" /> #### ♿ Accessibility | | | | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | | Fixed xterm terminal e2e tests that were unconditionally skipping all cases, so theme and accessibility assertions now actually run. | Thanks to [@&#8203;Anjali-Chauhan1](https://github.com/Anjali-Chauhan1). Also thanks to [@&#8203;unlikelyzero](https://github.com/unlikelyzero) for reporting the issue. [#&#8203;6666](https://github.com/kubernetes-sigs/headlamp/issues/6666) | | Enabled automated accessibility checks on the plugin settings and details pages in end-to-end tests, catching a11y regressions earlier. | Thanks to [@&#8203;PrakharJain345](https://github.com/PrakharJain345). [#&#8203;6213](https://github.com/kubernetes-sigs/headlamp/issues/6213) | | Replaced native browser `title` tooltips across the UI with Headlamp's styled tooltips for a consistent look and feel throughout the application. | Thanks to [@&#8203;xonas1101](https://github.com/xonas1101). Also thanks to [@&#8203;CygnusMaximillian](https://github.com/CygnusMaximillian) for reporting the issue. [#&#8203;5977](https://github.com/kubernetes-sigs/headlamp/issues/5977) | | Restored the macOS desktop `Zoom In` keyboard shortcut (`Cmd+Plus`), fixing a regression that broke the accelerator while Zoom Out and Reset Zoom continued to work. | Thanks to [@&#8203;rootp1](https://github.com/rootp1). [#&#8203;6714](https://github.com/kubernetes-sigs/headlamp/issues/6714) | | Fixed "User-installed" plugin chip text color to meet WCAG AA contrast requirements, improving readability in both light and dark themes. | Thanks to [@&#8203;vtushar06](https://github.com/vtushar06). Also thanks to [@&#8203;illume](https://github.com/illume) for reporting the issue. [#&#8203;6110](https://github.com/kubernetes-sigs/headlamp/issues/6110) | | Removed incorrect aria-label overrides from ConfirmDialog, RollbackDialog, and ScaleMultipleButton so screen readers now announce the visible button text instead of raw identifiers. | Thanks to [@&#8203;unlikelyzero](https://github.com/unlikelyzero). [#&#8203;6653](https://github.com/kubernetes-sigs/headlamp/issues/6653) | | Fixed Tab key navigation on the Create Resource page so all tabs and panel content are keyboard-accessible without requiring a mouse. | Thanks to [@&#8203;vyncent-t](https://github.com/vyncent-t). [#&#8203;6597](https://github.com/kubernetes-sigs/headlamp/issues/6597) | | Wrapped the ActivityBar Close button's aria-label in `t()` so screen readers announce it in the user's chosen language. | Thanks to [@&#8203;krsatyamthakur-droid](https://github.com/krsatyamthakur-droid). [#&#8203;6357](https://github.com/kubernetes-sigs/headlamp/issues/6357) | | Resource Map zoom/fit controls now have translated `aria-label` values, improving screen-reader experience for non-English users. | Thanks to [@&#8203;Kakumanu-Harshitha](https://github.com/Kakumanu-Harshitha). [#&#8203;6317](https://github.com/kubernetes-sigs/headlamp/issues/6317) | | Fixed aria-controls on EditorDialog buttons (Undo, Dry Run, Save & Apply) to reference the actual textarea, improving screen-reader accessibility. | Thanks to [@&#8203;Suyog241005](https://github.com/Suyog241005). [#&#8203;5956](https://github.com/kubernetes-sigs/headlamp/issues/5956) | | Fixed Space key not activating graph nodes in the Map view by correcting the key check from 'Space' to ' ', restoring full keyboard navigation for keyboard users. | Thanks to [@&#8203;vtushar06](https://github.com/vtushar06). [#&#8203;5923](https://github.com/kubernetes-sigs/headlamp/issues/5923) | | Integrated automated accessibility (a11y) checks via axe-core/playwright and stabilized pluginctl tests by fixing broken dependencies and locale-dependent selectors. | Thanks to [@&#8203;vishnukothakapu](https://github.com/vishnukothakapu). [#&#8203;5413](https://github.com/kubernetes-sigs/headlamp/issues/5413) | | Extended E2E accessibility scanning to the Services and Security pages, broadening automated a11y coverage across key navigation areas. | Thanks to [@&#8203;srajang1805](https://github.com/srajang1805). [#&#8203;6016](https://github.com/kubernetes-sigs/headlamp/issues/6016) | #### 📖 Documentation | | | | :------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | | Fixed a typo in the `log` function docstring so the logger package documentation correctly references the unexported function name. | Thanks to [@&#8203;saiashok0981](https://github.com/saiashok0981). [#&#8203;6576](https://github.com/kubernetes-sigs/headlamp/issues/6576) | | Expanded in-cluster docs with working YAML examples for using a custom kubeconfig, correcting misleading claims that caused user confusion. | Thanks to [@&#8203;akshattalwar001](https://github.com/akshattalwar001). Also thanks to [@&#8203;illume](https://github.com/illume) for reporting the issue. [#&#8203;6538](https://github.com/kubernetes-sigs/headlamp/issues/6538) | | Replaced `@todo` placeholders with proper JSDoc comments on frontend API endpoints, improving the developer experience when working with the API layer. | Thanks to [@&#8203;Psykii22](https://github.com/Psykii22). [#&#8203;6347](https://github.com/kubernetes-sigs/headlamp/issues/6347) | | Added an Example MCP Servers section to the MCP support docs with ready-to-use configurations for three local stdio servers. | Thanks to [@&#8203;vtushar06](https://github.com/vtushar06). [#&#8203;6060](https://github.com/kubernetes-sigs/headlamp/issues/6060) | #### 🔌 Plugins | | | | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | | Plugins can now register non-clickable section headers in the sidebar using `registerSidebarEntry` with `entryType: 'subheader'` to better organize navigation. | Thanks to [@&#8203;Soli0222](https://github.com/Soli0222). [#&#8203;6108](https://github.com/kubernetes-sigs/headlamp/issues/6108) | | Added a `config.staticPlugins.enabled` Helm value so users can officially disable the bundled Prometheus and other static plugins without undocumented workarounds. | Thanks to [@&#8203;Anjali-Chauhan1](https://github.com/Anjali-Chauhan1). Also thanks to [@&#8203;KhaledELG](https://github.com/KhaledELG) for reporting the issue. [#&#8203;6142](https://github.com/kubernetes-sigs/headlamp/issues/6142) | | Plugins can now filter or hide HOME sidebar menu items using the new registerHomeSidebarEntryFilter API, matching existing in-cluster sidebar capabilities. | Thanks to [@&#8203;Suyog241005](https://github.com/Suyog241005). Also thanks to [@&#8203;danp60](https://github.com/danp60) for reporting the issue. [#&#8203;6111](https://github.com/kubernetes-sigs/headlamp/issues/6111) | | Plugin installation now works behind corporate TLS-inspecting proxies on Windows by trusting OS-level CA certificates and surfacing clearer TLS error messages. | Thanks to [@&#8203;Anjali-Chauhan1](https://github.com/Anjali-Chauhan1). Also thanks to [@&#8203;junkiebev](https://github.com/junkiebev) for reporting the issue. [#&#8203;6379](https://github.com/kubernetes-sigs/headlamp/issues/6379) | | Fixed deletion of catalog-installed plugins migrated before `user-plugins/` existed, so `DELETE /plugins/{name}?type=user` no longer fails with a 'not found' error. | Thanks to [@&#8203;Pritz395](https://github.com/Pritz395). Also thanks to [@&#8203;skoeva](https://github.com/skoeva) for reporting the issue. [#&#8203;6573](https://github.com/kubernetes-sigs/headlamp/issues/6573) | | Migrated `headlamp-plugin` tsconfig `moduleResolution` from deprecated `node` to `bundler`, eliminating the deprecation warning and aligning with the existing module settings. | Thanks to [@&#8203;Athang69](https://github.com/Athang69). [#&#8203;6515](https://github.com/kubernetes-sigs/headlamp/issues/6515) | | Added try/catch around JSON.parse in the plugin-manager IPC handler so parse errors are returned to the renderer instead of crashing as unhandled rejections. | Thanks to [@&#8203;krsatyamthakur-droid](https://github.com/krsatyamthakur-droid). [#&#8203;6471](https://github.com/kubernetes-sigs/headlamp/issues/6471) | | Removed deprecated 'baseUrl' and 'node10' moduleResolution from the plugin TypeScript config, aligning path resolution with TypeScript 6 and Vite bundling. | Thanks to [@&#8203;Athang69](https://github.com/Athang69). Also thanks to [@&#8203;sniok](https://github.com/sniok) for reporting the issue. [#&#8203;6439](https://github.com/kubernetes-sigs/headlamp/issues/6439) | | Plugin load failures now show an error notification instead of silently failing, so users are informed when plugins cannot be loaded. | Thanks to [@&#8203;krsatyamthakur-droid](https://github.com/krsatyamthakur-droid). [#&#8203;6351](https://github.com/kubernetes-sigs/headlamp/issues/6351) | | Plugin settings stored in localStorage are now safely parsed, preventing crashes when the stored JSON is corrupt or malformed. | Thanks to [@&#8203;xonas1101](https://github.com/xonas1101). [#&#8203;6152](https://github.com/kubernetes-sigs/headlamp/issues/6152) | | Fixed `HEADLAMP_CONFIG_WATCH_PLUGINS_CHANGES` being ignored in-cluster so plugin watch behavior now correctly follows the environment variable or CLI flag. | Thanks to [@&#8203;harrshita123](https://github.com/harrshita123). [#&#8203;5591](https://github.com/kubernetes-sigs/headlamp/issues/5591) | | The plugins container build now matches the host platform by default, fixing mismatched architectures on Apple Silicon Macs and allowing the platform to be overridden via environment variable. | Thanks to [@&#8203;unlikelyzero](https://github.com/unlikelyzero). [#&#8203;6638](https://github.com/kubernetes-sigs/headlamp/issues/6638) | | Added error handling around JSON.parse in the frontend pluginManager so malformed IPC responses no longer cause unhandled exceptions or skip cleanup. | Thanks to [@&#8203;Khizarshah01](https://github.com/Khizarshah01). [#&#8203;6630](https://github.com/kubernetes-sigs/headlamp/issues/6630) | | Plugin commands now run with the user's login-shell environment, allowing desktop app launches to resolve executables installed outside the GUI process PATH. | Thanks to [@&#8203;illume](https://github.com/illume). [#&#8203;6598](https://github.com/kubernetes-sigs/headlamp/issues/6598) | | Replaced deprecated fs.rmdirSync calls with fs.rmSync in plugin management code to eliminate Node.js deprecation warnings. | Thanks to [@&#8203;skools-here](https://github.com/skools-here). [#&#8203;6073](https://github.com/kubernetes-sigs/headlamp/issues/6073) | | Bumped headlamp-plugin to version 0.14.0. | Thanks to [@&#8203;illume](https://github.com/illume). [#&#8203;5579](https://github.com/kubernetes-sigs/headlamp/issues/5579) | ##### Plugins can now register non-clickable section headers in the sidebar using `registerSidebarEntry` with `entryType: 'subheader'` to better organize navigation. <img width="280" height="435" alt="Sidebar with non-clickable section headers" src="https://github.com/user-attachments/assets/9871e978-d47e-4022-8076-79e3dff4d86a" /> #### 💻 Development (part 1 of 8) | | | | :---------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------: | | Updated the e2e-tests README to accurately document the two-cluster kind setup required, preventing misleading test failures that resemble product bugs. | Thanks to [@&#8203;unlikelyzero](https://github.com/unlikelyzero). [#&#8203;6658](https://github.com/kubernetes-sigs/headlamp/issues/6658) | | Fixed the desktop e2e suite so it runs correctly by following the documented steps, resolving a missing script error and an undocumented setup requirement. | Thanks to [@&#8203;unlikelyzero](https://github.com/unlikelyzero). [#&#8203;6654](https://github.com/kubernetes-sigs/headlamp/issues/6654) | | Moved the canvas mock into the shared Vitest setup, eliminating redundant per-test imports and reducing frontend test harness noise. | Thanks to [@&#8203;rootp1](https://github.com/rootp1). [#&#8203;6569](https://github.com/kubernetes-sigs/headlamp/issues/6569) | | Added gambtho as a project reviewer. | Thanks to [@&#8203;gambtho](https://github.com/gambtho). [#&#8203;6406](https://github.com/kubernetes-sigs/headlamp/issues/6406) | | Added skoeva to the headlamp-maintainers list in OWNERS_ALIASES. | Thanks to [@&#8203;skoeva](https://github.com/skoeva). [#&#8203;6336](https://github.com/kubernetes-sigs/headlamp/issues/6336) | | Added backend tests for `RemoveContextFromFile` covering missing-context and empty-path edge cases, improving kubeconfig error-handling coverage. | Thanks to [@&#8203;CygnusMaximillian](https://github.com/CygnusMaximillian). [#&#8203;6496](https://github.com/kubernetes-sigs/headlamp/issues/6496) | | Fixed the health-check polling interval not resetting after cluster recovery, so the backoff no longer grows indefinitely without a manual retry. | Thanks to [@&#8203;xonas1101](https://github.com/xonas1101). [#&#8203;6446](https://github.com/kubernetes-sigs/headlamp/issues/6446) | <br><br> <br><br> #### 💻 Development (part 2 of 8) | | | | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------: | | Fixed Pod detailed status showing 'Signal:undefined' for containers that exit without a signal, correctly displaying the exit code instead. | Thanks to [@&#8203;ssz2605](https://github.com/ssz2605). [#&#8203;6442](https://github.com/kubernetes-sigs/headlamp/issues/6442) | | Kubeconfig cluster load failures now log at console.error level instead of console.debug, making the root cause visible in the browser console. | Thanks to [@&#8203;Khizarshah01](https://github.com/Khizarshah01). [#&#8203;6435](https://github.com/kubernetes-sigs/headlamp/issues/6435) | | Replaced `context.TODO()` with `context.Background()` in service proxy tests, aligning test code with Go best practices. | Thanks to [@&#8203;ssz2605](https://github.com/ssz2605). [#&#8203;6421](https://github.com/kubernetes-sigs/headlamp/issues/6421) | | Removed an unreachable duplicate cache-hit check in `getDetailedStatus()`, cleaning up dead code without changing behaviour. | Thanks to [@&#8203;skools-here](https://github.com/skools-here). [#&#8203;6405](https://github.com/kubernetes-sigs/headlamp/issues/6405) | | Added unit tests for the `Context.AuthType()` method in the kubeconfig package, increasing backend test coverage. | Thanks to [@&#8203;CygnusMaximillian](https://github.com/CygnusMaximillian). [#&#8203;6375](https://github.com/kubernetes-sigs/headlamp/issues/6375) | | Global search now matches resources by namespace and displays the namespace alongside the resource kind, making it easier to distinguish resources with the same name. | Thanks to [@&#8203;Priyanshu-rgbb](https://github.com/Priyanshu-rgbb). [#&#8203;6356](https://github.com/kubernetes-sigs/headlamp/issues/6356) | | Fixed `renameCluster` backend handler to correctly return errors on duplicate cluster names and cache update failures instead of silently reporting success. | Thanks to [@&#8203;vtushar06](https://github.com/vtushar06). [#&#8203;6302](https://github.com/kubernetes-sigs/headlamp/issues/6302) | | Restored translation strings accidentally cleared by a previous revert, fixing missing UI text across multiple locales. | Thanks to [@&#8203;sniok](https://github.com/sniok). [#&#8203;6271](https://github.com/kubernetes-sigs/headlamp/issues/6271) | | Added unit tests for the `OIDCAuth` component covering redirect rendering, local storage auth status, and query parameter handling. | Thanks to [@&#8203;PrakharJain345](https://github.com/PrakharJain345). [#&#8203;6268](https://github.com/kubernetes-sigs/headlamp/issues/6268) | <br><br> <br><br> #### 💻 Development (part 3 of 8) | | | | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------: | | Cleaned up TypeScript return-type annotations in frontend API modules by adding explicit types and removing stale `@todo` comments; no behavior change. | Thanks to [@&#8203;therealharshit](https://github.com/therealharshit). [#&#8203;6244](https://github.com/kubernetes-sigs/headlamp/issues/6244) | | Fixed stale cache data for named GET and all-namespace list requests by ensuring informer events now invalidate those cache keys alongside list-shaped keys. | Thanks to [@&#8203;Pragati5-DEBUG](https://github.com/Pragati5-DEBUG). [#&#8203;6230](https://github.com/kubernetes-sigs/headlamp/issues/6230) | | Extracted server startup and shutdown logic from `StartHeadlampServer` into a dedicated `runServer` helper, improving code clarity without changing behavior. | Thanks to [@&#8203;srajang1805](https://github.com/srajang1805). [#&#8203;6217](https://github.com/kubernetes-sigs/headlamp/issues/6217) | | Moved OIDC token refresh middleware into the dedicated `auth` package, improving code organisation without changing authentication behavior. | Thanks to [@&#8203;srajang1805](https://github.com/srajang1805). [#&#8203;6211](https://github.com/kubernetes-sigs/headlamp/issues/6211) | | Refactored `OIDCAuth` internals by extracting a shared `AUTH_STATUS_KEY` constant and fixing the `useEffect` dependency array; no behaviour changes. | Thanks to [@&#8203;Priyanshu-rgbb](https://github.com/Priyanshu-rgbb). [#&#8203;6203](https://github.com/kubernetes-sigs/headlamp/issues/6203) | | Windows x64 and arm64 release builds now run independently so a failure in one architecture no longer cancels the other, avoiding lost artifacts and full workflow reruns. | Thanks to [@&#8203;skoeva](https://github.com/skoeva). [#&#8203;6181](https://github.com/kubernetes-sigs/headlamp/issues/6181) | | Bumped service-appprotocol chart version to 0.43.0 to fix failing CI chart tests. | Thanks to [@&#8203;skoeva](https://github.com/skoeva). [#&#8203;6165](https://github.com/kubernetes-sigs/headlamp/issues/6165) | | Added an explicit return type to `KubeObject.apiList`, replacing the implicit `any` inference to improve type safety with no runtime changes. | Thanks to [@&#8203;somaz94](https://github.com/somaz94). [#&#8203;6148](https://github.com/kubernetes-sigs/headlamp/issues/6148) | | Added unit tests for buildHeadlampCFG to ensure configuration flags are correctly mapped to the HeadlampCFG struct. | Thanks to [@&#8203;CygnusMaximillian](https://github.com/CygnusMaximillian). [#&#8203;6121](https://github.com/kubernetes-sigs/headlamp/issues/6121) | | LimitRange detail view now displays maxLimitRequestRatio alongside other constraints for a more complete resource overview. | Thanks to [@&#8203;srajang1805](https://github.com/srajang1805). [#&#8203;6116](https://github.com/kubernetes-sigs/headlamp/issues/6116) | <br><br> <br><br> #### 💻 Development (part 4 of 8) | | | | :--------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | | Added a confirmation warning when deleting protected Kubernetes system namespaces (default, kube-system, etc.) to prevent accidental cluster damage. | Thanks to [@&#8203;Anjali-Chauhan1](https://github.com/Anjali-Chauhan1). Also thanks to [@&#8203;hstarorg](https://github.com/hstarorg) for reporting the issue. [#&#8203;6106](https://github.com/kubernetes-sigs/headlamp/issues/6106) | | Added a test for MarshalCustomObject error handling to ensure invalid JSON is correctly caught and surfaced in the backend. | Thanks to [@&#8203;CygnusMaximillian](https://github.com/CygnusMaximillian). [#&#8203;6102](https://github.com/kubernetes-sigs/headlamp/issues/6102) | | Added JSON marshaling/unmarshaling unit tests for ClusterReq to improve backend reliability and catch serialization regressions. | Thanks to [@&#8203;CygnusMaximillian](https://github.com/CygnusMaximillian). [#&#8203;6101](https://github.com/kubernetes-sigs/headlamp/issues/6101) | | Added unit tests for the Ingress model class covering address, host, and rule parsing to improve frontend reliability. | Thanks to [@&#8203;srajang1805](https://github.com/srajang1805). [#&#8203;6082](https://github.com/kubernetes-sigs/headlamp/issues/6082) | | Added unit tests for DaemonSet and StatefulSet model classes, improving confidence in container and node selector logic. | Thanks to [@&#8203;srajang1805](https://github.com/srajang1805). [#&#8203;6081](https://github.com/kubernetes-sigs/headlamp/issues/6081) | | Mac binaries are now code-signed by default when triggering app builds, ensuring users receive trusted macOS releases. | Thanks to [@&#8203;sniok](https://github.com/sniok). [#&#8203;6079](https://github.com/kubernetes-sigs/headlamp/issues/6079) | | Fixed compareUnits to use parseFloat instead of parseInt so fractional resource values like CPU millicores are compared correctly. | Thanks to [@&#8203;Suyog241005](https://github.com/Suyog241005). [#&#8203;6068](https://github.com/kubernetes-sigs/headlamp/issues/6068) | | Added unit tests for `buildTelemetryConfig` and `loadOidcCACert` helper functions, improving backend config test coverage. | Thanks to [@&#8203;aryanraj45](https://github.com/aryanraj45). [#&#8203;6052](https://github.com/kubernetes-sigs/headlamp/issues/6052) | | Added unit test for `returnGVRList` in the k8s cache invalidation package, closing a previously untested code path. | Thanks to [@&#8203;CygnusMaximillian](https://github.com/CygnusMaximillian). [#&#8203;6048](https://github.com/kubernetes-sigs/headlamp/issues/6048) | <br><br> <br><br> #### 💻 Development (part 5 of 8) | | | | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------: | | Added test coverage for PriorityClass, PodDisruptionBudget, and HorizontalPodAutoscaler components, verifying columns, extraInfo, and fallback values. | Thanks to [@&#8203;aryanraj45](https://github.com/aryanraj45). [#&#8203;6047](https://github.com/kubernetes-sigs/headlamp/issues/6047) | | Added test coverage for Lease, RuntimeClass, and StorageClass components, verifying their resource-specific column and detail configurations. | Thanks to [@&#8203;aryanraj45](https://github.com/aryanraj45). [#&#8203;6042](https://github.com/kubernetes-sigs/headlamp/issues/6042) | | Simplified `OIDCTokenRefreshMiddleware` by inlining helper functions and consolidating repeated metric calls into a single deferred call, reducing code duplication. | Thanks to [@&#8203;skoeva](https://github.com/skoeva). [#&#8203;6039](https://github.com/kubernetes-sigs/headlamp/issues/6039) | | Added 18 unit tests for the Service model covering external addresses, ports, formatted ports, and selectors, improving confidence in Service data handling. | Thanks to [@&#8203;srajang1805](https://github.com/srajang1805). [#&#8203;6017](https://github.com/kubernetes-sigs/headlamp/issues/6017) | | Replaced %v with %w in backend fmt.Errorf calls so error chains are preserved, enabling proper errors.Is and errors.As unwrapping throughout the backend. | Thanks to [@&#8203;Psykii22](https://github.com/Psykii22). [#&#8203;5997](https://github.com/kubernetes-sigs/headlamp/issues/5997) | | Node roles in the list view are now separated by ", " instead of ",", matching the formatting on the node details page for a consistent look. | Thanks to [@&#8203;skoeva](https://github.com/skoeva). [#&#8203;5994](https://github.com/kubernetes-sigs/headlamp/issues/5994) | | Added unit tests for the k8cache resource-filtering logic, ensuring the goroutine-reduction behaviour introduced in [#&#8203;4670](https://github.com/kubernetes-sigs/headlamp/issues/4670) is verified by deterministic tests. | Thanks to [@&#8203;Pragati5-DEBUG](https://github.com/Pragati5-DEBUG). [#&#8203;5957](https://github.com/kubernetes-sigs/headlamp/issues/5957) | | Localized the 'Lines' label and 'All' menu item in the logs viewer Lines selector so they are now translated consistently with the rest of the toolbar. | Thanks to [@&#8203;vtushar06](https://github.com/vtushar06). [#&#8203;5944](https://github.com/kubernetes-sigs/headlamp/issues/5944) | <br><br> <br><br> #### 💻 Development (part 6 of 8) | | | | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -----------------------------------------------------------------------------------------------------------------------------: | | Added unit tests for the `recentClusters` helper, covering deduplication, cluster cap, and edge cases to prevent silent regressions. | Thanks to [@&#8203;RajPrakash681](https://github.com/RajPrakash681). [#&#8203;5831](https://github.com/kubernetes-sigs/headlamp/issues/5831) | | Added unit tests for the `clusterSettings` helper, guarding against silent regressions in cluster-specific configuration storage used across 14 files. | Thanks to [@&#8203;RajPrakash681](https://github.com/RajPrakash681). [#&#8203;5829](https://github.com/kubernetes-sigs/headlamp/issues/5829) | | Switched kubeconfig error formatting from `%v` to `%w`, enabling proper error unwrapping with `errors.Is()` and `errors.As()`. | Thanks to [@&#8203;vmridul](https://github.com/vmridul). [#&#8203;5786](https://github.com/kubernetes-sigs/headlamp/issues/5786) | | Added negative tests confirming that mutating and proxy endpoints correctly reject callers missing a valid `X-HEADLAMP_BACKEND-TOKEN` header, guarding against auth regressions. | Thanks to [@&#8203;vyncent-t](https://github.com/vyncent-t). [#&#8203;5657](https://github.com/kubernetes-sigs/headlamp/issues/5657) | | Fixed OIDC login to return a proper `500 Internal Server Error` when state generation fails, and made the random source injectable for reliable testing. | Thanks to [@&#8203;harrshita123](https://github.com/harrshita123). [#&#8203;5643](https://github.com/kubernetes-sigs/headlamp/issues/5643) | | Hardened the `parseKubeConfig` test to assert the handler writes exactly one response, preventing silent double-write regressions from going undetected. | Thanks to [@&#8203;harrshita123](https://github.com/harrshita123). [#&#8203;5599](https://github.com/kubernetes-sigs/headlamp/issues/5599) | | Added regression tests ensuring unavailable cluster errors are non-selectable and forbidden resource requests do not retry unnecessarily. | Thanks to [@&#8203;harrshita123](https://github.com/harrshita123). [#&#8203;5535](https://github.com/kubernetes-sigs/headlamp/issues/5535) | <br><br> <br><br> #### 💻 Development (part 7 of 8) | | | | :----------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | | Added Storybook snapshot stories for the ClusterBadge sidebar component, giving it automated visual regression coverage for the first time. | Thanks to [@&#8203;xonas1101](https://github.com/xonas1101). [#&#8203;6482](https://github.com/kubernetes-sigs/headlamp/issues/6482) | | Added Storybook snapshot stories for the sidebar VersionButton in both expanded and collapsed states, closing the gap in snapshot test coverage. | Thanks to [@&#8203;xonas1101](https://github.com/xonas1101). [#&#8203;6448](https://github.com/kubernetes-sigs/headlamp/issues/6448) | | Added Storybook stories for `ConditionList`, covering its status-colour mapping and render output to include it in snapshot test coverage. | Thanks to [@&#8203;xonas1101](https://github.com/xonas1101). [#&#8203;6396](https://github.com/kubernetes-sigs/headlamp/issues/6396) | | Added Storybook stories for `PhaseLabel` covering all colour-mapping branches, which also serve as snapshot tests to prevent regressions. | Thanks to [@&#8203;xonas1101](https://github.com/xonas1101). [#&#8203;6371](https://github.com/kubernetes-sigs/headlamp/issues/6371) | | Added Storybook snapshot stories for ThemePreview, NumRowsInput, and other Settings widgets, increasing test coverage for that area. | Thanks to [@&#8203;xonas1101](https://github.com/xonas1101). [#&#8203;6316](https://github.com/kubernetes-sigs/headlamp/issues/6316) | | Added Storybook stories for the ServiceAccount Details view, enabling visual regression testing and easier isolated development of that component. | Thanks to [@&#8203;bhuvan-somisetty](https://github.com/bhuvan-somisetty). Also thanks to [@&#8203;Shahazadi-Shaguftha-Syed](https://github.com/Shahazadi-Shaguftha-Syed) for reporting the issue. [#&#8203;6295](https://github.com/kubernetes-sigs/headlamp/issues/6295) | | Added Storybook stories for the node UpgradeVisualizationPanel, covering upgrading and idle states to enable visual regression testing. | Thanks to [@&#8203;xonas1101](https://github.com/xonas1101). [#&#8203;6285](https://github.com/kubernetes-sigs/headlamp/issues/6285) | | Added dedicated Storybook stories for `SectionFilterHeader`, improving visual regression coverage and enabling isolated development of filter header states. | Thanks to [@&#8203;xonas1101](https://github.com/xonas1101). [#&#8203;6262](https://github.com/kubernetes-sigs/headlamp/issues/6262) | | Consolidated Label component Storybook stories into a single file and added missing variants for more complete visual coverage. | Thanks to [@&#8203;jainarjav80-sys](https://github.com/jainarjav80-sys). Also thanks to [@&#8203;xonas1101](https://github.com/xonas1101) for reporting the issue. [#&#8203;6195](https://github.com/kubernetes-sigs/headlamp/issues/6195) | | Added Storybook stories and storyshots for VolumeAttributesClass list and detail views to catch UI regressions early. | Thanks to [@&#8203;Suhani95](https://github.com/Suhani95). [#&#8203;6078](https://github.com/kubernetes-sigs/headlamp/issues/6078) | | Added Storybook stories for the `JobDetails` component, enabling snapshot-based regression testing for the job details view. | Thanks to [@&#8203;xonas1101](https://github.com/xonas1101). [#&#8203;6051](https://github.com/kubernetes-sigs/headlamp/issues/6051) | <br><br> <br><br> #### 💻 Development (part 8 of 8) | | | | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------: | | Replaced deprecated `github.com/pkg/errors` with Go's standard `errors` and `fmt.Errorf(%w)`, removing an unnecessary third-party dependency. | Thanks to [@&#8203;Psykii22](https://github.com/Psykii22). [#&#8203;6045](https://github.com/kubernetes-sigs/headlamp/issues/6045) | | Added Storybook stories for `DryRunPreviewDialog` covering open, closed, and large YAML preview states, making it easier to visually validate dialog behaviour. | Thanks to [@&#8203;Suhani95](https://github.com/Suhani95). [#&#8203;6032](https://github.com/kubernetes-sigs/headlamp/issues/6032) | | Added Storybook snapshot stories for the DaemonSet Details view, improving test coverage for Update Strategy, Selector, Tolerations, and Containers sections. | Thanks to [@&#8203;xonas1101](https://github.com/xonas1101). [#&#8203;6030](https://github.com/kubernetes-sigs/headlamp/issues/6030) | | Added a Storybook story for the 404 NotFoundComponent, giving it snapshot-based regression coverage alongside the rest of the component library. | Thanks to [@&#8203;xonas1101](https://github.com/xonas1101). [#&#8203;5979](https://github.com/kubernetes-sigs/headlamp/issues/5979) | | Introduced shared `ConditionList`, `PhaseLabel` components and a `getReadyCondition` utility to eliminate duplicated status-rendering code across multiple resource views. | Thanks to [@&#8203;Athang69](https://github.com/Athang69). [#&#8203;5968](https://github.com/kubernetes-sigs/headlamp/issues/5968) | | Added Storybook snapshot stories for RBAC role components (List, Details, BindingList, BindingDetails), giving these views regression test coverage for the first time. | Thanks to [@&#8203;xonas1101](https://github.com/xonas1101). [#&#8203;5961](https://github.com/kubernetes-sigs/headlamp/issues/5961) | | Added Storybook stories for ServiceAccount Details and List views, providing snapshot-based regression coverage for those components. | Thanks to [@&#8203;Shahazadi-Shaguftha-Syed](https://github.com/Shahazadi-Shaguftha-Syed). [#&#8203;5955](https://github.com/kubernetes-sigs/headlamp/issues/5955) | | Added Storybook stories for GlobalSearchContent covering empty input, loading, and results states, enabling snapshot regression testing for the global search UI. | Thanks to [@&#8203;yuki681](https://github.com/yuki681). [#&#8203;5945](https://github.com/kubernetes-sigs/headlamp/issues/5945) | | Added Storybook snapshot stories for the node Details and Charts components, adding regression coverage for CPU/memory usage charts and node detail views. | Thanks to [@&#8203;xonas1101](https://github.com/xonas1101). [#&#8203;5942](https://github.com/kubernetes-sigs/headlamp/issues/5942) | | Added Storybook stories for the `DeleteButton` component, covering all main visual states to improve UI development and review. | Thanks to [@&#8203;sudhidutta7694](https://github.com/sudhidutta7694). [#&#8203;5893](https://github.com/kubernetes-sigs/headlamp/issues/5893) | <!-- end-release-notes --> **Container image:** :whale: [ghcr.io/headlamp-k8s/headlamp:v0.44.0](https://github.com/kubernetes-sigs/headlamp/pkgs/container/headlamp) **Desktop Apps:** :penguin: [Flatpak / Linux (AMD64)](https://flathub.org/apps/details/io.kinvolk.Headlamp) :penguin: Linux AppImage [AMD64](https://github.com/kubernetes-sigs/headlamp/releases/download/v0.44.0/Headlamp-0.44.0-linux-x64.AppImage), [ARM64](https://github.com/kubernetes-sigs/headlamp/releases/download/v0.44.0/Headlamp-0.44.0-linux-arm64.AppImage), [ARMv7l](https://github.com/kubernetes-sigs/headlamp/releases/download/v0.44.0/Headlamp-0.44.0-linux-armv7l.AppImage) :penguin: Linux Tarball [AMD64](https://github.com/kubernetes-sigs/headlamp/releases/download/v0.44.0/Headlamp-0.44.0-linux-x64.tar.gz), [ARM64](https://github.com/kubernetes-sigs/headlamp/releases/download/v0.44.0/Headlamp-0.44.0-linux-arm64.tar.gz), [ARMv7l](https://github.com/kubernetes-sigs/headlamp/releases/download/v0.44.0/Headlamp-0.44.0-linux-armv7l.tar.gz) :penguin: Debian / Linux [AMD64](https://github.com/kubernetes-sigs/headlamp/releases/download/v0.44.0/headlamp_0.44.0-1_amd64.deb) :green_apple: [Mac (AMD64)](https://github.com/kubernetes-sigs/headlamp/releases/download/v0.44.0/Headlamp-0.44.0-mac-x64.dmg) :green_apple: [Mac (ARM/M1-M5)](https://github.com/kubernetes-sigs/headlamp/releases/download/v0.44.0/Headlamp-0.44.0-mac-arm64.dmg) :blue_square: [Windows (AMD64)](https://github.com/kubernetes-sigs/headlamp/releases/download/v0.44.0/Headlamp-0.44.0-win-x64.exe) :blue_square: [Windows (ARM64)](https://github.com/kubernetes-sigs/headlamp/releases/download/v0.44.0/Headlamp-0.44.0-win-arm64.exe) ### [`v0.43.0`](https://github.com/kubernetes-sigs/headlamp/releases/tag/v0.43.0): 0.43.0 [Compare Source](https://github.com/kubernetes-sigs/headlamp/compare/v0.42.0...v0.43.0) #### ✨ Enhancements - Added opt-in service account token auth for in-cluster deployments, enabling Headlamp to work behind OIDC or other external auth proxies. Thanks to [@&#8203;0xMH](https://github.com/0xMH) and [@&#8203;unixpariah](https://github.com/unixpariah). Also thanks to [@&#8203;yolossn](https://github.com/yolossn) for reporting the issue. - Helm chart probes now support a configurable scheme (HTTP/HTTPS) and full timing settings, enabling correct probe behavior when backend TLS is enabled. Thanks to [@&#8203;gambtho](https://github.com/gambtho). Also thanks to [@&#8203;mbasha86](https://github.com/mbasha86) for reporting the issue. - Added alpha support for ClusterProfile discovery via the Cluster Inventory API, enabling automatic multi-cluster registration without manual kubeconfig setup. Thanks to [@&#8203;kahirokunn](https://github.com/kahirokunn). - Added hostAliases support to the Helm chart pod template, allowing custom host-to-IP mappings to be configured via chart values. Thanks to [@&#8203;VijayabaskarR-06](https://github.com/VijayabaskarR-06). Also thanks to [@&#8203;geochip](https://github.com/geochip) for reporting the issue. - Added Russian language support to the frontend, making Headlamp more accessible for Russian-speaking users. Thanks to [@&#8203;Future998](https://github.com/Future998). - Added proxy auth support so Headlamp can read authentication headers injected by middleware proxies for seamless cluster access. Thanks to [@&#8203;ageekymonk](https://github.com/ageekymonk). - Added dry-run preview for rollbacks, letting users inspect the resulting resource YAML before applying a rollout undo. Thanks to [@&#8203;alokdangre](https://github.com/alokdangre). Also thanks to [@&#8203;illume](https://github.com/illume) for reporting the issue. - Added a node upgrade visualization panel showing Cordon, Drain, Delete, Reimage, Complete progress for managed nodes. Support for visualising upgrades in more k8s distros and systems coming soon. Thanks to [@&#8203;Jenniferyingni](https://github.com/Jenniferyingni) - Added RTL layout support and new locales for Arabic, Urdu, and Hebrew, with the UI direction switching automatically based on the selected language. Thanks to [@&#8203;mahmoodalisha](https://github.com/mahmoodalisha). - Completed missing Hindi translations for UI strings, ensuring users with a Hindi locale see a fully translated interface. Thanks to [@&#8203;mahmoodalisha](https://github.com/mahmoodalisha). - Added a batch scale action to the multi-select toolbar, letting users scale multiple Deployments, StatefulSets, or ReplicaSets at once. Thanks to [@&#8203;RajPrakash681](https://github.com/RajPrakash681). - Added registerProjectApiResource() to the plugin API, enabling plugins to include custom CRDs in Project resource fetching. Thanks to [@&#8203;NAME-ASHWANIYADAV](https://github.com/NAME-ASHWANIYADAV). - Added a diagnostics section to Pod and workload detail pages that surfaces deterministic troubleshooting hints from Kubernetes status, events, and container data. Thanks to [@&#8203;Utkarshpandey0001](https://github.com/Utkarshpandey0001). - Added a Dry Run option to the YAML editor, letting users validate manifests against the Kubernetes API before applying them. Thanks to [@&#8203;Vikaspal8923](https://github.com/Vikaspal8923). - Made the Back button on the cluster authentication chooser keyboard-accessible by adding tab focus and Enter/Space key handling. Thanks to [@&#8203;YadavAkhileshh](https://github.com/YadavAkhileshh). - Added missing French translations, improving UI localization coverage and keeping Kubernetes terms like "cluster" technically accurate. Thanks to [@&#8203;codeurluce](https://github.com/codeurluce). - Integrated [@&#8203;typescript/native-preview](https://github.com/typescript/native-preview) for frontend type checking, cutting type-check time from \~18-20 seconds down to \~3-4 seconds. Thanks to [@&#8203;sniok](https://github.com/sniok). - Advanced Search queries can now be saved to browser local storage and restored, renamed, or deleted from the toolbar. Thanks to [@&#8203;Utkarshpandey0001](https://github.com/Utkarshpandey0001). - Added a dedicated Job details view surfacing completions, parallelism, backoff limit, active/succeeded/failed counts, and more, replacing the generic workload view. Thanks to [@&#8203;beep-boopp](https://github.com/beep-boopp). - Added remark-gfm to the headlamp-plugin do-not-copy list to prevent it from being incorrectly bundled into plugin builds. Thanks to [@&#8203;illume](https://github.com/illume). - Added ReadHeaderTimeout and IdleTimeout to the backend HTTP server, reducing slow-request attack risk while keeping logs and WebSockets unaffected. Thanks to [@&#8203;ayushmaan-16](https://github.com/ayushmaan-16). - Helm chart now supports setting a default pod debug image via values, used as the fallback when no per-cluster override is configured. Thanks to [@&#8203;harrshita123](https://github.com/harrshita123). - Events table on the cluster overview page now includes a Node column showing which node emitted each event. Thanks to [@&#8203;VijayabaskarR-06](https://github.com/VijayabaskarR-06). Also thanks to [@&#8203;trashhead](https://github.com/trashhead) for reporting the issue. - Job details view now includes a Logs button, letting you view logs from related pods without leaving the Job page. Thanks to [@&#8203;ChunyiLyu](https://github.com/ChunyiLyu). - Added a container query parameter to pod log and exec deep-links, letting users link directly to a specific container's logs or terminal. Thanks to [@&#8203;jordanly](https://github.com/jordanly). - Resource detail views now show additional fields matching kubectl describe output, including port info for NodePort services. Thanks to [@&#8203;joaquimrocha](https://github.com/joaquimrocha). - Added a Create Deployment form to the UI, letting users create Deployments directly alongside the existing Pod creation workflow. Thanks to [@&#8203;vyncent-t](https://github.com/vyncent-t). - Helm repository add and update operations now support authentication fields including username, password, and TLS options for private repositories. Thanks to [@&#8203;Athang69](https://github.com/Athang69). - Added --default-light-theme and related CLI flags so administrators can configure the default UI theme at runtime based on OS preference. Thanks to [@&#8203;guillaumebernard84](https://github.com/guillaumebernard84). - Added Windows Arm64 desktop builds, expanding native platform coverage to Arm-based Windows devices. Thanks to [@&#8203;illume](https://github.com/illume). - Added Bengali language support to the frontend and translated technical Kubernetes jargon, improving localization for Bengali-speaking users. Thanks to [@&#8203;Pratik-050](https://github.com/Pratik-050). - Node List and Details views now show the node pool, with a new getNodePool() method on the node model and Nodes added as a source to the Cluster group in the resource map. Thanks to [@&#8203;illume](https://github.com/illume). - Added an opt-in Chromium remote debugging port to the Electron app, enabling devtools and MCP integrations. Thanks to [@&#8203;yolossn](https://github.com/yolossn) - Added a kubeconfig secretreader example to the Helm chart, pinned the Cluster Inventory provider images, and allowed Cluster Inventory commands to run under plugin mounts. Thanks to [@&#8203;kahirokunn](https://github.com/kahirokunn). ##### Added alpha support for ClusterProfile discovery via the Cluster Inventory API <img width="800" height="352" alt="Headlamp UI showing alpha ClusterProfile discovery via the Cluster Inventory API" src="https://github.com/user-attachments/assets/674137f5-99db-4d7f-ab50-d91b19202704" /> ##### Added RTL layout support and new locales for Arabic, Urdu, and Hebrew <img width="1918" height="972" alt="Headlamp UI with right-to-left layout and Arabic locale" src="https://github.com/user-attachments/assets/9882af74-6fb2-452c-980a-f74a99da269e" /> ##### Added a node upgrade visualization panel <img width="1624" height="360" alt="AKS node upgrade visualization panel summary view" src="https://github.com/user-attachments/assets/a12720c3-f1e2-4c51-a63b-55dabb051f89" /> <img width="1889" height="946" alt="AKS node upgrade visualization panel detailed view" src="https://github.com/user-attachments/assets/16d666ed-6f91-4780-b3fd-0136da201892" /> ##### Added Russian language support to the frontend <img width="1920" height="955" alt="Headlamp frontend displayed with Russian language support" src="https://github.com/user-attachments/assets/a686aff5-43c1-4a97-b309-86341922641e" /> ##### Added proxy auth support for middleware proxies <img width="1037" height="433" alt="Proxy authentication settings for middleware proxies" src="https://github.com/user-attachments/assets/0eab409e-622c-425e-87da-2e7203f319dd" /> ##### Added a diagnostics section to Pod and workload detail pages <img width="1256" height="1060" alt="Diagnostics section on a Pod and workload detail page" src="https://github.com/user-attachments/assets/002a4ad0-462d-4095-a0c4-59bde8ec65af" /> ##### Job details view now includes a Logs button <img width="839" height="420" alt="Job details view with a Logs button" src="https://github.com/user-attachments/assets/a2fd6e4c-0607-4648-a697-c2a77e520f95" /> ##### Added a Create Deployment form to the UI <img width="1646" height="926" alt="Create Deployment form in the Headlamp UI" src="https://github.com/user-attachments/assets/e7dc37e6-5e92-4d4c-bb3e-0c1c5c9a0701" /> ##### Added a dedicated Job details view <img width="807" height="397" alt="Dedicated Job details view in the Headlamp UI" src="https://github.com/user-attachments/assets/9a03471b-0738-4e88-97a6-66318f29156b" /> #### 🐞 Bug Fixes - Switched macOS notarization back to electron-builder, combining codesign, notarize, and staple into a single step using APPLEID credentials. Thanks to [@&#8203;joaquimrocha](https://github.com/joaquimrocha). - Fixed OIDC login failures when no custom CA cert is configured, so public providers like Entra ID, Okta, and Google now work correctly. Thanks to [@&#8203;beep-boopp](https://github.com/beep-boopp). Also thanks to [@&#8203;muhammad9970](https://github.com/muhammad9970) for reporting the issue. - Fixed parseRam and parseDiskSpace silently dropping decimal portions (e.g., '289.9Mi'), so memory and disk quantities are now parsed accurately. Thanks to [@&#8203;WasThatRudy](https://github.com/WasThatRudy). Also thanks to [@&#8203;thehandsomezebra](https://github.com/thehandsomezebra) for reporting the issue. - Fixed the Electron app on Linux and Windows to fully quit when the window is closed instead of continuing to run in the background. Thanks to [@&#8203;Mohammed-Thaha](https://github.com/Mohammed-Thaha). Also thanks to [@&#8203;Hronom](https://github.com/Hronom) for reporting the issue. - Fixed stale Pod status icons in the list view that stayed yellow/warning even after a Pod had passed its readiness checks. Thanks to [@&#8203;RustamSheoran](https://github.com/RustamSheoran). Also thanks to [@&#8203;vikash7485](https://github.com/vikash7485) for reporting the issue. - Fixed the Helm chart release workflow failing when it attempted to push provenance files as gzipped archives. Thanks to [@&#8203;onedr0p](https://github.com/onedr0p). Also thanks to [@&#8203;joryirving](https://github.com/joryirving) for reporting the issue. - Table rows-per-page selection is now saved to localStorage, so the preference persists across page refreshes. Thanks to [@&#8203;ChayanDass](https://github.com/ChayanDass). Also thanks to [@&#8203;illume](https://github.com/illume) for reporting the issue. - Fixed missing edges in the resource map when nodes move between cloud and namespace-specific views. Thanks to [@&#8203;gattytto](https://github.com/gattytto). - Fixed a crash that prevented Headlamp from loading on Firefox browsers by removing problematic i18n normalisation. Thanks to [@&#8203;DhairyaMajmudar](https://github.com/DhairyaMajmudar). - Fixed a data race on the portforward Status and Error fields by introducing a mutex and thread-safe accessors, improving port-forwarding stability. Thanks to [@&#8203;NAME-ASHWANIYADAV](https://github.com/NAME-ASHWANIYADAV). - Fixed broken plugin tests caused by removed ArtifactHub packages and a macOS-incompatible shebang, restoring reliable CI runs. Thanks to [@&#8203;skoeva](https://github.com/skoeva). - Helm chart now warns when image.tag is pinned during upgrades, preventing users from unknowingly running an outdated image after a chart update. Thanks to [@&#8203;ManthanNimodiya](https://github.com/ManthanNimodiya). Also thanks to [@&#8203;lyc0221](https://github.com/lyc0221) for reporting the issue. - Backend HTTP transports now clone DefaultTransport when customizing TLS, preserving proxy support and connection timeouts that were previously silently dropped. Thanks to [@&#8203;beep-boopp](https://github.com/beep-boopp). - Fixed backend test failures on Windows by consistently using filepath.Join for all filesystem path operations. Thanks to [@&#8203;PrakharJain345](https://github.com/PrakharJain345). - Fixed a React rules-of-hooks violation in ContainerEnvironmentVariables by moving hooks before the early return, eliminating potential rendering bugs. Thanks to [@&#8203;nidhi-9900](https://github.com/nidhi-9900). Also thanks to [@&#8203;illume](https://github.com/illume) for reporting the issue. - Fixed failing daemonset snapshot tests in main to restore a passing CI build. Thanks to [@&#8203;illume](https://github.com/illume). - Fixed missing az and gh command support in runPlugin and added proper handling of child process error events. Thanks to [@&#8203;illume](https://github.com/illume). - Added unit tests for OpenTelemetry metrics initialization to verify that core metrics like RequestCounter and PluginLoadCount are correctly instantiated. Thanks to [@&#8203;CygnusMaximillian](https://github.com/CygnusMaximillian). - Fixed the website trigger workflow to authenticate using GH_TOKEN, resolving failures in the gh api dispatch call. Thanks to [@&#8203;skoeva](https://github.com/skoeva). - Fixed useKubeObjectList to strip only the List suffix from kind names, preventing garbled names for resource types like Tekton's EventListener. Thanks to [@&#8203;sniok](https://github.com/sniok). - Fixed a crash when typing partial YAML (e.g., a lone '-') under containers: in the Create Resource dialog, preventing a TypeError from taking down the whole app. Thanks to [@&#8203;WasThatRudy](https://github.com/WasThatRudy). Also thanks to [@&#8203;lucasgolino](https://github.com/lucasgolino) for reporting the issue. - Fixed a memory leak in LogViewer where xterm search addon event listeners accumulated on every effect re-run without being cleaned up. Thanks to [@&#8203;vmridul](https://github.com/vmridul). - Dependency installation steps added to development docs, and npm run install:all now includes npm install, streamlining new contributor setup. Thanks to [@&#8203;yuki681](https://github.com/yuki681). - Hides the Gateway (beta) filter in the resource map when Gateway API CRDs aren't installed, preventing an infinite-loading state on unsupported clusters. Thanks to [@&#8203;skoeva](https://github.com/skoeva). - Node drain operations now stop cleanly when the Headlamp server shuts down, preventing orphaned goroutines from continuing to make Kubernetes API calls indefinitely. Thanks to [@&#8203;RajPrakash681](https://github.com/RajPrakash681). - Restored the ?view=logs deep-link for Job details so navigating directly to a Job URL with that parameter now auto-launches the logs view. Thanks to [@&#8203;beep-boopp](https://github.com/beep-boopp). - Stop logging unrelated outer-scope error on missing state in oidc-callback. Thanks to [@&#8203;govindup63](https://github.com/govindup63). Also thanks to [@&#8203;krsatyamthakur-droid](https://github.com/krsatyamthakur-droid) for reporting the issue. - Fixed a crash in ProjectList when a namespace lacked metadata labels, preventing the Projects page from going blank during cache refreshes. Thanks to [@&#8203;govindup63](https://github.com/govindup63). Also thanks to [@&#8203;erfanium](https://github.com/erfanium) for reporting the issue. - Fixed a bug in KubeObjectNode where hover-expand would still trigger after moving the mouse away, by replacing clearInterval with clearTimeout. Thanks to [@&#8203;YadavAkhileshh](https://github.com/YadavAkhileshh). - Fixed a drain-status polling leak in Node Details so timers clean up correctly when navigating away or switching nodes, preventing stale state updates. Thanks to [@&#8203;PrakharJain345](https://github.com/PrakharJain345). Also thanks to [@&#8203;Shreya2005-2005](https://github.com/Shreya2005-2005) for reporting the issue. - Fixed unsafe token assertions in RefreshAndSetToken() that could panic if an OIDC provider returns a token without access_token or id_token. Thanks to [@&#8203;NAME-ASHWANIYADAV](https://github.com/NAME-ASHWANIYADAV). - Fixed a stale closure in ShowHideLabel by adding maxChars to the useMemo dependency array, ensuring label truncation updates correctly. Thanks to [@&#8203;rajeshsingh241](https://github.com/rajeshsingh241). - POST /parseKubeConfig now returns 400 Bad Request when the request body is missing, empty, or contains a null kubeconfigs entry. Thanks to [@&#8203;harrshita123](https://github.com/harrshita123). - Fixed createRouteURL to handle missing route params gracefully, preventing crashes when plugin routes with :namespace/:name params are initialized. Thanks to [@&#8203;WasThatRudy](https://github.com/WasThatRudy). Also thanks to [@&#8203;arx666x](https://github.com/arx666x) for reporting the issue. - Fixed a backend panic from invalid glob patterns in /externalproxy and pre-compiles allowed URL patterns once to speed up proxy request validation. Thanks to [@&#8203;ayushmaan-16](https://github.com/ayushmaan-16). - Fixed a localStorage leak in PortForwardContent where a failed port-forward restart left a stale entry that reappeared incorrectly on page refresh. Thanks to [@&#8203;iashutoshyadav](https://github.com/iashutoshyadav). - Fixed direct state mutation in PortForwardContent's stop handler by using a spread copy, ensuring React detects the change and re-renders the UI. Thanks to [@&#8203;iashutoshyadav](https://github.com/iashutoshyadav). - Terminal/log surfaces (pod logs, exec, node shell) now respect the active MUI theme; plugin authors can also customize terminal colors via AppTheme. Thanks to [@&#8203;illume](https://github.com/illume). - Restored Event class hooks as static methods to fix a compatibility regression introduced by a recent refactor. Thanks to [@&#8203;sniok](https://github.com/sniok). - Helm repository add, remove, and update operations now fail safely when the file lock cannot be acquired, preventing unguarded concurrent file writes. Thanks to [@&#8203;harrshita123](https://github.com/harrshita123). - Added a code comment explaining why dispatch is intentionally excluded from the useEffect deps array in DetailsViewSection.stories. Thanks to [@&#8203;WasThatRudy](https://github.com/WasThatRudy). - The /parseKubeConfig endpoint now stops immediately on malformed JSON instead of continuing execution with a zero-value payload after sending a 400 response. Thanks to [@&#8203;Sambhram1](https://github.com/Sambhram1). Also thanks to [@&#8203;harrshita123](https://github.com/harrshita123) for reporting the issue. - Owner references now resolve using both kind and apiVersion, preventing incorrect 'Controlled by' links from appearing in resource metadata panels. Thanks to [@&#8203;DashratRajpurohit](https://github.com/DashratRajpurohit). Also thanks to [@&#8203;mahmoudmagdy1-1](https://github.com/mahmoudmagdy1-1) for reporting the issue. - Fixed a server crash caused by a panic during OIDC login state generation; the backend now returns a proper 500 error instead of terminating the process. Thanks to [@&#8203;NAME-ASHWANIYADAV](https://github.com/NAME-ASHWANIYADAV). - Added the missing Logs action to the DaemonSet detail page, making it consistent with other workload resource views. Thanks to [@&#8203;beep-boopp](https://github.com/beep-boopp). - Fixed node preview cards in the Resource Map being clipped or overlapped by neighboring node cards when hovered. Thanks to [@&#8203;Dhruv-Kumar-Singh](https://github.com/Dhruv-Kumar-Singh). - Replaced deprecated onKeyPress with onKeyDown in PortForwardStartDialog, ClusterNameEditor, and SettingsCluster for reliable keyboard interaction. Thanks to [@&#8203;YadavAkhileshh](https://github.com/YadavAkhileshh). - Cluster search in ClusterChooserPopup is now case-insensitive, so clusters can be found regardless of how their name is typed. Thanks to [@&#8203;YadavAkhileshh](https://github.com/YadavAkhileshh). - Fixed a crash when uploading large KubeConfig files by replacing String.fromCharCode.apply with TextDecoder, which has no JavaScript call stack limit. Thanks to [@&#8203;YadavAkhileshh](https://github.com/YadavAkhileshh). - Fixed a goroutine leak where runWatcher goroutines were never cancelled when clusters were removed, preventing indefinite resource exhaustion. Thanks to [@&#8203;Joshna907](https://github.com/Joshna907). - Removed the stable module-level staticRelations constant from the useMemo dependency array in relations, eliminating a suppressed ESLint rule. Thanks to [@&#8203;WasThatRudy](https://github.com/WasThatRudy). - Added a clarifying comment in CustomResourceList explaining why t is intentionally excluded from the cols useMemo deps array, making the suppression self-documenting. Thanks to [@&#8203;WasThatRudy](https://github.com/WasThatRudy). - Fixed empty -oidc-scopes argument being unconditionally added to Headlamp deployments when using externalSecret OIDC config without an OIDC_SCOPES key. Thanks to [@&#8203;iashutoshyadav](https://github.com/iashutoshyadav). Also thanks to [@&#8203;mikeywuu](https://github.com/mikeywuu) for reporting the issue. - Error messages in the resource editor snackbar no longer expose raw Kubernetes regex validation patterns and are now split into readable bullet lines. Thanks to [@&#8203;RajPrakash681](https://github.com/RajPrakash681). - Infrastructure 5xx errors (502, 503, 504) are no longer cached, so Headlamp recovers promptly after load balancer or reverse proxy failures. Thanks to [@&#8203;beep-boopp](https://github.com/beep-boopp). - Fixed the embedded SPA handler so fallback index.html responses correctly set Content-Type based on the actual file served, not always text/html. Thanks to [@&#8203;harrshita123](https://github.com/harrshita123). - Fixed a bug where a failed URL fetch in the Load from URL dialog would silently load the error body into the editor instead of stopping after showing the error. Thanks to [@&#8203;RajPrakash681](https://github.com/RajPrakash681). - Fixed a setInterval leak in WebSocketManager where a failed WebSocket connection left concurrent callers polling forever, wasting resources. Thanks to [@&#8203;RajPrakash681](https://github.com/RajPrakash681). - Release notes dialog now renders GitHub Flavored Markdown (tables, strikethrough, task lists) correctly instead of displaying raw markdown text. Thanks to [@&#8203;prabindersinghh](https://github.com/prabindersinghh). Also thanks to [@&#8203;davidpistachio](https://github.com/davidpistachio) for reporting the issue. - Added 8 unit tests for the ConfirmButton component and widened its buttonComponent prop type to accept any React element type. Thanks to [@&#8203;RajPrakash681](https://github.com/RajPrakash681). - The "Cluster Settings" page title is now wrapped in the i18n t() function so it correctly translates when using non-English languages. Thanks to [@&#8203;RajPrakash681](https://github.com/RajPrakash681). - Fixed missing translation for the 'Refetch Interval' label in Search Settings, so it now displays correctly in non-English languages. Thanks to [@&#8203;RajPrakash681](https://github.com/RajPrakash681). - Fixed missing translation for the 'namespace' placeholder in Cluster Settings, ensuring it appears correctly in non-English locales. Thanks to [@&#8203;RajPrakash681](https://github.com/RajPrakash681). - Removed an unnecessary useMemo in CustomResourceInstancesList that was re-running every render, fixing a stale dependency suppression and adding test coverage. Thanks to [@&#8203;WasThatRudy](https://github.com/WasThatRudy). - Fixed unstable React reconciliation in the ContainerInfo ports list by moving the key prop to the top-level mapped element, preventing unnecessary re-renders. Thanks to [@&#8203;gouravi19](https://github.com/gouravi19). - Improved cluster error handling in the home view: unavailable or unauthenticated clusters now show clear status labels instead of raw errors like Bad Gateway. Thanks to [@&#8203;harrshita123](https://github.com/harrshita123). - Fixed a watch subscription leak in useKubeObjectList for cluster-scoped resources like Nodes and ClusterRoles when a cluster is deselected. Thanks to [@&#8203;Sreejesh06](https://github.com/Sreejesh06). - Helm repository add/update requests with missing required fields like name or url now correctly return 400 Bad Request instead of a 500 error. Thanks to [@&#8203;harrshita123](https://github.com/harrshita123). - Fixed the ClusterChooser toolbar label to correctly show the selected cluster name instead of falling back to the wrong route value. Thanks to [@&#8203;harrshita123](https://github.com/harrshita123). - Added a 30-second timeout to the externalproxy HTTP client, preventing goroutine leaks and server hangs from slow or unresponsive external services. Thanks to [@&#8203;ayushmaan-16](https://github.com/ayushmaan-16). - Fixed ArrowUp keyboard navigation in ClusterChooserPopup so pressing it on the first item now correctly wraps around to the last item instead of breaking navigation. Thanks to [@&#8203;harrshita123](https://github.com/harrshita123). - Fixed insufficient WCAG contrast on the global search shortcut hint by using an explicit theme color instead of opacity, improving accessibility. Thanks to [@&#8203;ChandanKT-git](https://github.com/ChandanKT-git). Also thanks to [@&#8203;illume](https://github.com/illume) for reporting the issue. - Refactored GetDefaultKubeConfigPath to return an error instead of calling os.Exit, allowing callers to handle failures gracefully. Thanks to [@&#8203;YadavAkhileshh](https://github.com/YadavAkhileshh). - Replaced deprecated trimLeft() with the ES2019 standard trimStart() in EditorDialog, eliminating use of a deprecated string method. Thanks to [@&#8203;YadavAkhileshh](https://github.com/YadavAkhileshh). - Table row count setting now rejects decimal inputs instead of silently truncating them, preventing unexpected pagination behavior. Thanks to [@&#8203;harrshita123](https://github.com/harrshita123). - Fixed resource map so a plugin node's custom detailsComponent fully replaces the default kube object details instead of both rendering simultaneously. Thanks to [@&#8203;mahmoudmagdy1-1](https://github.com/mahmoudmagdy1-1). - HTTP proxy responses are now streamed rather than fully buffered in memory, preventing OOM crashes and service disruption when proxying large responses. Thanks to [@&#8203;VijayabaskarR-06](https://github.com/VijayabaskarR-06). - Drain node status now accurately reports pod deletion failures instead of always showing success, giving operators reliable drain completion data. Thanks to [@&#8203;beep-boopp](https://github.com/beep-boopp). - Fixed EditorDialog not clearing error messages when using Undo Changes after entering invalid YAML, so the UI now resets correctly. Thanks to [@&#8203;YadavAkhileshh](https://github.com/YadavAkhileshh). - OAuth popup now properly removes event listeners when auth completes, the popup closes, or the component unmounts, preventing memory leaks. Thanks to [@&#8203;Sambhram1](https://github.com/Sambhram1). Also thanks to [@&#8203;Utkarshpandey0001](https://github.com/Utkarshpandey0001) for reporting the issue. - Added regression tests for EditorDialog's Undo Changes behavior to guard against parse errors reappearing after invalid YAML is reverted. Thanks to [@&#8203;Sambhram1](https://github.com/Sambhram1). Also thanks to [@&#8203;Vikaspal8923](https://github.com/Vikaspal8923) for reporting the issue. - Fixed a WebSocket subscription leak in the multiplexer where unmounting a hook before subscribe resolved left orphaned subscriptions. Thanks to [@&#8203;Utkarshpandey0001](https://github.com/Utkarshpandey0001). - Fixed a startup crash caused by malformed JSON in localStorage settings; Headlamp now falls back to defaults instead of getting stuck loading. Thanks to [@&#8203;Vikaspal8923](https://github.com/Vikaspal8923). - Fixed a stale closure bug in the TimeAgo component that caused displayed relative times to stop updating when the date prop changed. Thanks to [@&#8203;Utkarshpandey0001](https://github.com/Utkarshpandey0001). - External proxy now correctly forwards status codes and Content-Type headers, so the UI can accurately display errors from failed external requests. Thanks to [@&#8203;ayushmaan-16](https://github.com/ayushmaan-16). - Fixed a stale closure in PortForwardingList that silently swallowed port-forwarding errors and caused async state updates after component unmount. Thanks to [@&#8203;KumarADITHYA123](https://github.com/KumarADITHYA123). - Fixed an infinite polling loop and memory leak in NodeDetails when draining a node and navigating away, preventing potential runtime crashes. Thanks to [@&#8203;KumarADITHYA123](https://github.com/KumarADITHYA123). - Fixed swapped health icons in the project resources tab so error and warning statuses now display the correct icons. Thanks to [@&#8203;NAME-ASHWANIYADAV](https://github.com/NAME-ASHWANIYADAV). - Replaced the unsafe any onClick type with a proper React.MouseEventHandler type in NewProjectPopup, improving type safety. Thanks to [@&#8203;itvi-1234](https://github.com/itvi-1234). - OIDC token refresh now applies the configured issuer override, fixing authentication failures for providers where the discovery URL and issuer differ. Thanks to [@&#8203;m-wack](https://github.com/m-wack). - Reduced global lock contention in Kubernetes clientset initialization, allowing concurrent authorization requests to proceed without blocking. Thanks to [@&#8203;Joshna907](https://github.com/Joshna907). - WebSocket multiplexer now isolates per-request failures so malformed messages, token errors, or cluster dial issues no longer drop the entire client session. Thanks to [@&#8203;PrakharJain345](https://github.com/PrakharJain345). Also thanks to [@&#8203;prasanna-baskar-igt](https://github.com/prasanna-baskar-igt) for reporting the issue. - Fixed Windows path handling in the backend by using URL-safe joins for request paths and OS-aware paths for filesystem access, resolving Windows test failures. Thanks to [@&#8203;PrakharJain345](https://github.com/PrakharJain345). - Fixed React hook dependency violations in the Home component and resolved an empty heading accessibility issue in the Cluster Chooser dialog. Thanks to [@&#8203;PrakharJain345](https://github.com/PrakharJain345). - Port-forward and WebSocket proxying now work correctly when the kubeconfig server URL includes a path prefix, ensuring compatibility with reverse-proxy setups. Thanks to [@&#8203;plopoyop](https://github.com/plopoyop). - The pod log Prettify toggle preference is now saved to localStorage so it persists across page reloads and sessions. Thanks to [@&#8203;Athang69](https://github.com/Athang69). Also thanks to [@&#8203;LucienLallier](https://github.com/LucienLallier) for reporting the issue. - Fixed App Catalog bearer token extraction and a route key collision that silently broke the feature in default in-cluster deployments. Thanks to [@&#8203;Athang69](https://github.com/Athang69). Also thanks to [@&#8203;v0lkan](https://github.com/v0lkan) for reporting the issue. - Refactored ClusterSettings to centralize state via a new useClusterSettings hook, removing duplicated load/store logic across child components. Thanks to [@&#8203;sniok](https://github.com/sniok). - Resource editor now uses JSON Patch instead of PUT, eliminating 409 Conflict errors when saving frequently-updated resources like HPAs. Thanks to [@&#8203;gambtho](https://github.com/gambtho). Also thanks to [@&#8203;hitsaurabhraj](https://github.com/hitsaurabhraj) for reporting the issue. - SimpleTable now correctly announces when no data is present, improving screen reader accessibility for empty tables. Thanks to [@&#8203;illume](https://github.com/illume). - Fixed SVG type declarations and TSC errors in example plugins, and enabled useClustersConf so plugin developers can use and test it in examples. Thanks to [@&#8203;illume](https://github.com/illume). - Fixed an infinite re-render in useKubeObjectList when the namespace was an empty string. Thanks to [@&#8203;ashu8912](https://github.com/ashu8912). - Refactored how request watching is stopped in useKubeObjectList, ensuring watch requests are reliably cancelled. Thanks to [@&#8203;sniok](https://github.com/sniok). - Fixed stateless cluster handling: corrected stale state and the auth header in fetchStatelessClusterKubeConfigs, made setCluster and parseKubeConfig send the kubeconfigs array, and hardened backend stateless context key generation and parse handling, with added e2e regression coverage. Thanks to [@&#8203;illume](https://github.com/illume). #### 🔒 Security - Bumped fast, brace-expansion, ws, containerd, and qs across app, frontend, and backend for security and maintenance updates. Thanks to [@&#8203;skoeva](https://github.com/skoeva). #### 💻 Development - Added comprehensive unit tests for the portforward package, covering HTTP handlers and helper functions that previously had zero CI coverage. Thanks to [@&#8203;NAME-ASHWANIYADAV](https://github.com/NAME-ASHWANIYADAV). - Bumped the pinned gcb-docker-gcloud Cloud Build image digest to fix the failing post-headlamp-push-images Prow job. Thanks to [@&#8203;skoeva](https://github.com/skoeva). - Updated the bundled prometheus, app-catalog, and plugin-catalog plugins to their latest versions. Thanks to [@&#8203;sniok](https://github.com/sniok). - Added unit tests for custom cluster name parsing from the headlamp_info extension to ensure context names are correctly overridden. Thanks to [@&#8203;CygnusMaximillian](https://github.com/CygnusMaximillian). - Improved French glossary translations by filling in missing entries and aligning Kubernetes-related terms with standard French usage. Thanks to [@&#8203;codeurluce](https://github.com/codeurluce). - Updated the French translation of 'Open an Issue' to better convey that issues cover bugs, feature requests, and questions, not just incidents. Thanks to [@&#8203;codeurluce](https://github.com/codeurluce). - Bumped the yaml package from 2.8.3 to 2.9.0 to pick up upstream bug fixes and improvements. Thanks to [@&#8203;vyncent-t](https://github.com/vyncent-t). - Refreshed outdated Storybook snapshots so frontend tests pass reliably on main. Thanks to [@&#8203;skoeva](https://github.com/skoeva). - Backend Kubernetes Go dependencies upgraded from v0.35.1 to v0.35.3 alongside related modules, keeping the backend secure, up to date, and lint-clean. Thanks to [@&#8203;kahirokunn](https://github.com/kahirokunn). - Replaced nested array iterations with a Map-based lookup for recent cluster resolution, improving re-render performance with large cluster lists. Thanks to [@&#8203;DashratRajpurohit](https://github.com/DashratRajpurohit). - Added a 256-character input guard to FuzzSanitizeClusterName to skip pathological inputs that previously caused CI timeout failures. Thanks to [@&#8203;Athang69](https://github.com/Athang69). - GetDefaultKubeConfigPath() now returns an error instead of calling os.Exit(1), giving callers proper control over failures and making the function testable. Thanks to [@&#8203;NAME-ASHWANIYADAV](https://github.com/NAME-ASHWANIYADAV). - Replaced an uncommon Unicode glyph in Ingress list and detail views with a widely supported alternative, improving cross-platform rendering. Thanks to [@&#8203;dabico](https://github.com/dabico). - Updated dependencies including hono, postcss, fast-uri, langsmith, ip-address, and express-rate-limit across app and plugin packages. Thanks to [@&#8203;skoeva](https://github.com/skoeva). - Added 7 unit tests for NewProjectPopup covering rendering, form validation, and step navigation to prevent project creation regressions. Thanks to [@&#8203;itvi-1234](https://github.com/itvi-1234). - Added 5 unit tests for ProjectDeleteDialog covering rendering, cancel flow, and label removal to prevent regressions in project deletion. Thanks to [@&#8203;itvi-1234](https://github.com/itvi-1234). - Renamed four pure-logic files in advancedSearch from .tsx to .ts, correctly reflecting that they contain no JSX. Thanks to [@&#8203;itvi-1234](https://github.com/itvi-1234). - Extracted RefreshAndSetToken from headlamp.go into the auth package with comprehensive tests, improving backend code organization and testability. Thanks to [@&#8203;skoeva](https://github.com/skoeva). - Added Loading, Empty, Error, and LongName Storybook stories to the DaemonSet list, enabling complete visual state testing beyond the happy path. Thanks to [@&#8203;sudhidutta7694](https://github.com/sudhidutta7694). - Fixed a missing route dependency in RouteSwitcher.stories so changing the route arg in Storybook controls now correctly updates the redux store. Thanks to [@&#8203;WasThatRudy](https://github.com/WasThatRudy). - Added a verify-build check to confirm headlamp-server is properly terminated when the Electron app closes on Linux, macOS, and Windows. Thanks to [@&#8203;illume](https://github.com/illume). ##### Added Loading, Empty, Error, and LongName Storybook stories to the DaemonSet list <img width="1919" height="736" alt="DaemonSet list Storybook stories for Loading, Empty, Error, and LongName states" src="https://github.com/user-attachments/assets/2dab4cac-bcf8-4429-a72c-c34d06d65829" /> #### 🧩 Shipped Plugins - Updated prometheus to [version 0.9.0](https://github.com/headlamp-k8s/plugins/releases/tag/prometheus-0.9.0) - Updated plugin-catalog to [version 0.4.4](https://github.com/headlamp-k8s/plugins/releases/tag/plugin-catalog-0.4.4) - Updated app-catalog to [version 0.9.0](https://github.com/headlamp-k8s/plugins/releases/tag/app-catalog-0.9.0) #### 📖 Documentation - Updated Traefik Middleware apiVersion in the basic auth docs to traefik.io/v1alpha1, replacing the deprecated traefik.containo.us/v1alpha1. Thanks to [@&#8203;skoeva](https://github.com/skoeva). - Updated Node.js, npm, and Go version requirements in contributor docs to match the actual versions declared in package.json and go.mod. Thanks to [@&#8203;gravi19](https://github.com/gravi19). Also thanks to [@&#8203;harrshita123](https://github.com/harrshita123) for reporting the issue. <!-- end-release-notes --> **Container image:** :whale: [ghcr.io/headlamp-k8s/headlamp:v0.43.0](https://github.com/kubernetes-sigs/headlamp/pkgs/container/headlamp) **Desktop Apps:** :penguin: [Flatpak / Linux (AMD64)](https://flathub.org/apps/details/io.kinvolk.Headlamp) :penguin: Linux AppImage [AMD64](https://github.com/kubernetes-sigs/headlamp/releases/download/v0.43.0/Headlamp-0.43.0-linux-x64.AppImage), [ARM64](https://github.com/kubernetes-sigs/headlamp/releases/download/v0.43.0/Headlamp-0.43.0-linux-arm64.AppImage), [ARMv7l](https://github.com/kubernetes-sigs/headlamp/releases/download/v0.43.0/Headlamp-0.43.0-linux-armv7l.AppImage) :penguin: Linux Tarball [AMD64](https://github.com/kubernetes-sigs/headlamp/releases/download/v0.43.0/Headlamp-0.43.0-linux-x64.tar.gz), [ARM64](https://github.com/kubernetes-sigs/headlamp/releases/download/v0.43.0/Headlamp-0.43.0-linux-arm64.tar.gz), [ARMv7l](https://github.com/kubernetes-sigs/headlamp/releases/download/v0.43.0/Headlamp-0.43.0-linux-armv7l.tar.gz) :penguin: Debian / Linux [AMD64](https://github.com/kubernetes-sigs/headlamp/releases/download/v0.43.0/headlamp_0.43.0-1_amd64.deb) :green_apple: [Mac (AMD64)](https://github.com/kubernetes-sigs/headlamp/releases/download/v0.43.0/Headlamp-0.43.0-mac-x64.dmg) :green_apple: [Mac (ARM/M1)](https://github.com/kubernetes-sigs/headlamp/releases/download/v0.43.0/Headlamp-0.43.0-mac-arm64.dmg) :blue_square: [Windows (AMD64)](https://github.com/kubernetes-sigs/headlamp/releases/download/v0.43.0/Headlamp-0.43.0-win-x64.exe), [ARM64](https://github.com/kubernetes-sigs/headlamp/releases/download/v0.43.0/Headlamp-0.43.0-win-arm64.exe) ### [`v0.42.0`](https://github.com/kubernetes-sigs/headlamp/releases/tag/v0.42.0): 0.42.0 [Compare Source](https://github.com/kubernetes-sigs/headlamp/compare/v0.41.0...v0.42.0) ### Hitch hikers guide to Headlamp 0.42.0 Deep-link support was added for pod terminals (?view=exec) and log views (?view=logs), letting users bookmark or share direct links to specific UI states. Resources can now be searched by label in all list views, the Log Viewer gains a severity filter dropdown, and a delete button has been added directly to the plugins list. Node Details received two new sections for pod capacity usage and resource allocation, and the Resource Map now renders status badges on plugin-provided nodes and includes previously missing configuration resources. GRPCRoute details reach full parity with HTTPRoute, and a guided form-based resource creation UI (starting with Pods) is now available alongside the YAML editor. On the reliability side, a silent cache desync that caused permanently stale cluster data was fixed, along with a lock-order inversion deadlock that could freeze WebSocket connections under load, and a wave of React hooks rule violations across more than a dozen frontend components. Several backend panics were fixed in port-forwarding, kubeconfig parsing, cache key generation, and Helm chart type handling, alongside debounced log aggregation to prevent UI freezes in All Pods mode. Security hardening includes path traversal prevention in the service proxy and dependency bumps. #### ✨ Enhancements (part 1) | Enhancements | | | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | Added deep-link support for pod exec via `?view=exec` query parameter, letting users bookmark or share direct links to open a terminal into a specific pod. | Thanks to [@&#8203;justinas-wix](https://github.com/justinas-wix). [#&#8203;4941](https://github.com/kubernetes-sigs/headlamp/issues/4941) | | Added a hidden 'labels' column to all resource list views so users can search resources by label (e.g. `app=test`) using the existing search bar. | Thanks to [@&#8203;sniok](https://github.com/sniok). Also thanks to [@&#8203;illume](https://github.com/illume) for reporting the issue. [#&#8203;5035](https://github.com/kubernetes-sigs/headlamp/issues/5035) | | Resource map graph nodes now support optional status metadata, allowing plugin-provided nodes to display warning and error badges like built-in resources. | Thanks to [@&#8203;mahmoudmagdy1-1](https://github.com/mahmoudmagdy1-1). [#&#8203;5349](https://github.com/kubernetes-sigs/headlamp/issues/5349) | | Added a pod capacity usage tile to the node details view so users can see how many pods are scheduled versus the node's allocatable pod limit. | Thanks to [@&#8203;Vikaspal8923](https://github.com/Vikaspal8923). Also thanks to [@&#8203;jimmyjones2](https://github.com/jimmyjones2) for reporting the issue. [#&#8203;5039](https://github.com/kubernetes-sigs/headlamp/issues/5039) | | Extended `a8r.io` annotation support from Services to all Kubernetes resources, letting users see human-readable service discovery metadata on any annotated resource. | Thanks to [@&#8203;mastermaxx03](https://github.com/mastermaxx03). [#&#8203;5007](https://github.com/kubernetes-sigs/headlamp/issues/5007) | | Added a severity filter dropdown to the Log Viewer, letting users quickly filter logs by level (ERROR, WARN, INFO, DEBUG) to cut through noisy streams. | Thanks to [@&#8203;Utkarshpandey0001](https://github.com/Utkarshpandey0001). [#&#8203;5338](https://github.com/kubernetes-sigs/headlamp/issues/5338) | | Added a delete button directly to the plugins list page, so users can remove plugins without navigating to the detail page first. | Thanks to [@&#8203;rickbrouwer](https://github.com/rickbrouwer). [#&#8203;5314](https://github.com/kubernetes-sigs/headlamp/issues/5314) | | Added ?view=logs deep-link support on Deployment, ReplicaSet, DaemonSet, and StatefulSet detail pages, letting users open the logs view directly from a URL. | Thanks to [@&#8203;bhat-ganesh](https://github.com/bhat-ganesh). [#&#8203;5312](https://github.com/kubernetes-sigs/headlamp/issues/5312) | | Added missing configuration resources to the Resource Map graph so they are now fully visible in the Configuration group. | Thanks to [@&#8203;vishnukothakapu](https://github.com/vishnukothakapu). [#&#8203;5223](https://github.com/kubernetes-sigs/headlamp/issues/5223) | ##### Added a hidden 'labels' column to all resource list views so users can search resources by label (e.g. `app=test`) using the existing search bar. <img width="1361" height="471" alt="frontend: ResourceTable: Add new 'labels' column to all list views to allow searching by label" src="https://github.com/user-attachments/assets/81e57f3f-5124-41e2-9e81-b68b31bc6bc8" /> ##### Added a delete button directly to the plugins list page, so users can remove plugins without navigating to the detail page first. <img width="1556" height="347" alt="frontend: Add delete button to plugin list" src="https://github.com/user-attachments/assets/58dc151b-b211-4a00-bebb-71e3e43f7875" /> ##### Added a guided form-based UI for creating Kubernetes resources (starting with Pods), accessible from the sidebar and Pod list page alongside the existing YAML editor workflow. <img width="2104" height="1021" alt="frontend: CreateResourceForm: Add resource form create feature and CreateResourceForm" src="https://github.com/user-attachments/assets/1c871ccd-8d59-4748-89f1-f8934df991d6" /> <br><br> <br><br> #### ✨ Enhancements (part 2) | Enhancements | | | :------------------------------------------------------------------------------------------------------------------------------------------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | Added ephemeral storage usage chart to the Node Details view, giving users visibility into ephemeral storage consumption alongside other node stats. | Thanks to [@&#8203;Vikaspal8923](https://github.com/Vikaspal8923). Also thanks to [@&#8203;jimmyjones2](https://github.com/jimmyjones2) for reporting the issue. [#&#8203;5169](https://github.com/kubernetes-sigs/headlamp/issues/5169) | | Added a 'Review changes' tab to the resource editor dialog so users can diff the original manifest against their edits before applying. | Thanks to [@&#8203;Vikaspal8923](https://github.com/Vikaspal8923). [#&#8203;5018](https://github.com/kubernetes-sigs/headlamp/issues/5018) | | Added a background janitor to evict expired Kubernetes clientsets, fixing an unbounded memory leak that could cause OOM crashes on busy clusters. | Thanks to [@&#8203;Joshna907](https://github.com/Joshna907). [#&#8203;5286](https://github.com/kubernetes-sigs/headlamp/issues/5286) | | Wrapped the `Reconnect` button label in `LogViewer` with the translation function and added the key to all 12 locale files, enabling full i18n support. | Thanks to [@&#8203;NAME-ASHWANIYADAV](https://github.com/NAME-ASHWANIYADAV). [#&#8203;5176](https://github.com/kubernetes-sigs/headlamp/issues/5176) | | GRPCRoute details view now shows rules, hostnames, matches, backendRefs, and filters, bringing it to full parity with HTTPRoute details. | Thanks to [@&#8203;NAME-ASHWANIYADAV](https://github.com/NAME-ASHWANIYADAV). [#&#8203;5174](https://github.com/kubernetes-sigs/headlamp/issues/5174) | ##### Resource map graph nodes now support optional status metadata, allowing plugin-provided nodes to display warning and error badges like built-in resources. <img width="1800" height="844" alt="docs: frontend: resourceMap: Add status support for map nodes" src="https://github.com/user-attachments/assets/1465f71a-e020-49f4-96d0-ac57427f398a" /> ##### Added ephemeral storage usage chart to the Node Details view, giving users visibility into ephemeral storage consumption alongside other node stats. <img width="3072" height="1728" alt="Screenshot from 2026-04-20 14-32-54" src="https://github.com/user-attachments/assets/5e5cb349-00e2-45f1-8b88-51d752acd880" /> ##### Added a download YAML button to the resource table, letting users export any resource manifest directly from the table view. <img width="3072" height="1728" alt="Screenshot from 2026-04-12 19-27-27" src="https://github.com/user-attachments/assets/c339986b-cb9d-4c91-a2ad-e90add022e97" /> ##### Improved global search UX by adding a clear button to the search input and showing a pointer cursor on hover over search results. <img width="2495" height="1390" alt="Screenshot from 2026-03-25 13-18-28" src="https://github.com/user-attachments/assets/bcac7e08-b364-4f2c-bbb0-ff4092fcbe03" /> <br><br> <br><br> #### ✨ Enhancements (part 3) | Enhancements | | | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Added a toast notification when port-forwarding fails so users are explicitly informed instead of errors being silently logged to the console. | Thanks to [@&#8203;itvi-1234](https://github.com/itvi-1234). [#&#8203;5145](https://github.com/kubernetes-sigs/headlamp/issues/5145) | | Added a download YAML button to the resource table, letting users export any resource manifest directly from the table view. | Thanks to [@&#8203;Vikaspal8923](https://github.com/Vikaspal8923). [#&#8203;5126](https://github.com/kubernetes-sigs/headlamp/issues/5126) | | Added UI support for the Kubernetes VolumeAttributesClass resource in the Storage section, including list and detail views. | Thanks to [@&#8203;Vikaspal8923](https://github.com/Vikaspal8923). [#&#8203;5119](https://github.com/kubernetes-sigs/headlamp/issues/5119) | | Added `service.extraServicePorts` and matching Ingress backend support to the Helm chart, allowing sidecar containers to be exposed without a separate Service resource. | Thanks to [@&#8203;Soli0222](https://github.com/Soli0222). [#&#8203;5078](https://github.com/kubernetes-sigs/headlamp/issues/5078) | | Added a Resource Allocation section to Node Details showing total CPU/Memory requests, limits, and their percentage of node capacity alongside existing usage metrics. | Thanks to [@&#8203;itvi-1234](https://github.com/itvi-1234). [#&#8203;5048](https://github.com/kubernetes-sigs/headlamp/issues/5048) | | Added a guided form-based UI for creating Kubernetes resources (starting with Pods), accessible from the sidebar and Pod list page alongside the existing YAML editor workflow. | Thanks to [@&#8203;vyncent-t](https://github.com/vyncent-t). [#&#8203;5044](https://github.com/kubernetes-sigs/headlamp/issues/5044) | | Container port names are now displayed alongside protocol and port number in the containers list, providing more complete port information at a glance. | Thanks to [@&#8203;itvi-1234](https://github.com/itvi-1234). Also thanks to [@&#8203;trashhead](https://github.com/trashhead) for reporting the issue. [#&#8203;4956](https://github.com/kubernetes-sigs/headlamp/issues/4956) | ##### Added a pod capacity usage tile to the node details view so users can see how many pods are scheduled versus the node's allocatable pod limit. <img width="3066" height="1535" alt="Screenshot from 2026-04-02 23-21-10" src="https://github.com/user-attachments/assets/5ab9d7cc-4621-4b4b-bbc7-c1868bd4b9c2" /> ##### Added a 'Review changes' tab to the resource editor dialog so users can diff the original manifest against their edits before applying. <img width="3071" height="1555" alt="frontend: EditorDialog :add yaml diff view in editor to compare original manifest against edited" src="https://github.com/user-attachments/assets/0b197298-e8f5-4045-85e4-92113d6397dc" /> ##### Added UI support for the Kubernetes VolumeAttributesClass resource in the Storage section, including list and detail views. <img width="3072" height="1728" alt="Screenshot from 2026-04-11 13-59-36" src="https://github.com/user-attachments/assets/b652251d-1df3-40c4-8f79-1c1f665fd3a9" /> ##### Container port names are now displayed alongside protocol and port number in the containers list, providing more complete port information at a glance. <img width="761" height="740" alt="frontend:Show container port name if available" src="https://github.com/user-attachments/assets/a352f8ab-a631-48e4-9cfe-b0fc97e0d02a" /> <br><br> <br><br> #### ✨ Enhancements (part 4) | Enhancements | | | :-------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Aligned frontend duration/age formatting with Kubernetes apimachinery logic, ensuring consistent age display matching kubectl behavior. | Thanks to [@&#8203;ChayanDass](https://github.com/ChayanDass). Also thanks to [@&#8203;joaquimrocha](https://github.com/joaquimrocha) for reporting the issue. [#&#8203;4931](https://github.com/kubernetes-sigs/headlamp/issues/4931) | | Improved global search UX by adding a clear button to the search input and showing a pointer cursor on hover over search results. | Thanks to [@&#8203;Vikaspal8923](https://github.com/Vikaspal8923). [#&#8203;4965](https://github.com/kubernetes-sigs/headlamp/issues/4965) | ##### Extended `a8r.io` annotation support from Services to all Kubernetes resources, letting users see human-readable service discovery metadata on any annotated resource. <img width="2880" height="1130" alt="frontend: App: resource: Extend a8r.io annotation support to all Kubernetes resources" src="https://github.com/user-attachments/assets/9a7b1e3d-36e4-4cb6-a141-8e24d45404fe" /> ##### Added a Resource Allocation section to Node Details showing total CPU/Memory requests, limits, and their percentage of node capacity alongside existing usage metrics. <img width="1803" height="964" alt="frontend: nodes: Add resource allocation summary in Node Details" src="https://github.com/user-attachments/assets/feeb4036-3bdd-4dc1-8e84-61ba0d4749f3" /> ##### Aligned frontend duration/age formatting with Kubernetes apimachinery logic, ensuring consistent age display matching kubectl behavior. <img width="1695" height="847" alt="frontend: align duration formatting with apimachinery logic" src="https://github.com/user-attachments/assets/fec83d4b-b923-47d6-a19c-e10b1cf7ce7a" /> <br><br> <br><br> #### 🐞 Bug fixes (part 1) | Bug fixes | | | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Fixed pod status icon remaining stuck on warning in list view after a pod becomes healthy, without requiring a page refresh. | Thanks to [@&#8203;nidhi-9900](https://github.com/nidhi-9900). Also thanks to [@&#8203;nullzone](https://github.com/nullzone) for reporting the issue. [#&#8203;5059](https://github.com/kubernetes-sigs/headlamp/issues/5059) | | Fixed performance regressions in the resource map by properly memoizing values to avoid redundant graph rebuilds, improving responsiveness on larger clusters. | Thanks to [@&#8203;sniok](https://github.com/sniok). Also thanks to [@&#8203;itpick](https://github.com/itpick) for reporting the issue. [#&#8203;4961](https://github.com/kubernetes-sigs/headlamp/issues/4961) | | Fixed a silent cache desync bug where a dead watcher locked the registry and prevented cache invalidation, causing the UI to show permanently stale cluster data. | Thanks to [@&#8203;KumarADITHYA123](https://github.com/KumarADITHYA123). [#&#8203;5163](https://github.com/kubernetes-sigs/headlamp/issues/5163) | | Removed the `--no-quarantine` flag from the macOS Homebrew installation command to reflect the current recommended install process. | Thanks to [@&#8203;saivenkateshi](https://github.com/saivenkateshi). Also thanks to [@&#8203;hyorimlee](https://github.com/hyorimlee) for reporting the issue. [#&#8203;4943](https://github.com/kubernetes-sigs/headlamp/issues/4943) | | Debounced log aggregation in All Pods mode to eliminate UI freezes when streaming large volumes of logs. | Thanks to [@&#8203;Utkarshpandey0001](https://github.com/Utkarshpandey0001). [#&#8203;5320](https://github.com/kubernetes-sigs/headlamp/issues/5320) | | Fixed react-hooks/rules-of-hooks violations in secret/Details.tsx by extracting the inline section helper into a proper React component, preventing potential hook-related bugs. | Thanks to [@&#8203;iashutoshyadav](https://github.com/iashutoshyadav). Also thanks to [@&#8203;illume](https://github.com/illume) for reporting the issue. [#&#8203;5266](https://github.com/kubernetes-sigs/headlamp/issues/5266) | | Fixed missing data columns (Status, Replicas, etc.) in CustomResourceDetails for core resources whose apiVersion contains no slash, such as Nodes. | Thanks to [@&#8203;Joshna907](https://github.com/Joshna907). [#&#8203;5259](https://github.com/kubernetes-sigs/headlamp/issues/5259) | | Fixed react-hooks/rules-of-hooks violations in GraphView\.tsx by moving hook calls unconditionally into function bodies, preventing potential rendering bugs. | Thanks to [@&#8203;iashutoshyadav](https://github.com/iashutoshyadav). Also thanks to [@&#8203;illume](https://github.com/illume) for reporting the issue. [#&#8203;5252](https://github.com/kubernetes-sigs/headlamp/issues/5252) | | Fixed react-hooks/rules-of-hooks violations in configmap/Details.tsx by extracting the inline section helper into a proper React component, also resolving a variable shadowing issue in map callbacks. | Thanks to [@&#8203;jedbillyb](https://github.com/jedbillyb). Also thanks to [@&#8203;illume](https://github.com/illume) for reporting the issue. [#&#8203;5203](https://github.com/kubernetes-sigs/headlamp/issues/5203) | | Fixed a React hooks violation in VolumeDetails where useTranslation was called after an early return, preventing potential runtime errors. | Thanks to [@&#8203;itvi-1234](https://github.com/itvi-1234). Also thanks to [@&#8203;illume](https://github.com/illume) for reporting the issue. [#&#8203;5201](https://github.com/kubernetes-sigs/headlamp/issues/5201) | <br><br> <br><br> #### 🐞 Bug fixes (part 2) | Bug fixes | | | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | Replaced fmt.Printf calls with structured logging in ListPlugins, improving log consistency and simplifying plugin-related test reliability. | Thanks to [@&#8203;NAME-ASHWANIYADAV](https://github.com/NAME-ASHWANIYADAV). [#&#8203;5072](https://github.com/kubernetes-sigs/headlamp/issues/5072) | | Fixed a crash on the Namespace details page when ResourceQuota status is absent immediately after creation, preventing blank or broken quota displays. | Thanks to [@&#8203;Vikaspal8923](https://github.com/Vikaspal8923). [#&#8203;4990](https://github.com/kubernetes-sigs/headlamp/issues/4990) | | Fixed heading hierarchy in the ReleaseNotes story so h3 elements are always preceded by proper h1/h2 ancestors, ensuring correct document structure. | Thanks to [@&#8203;iashutoshyadav](https://github.com/iashutoshyadav). Also thanks to [@&#8203;illume](https://github.com/illume) for reporting the issue. [#&#8203;5356](https://github.com/kubernetes-sigs/headlamp/issues/5356) | | Added missing `aria-controls` attribute to EditorDialog action buttons, improving accessibility for assistive technology users. | Thanks to [@&#8203;Utkarshpandey0001](https://github.com/Utkarshpandey0001). [#&#8203;5355](https://github.com/kubernetes-sigs/headlamp/issues/5355) | | Fixed a nil-pointer panic in port-forwarding that could crash the backend when a port-forward process exited gracefully and its error channel was closed. | Thanks to [@&#8203;Joshna907](https://github.com/Joshna907). [#&#8203;5342](https://github.com/kubernetes-sigs/headlamp/issues/5342) | | Resource map breadcrumbs now pass `apiGroup` alongside `kind` to icon lookups, so resources like `apps/ReplicaSet` display their correct icon instead of the generic cube. | Thanks to [@&#8203;mahmoudmagdy1-1](https://github.com/mahmoudmagdy1-1). [#&#8203;5332](https://github.com/kubernetes-sigs/headlamp/issues/5332) | | Fixed the "Use evict for pod deletion" setting not persisting as disabled across reloads by replacing a logical OR with nullish coalescing so an explicit `false` is correctly saved. | Thanks to [@&#8203;Utkarshpandey0001](https://github.com/Utkarshpandey0001). [#&#8203;5328](https://github.com/kubernetes-sigs/headlamp/issues/5328) | | Fixed orphaned goroutines and lingering port listeners in the port-forwarding module, preventing memory leaks and stuck local ports after a port-forward is deleted or times out. | Thanks to [@&#8203;Joshna907](https://github.com/Joshna907). [#&#8203;5316](https://github.com/kubernetes-sigs/headlamp/issues/5316) | | Fixed a lock-order inversion deadlock in the multiplexer that could freeze WebSocket connections under concurrent load. | Thanks to [@&#8203;KumarADITHYA123](https://github.com/KumarADITHYA123). [#&#8203;5307](https://github.com/kubernetes-sigs/headlamp/issues/5307) | <br><br> <br><br> #### 🐞 Bug fixes (part 3) | Bug fixes | | | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | Fixed corrupted Kubernetes cache keys caused by incorrect parsing of internal URLs, preventing cache pollution and key collisions. | Thanks to [@&#8203;Joshna907](https://github.com/Joshna907). [#&#8203;5292](https://github.com/kubernetes-sigs/headlamp/issues/5292) | | Silent errors in advanced search query parsing and filter evaluation are now logged via console.debug, making failures easier to diagnose. | Thanks to [@&#8203;NAME-ASHWANIYADAV](https://github.com/NAME-ASHWANIYADAV). [#&#8203;5284](https://github.com/kubernetes-sigs/headlamp/issues/5284) | | Fixed a double-response bug in InstallRelease where execution continued after sending a 500 error, preventing corrupted HTTP responses. | Thanks to [@&#8203;NAME-ASHWANIYADAV](https://github.com/NAME-ASHWANIYADAV). [#&#8203;5277](https://github.com/kubernetes-sigs/headlamp/issues/5277) | | Fixed a crash (white screen) caused by malformed JWTs during decoding, improving stability for plugins using the getUserInfo utility. | Thanks to [@&#8203;Joshna907](https://github.com/Joshna907). [#&#8203;5270](https://github.com/kubernetes-sigs/headlamp/issues/5270) | | Fixed `npm run star` so developers can load Headlamp in dev mode on Windows without repeated reloads or long waits. | Thanks to [@&#8203;illume](https://github.com/illume). [#&#8203;5256](https://github.com/kubernetes-sigs/headlamp/issues/5256) | | Fixed a React hooks-rules violation in useKubeObject where WebSocket hooks were called conditionally, ensuring reliable WebSocket behaviour regardless of feature flags. | Thanks to [@&#8203;aabhinavvvvvvv](https://github.com/aabhinavvvvvvv). Also thanks to [@&#8203;illume](https://github.com/illume) for reporting the issue. [#&#8203;5253](https://github.com/kubernetes-sigs/headlamp/issues/5253) | | Fixed a React hooks-rules violation in the router by extracting an inline arrow function into a named component, preventing unpredictable hook behaviour during routing. | Thanks to [@&#8203;aabhinavvvvvvv](https://github.com/aabhinavvvvvvv). Also thanks to [@&#8203;illume](https://github.com/illume) for reporting the issue. [#&#8203;5251](https://github.com/kubernetes-sigs/headlamp/issues/5251) | | Fixed a React hooks-rules violation in usePrefersColorScheme by moving useState and useEffect above the early return, ensuring consistent color-scheme detection. | Thanks to [@&#8203;aabhinavvvvvvv](https://github.com/aabhinavvvvvvv). Also thanks to [@&#8203;illume](https://github.com/illume) for reporting the issue. [#&#8203;5250](https://github.com/kubernetes-sigs/headlamp/issues/5250) | | Fixed a React hooks-rules violation in useWatchKubeObjectLists by calling both sub-hooks unconditionally, preventing potential runtime errors from conditional hook calls. | Thanks to [@&#8203;aabhinavvvvvvv](https://github.com/aabhinavvvvvvv). Also thanks to [@&#8203;illume](https://github.com/illume) for reporting the issue. [#&#8203;5249](https://github.com/kubernetes-sigs/headlamp/issues/5249) | | Fixed the AuthChooser AnError Storybook story to always render a non-empty DialogTitle, eliminating an empty h1 accessibility issue. | Thanks to [@&#8203;iashutoshyadav](https://github.com/iashutoshyadav). Also thanks to [@&#8203;illume](https://github.com/illume) for reporting the issue. [#&#8203;5239](https://github.com/kubernetes-sigs/headlamp/issues/5239) | <br><br> <br><br> #### 🐞 Bug fixes (part 4) | Bug fixes | | | :------------------------------------------------------------------------------------------------------------------------------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | Fixed a fatal UI crash caused by malformed or empty sidebar data in browser localStorage during Redux state initialization. | Thanks to [@&#8203;Joshna907](https://github.com/Joshna907). [#&#8203;5235](https://github.com/kubernetes-sigs/headlamp/issues/5235) | | Fixed React hooks rule violations in the PortForward component that could cause unpredictable rendering behavior. | Thanks to [@&#8203;iashutoshyadav](https://github.com/iashutoshyadav). Also thanks to [@&#8203;illume](https://github.com/illume) for reporting the issue. [#&#8203;5231](https://github.com/kubernetes-sigs/headlamp/issues/5231) | | Pinned the `gcb-docker-gcloud` Cloud Build image by digest to prevent CI failures caused by garbage-collected tags. | Thanks to [@&#8203;skoeva](https://github.com/skoeva). [#&#8203;5229](https://github.com/kubernetes-sigs/headlamp/issues/5229) | | Fixed a server crash that occurred when installing or upgrading unsupported Helm chart types such as library charts. | Thanks to [@&#8203;KumarADITHYA123](https://github.com/KumarADITHYA123). [#&#8203;5217](https://github.com/kubernetes-sigs/headlamp/issues/5217) | | Fixed a backend panic in cache invalidation that crashed the server when a `GenerateKey` error was silently ignored on short API paths. | Thanks to [@&#8203;KumarADITHYA123](https://github.com/KumarADITHYA123). [#&#8203;5215](https://github.com/kubernetes-sigs/headlamp/issues/5215) | | Fixed React hooks rule violations in `CustomResourceListTable` where `useMemo` calls after an early return caused unpredictable rendering. | Thanks to [@&#8203;aabhinavvvvvvv](https://github.com/aabhinavvvvvvv). Also thanks to [@&#8203;illume](https://github.com/illume) for reporting the issue. [#&#8203;5213](https://github.com/kubernetes-sigs/headlamp/issues/5213) | | Renamed `withEnv` decorator to PascalCase in AppContainer stories, fixing rules-of-hooks ESLint violations. | Thanks to [@&#8203;jedbillyb](https://github.com/jedbillyb). Also thanks to [@&#8203;illume](https://github.com/illume) for reporting the issue. [#&#8203;5210](https://github.com/kubernetes-sigs/headlamp/issues/5210) | | Renamed story component functions to PascalCase in PluginSettingsDetails stories, resolving rules-of-hooks ESLint errors. | Thanks to [@&#8203;jedbillyb](https://github.com/jedbillyb). Also thanks to [@&#8203;illume](https://github.com/illume) for reporting the issue. [#&#8203;5209](https://github.com/kubernetes-sigs/headlamp/issues/5209) | | Moved `useCallback` before the early return in `DialogTitle` and added missing `focusTitle` dependency, fixing rules-of-hooks violations. | Thanks to [@&#8203;jedbillyb](https://github.com/jedbillyb). Also thanks to [@&#8203;illume](https://github.com/illume) for reporting the issue. [#&#8203;5208](https://github.com/kubernetes-sigs/headlamp/issues/5208) | | Moved all hook calls before the early return in `RollbackButton`, fixing rules-of-hooks violations and improving TypeScript type narrowing. | Thanks to [@&#8203;jedbillyb](https://github.com/jedbillyb). Also thanks to [@&#8203;illume](https://github.com/illume) for reporting the issue. [#&#8203;5206](https://github.com/kubernetes-sigs/headlamp/issues/5206) | <br><br> <br><br> #### 🐞 Bug fixes (part 5) | Bug fixes | | | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | Fixed and re-enabled a previously skipped multiplexer test, improving test suite reliability. | Thanks to [@&#8203;sniok](https://github.com/sniok). [#&#8203;5179](https://github.com/kubernetes-sigs/headlamp/issues/5179) | | Removed an unsafe `as any` TypeScript cast in VersionButton by providing an explicit generic type to `useQuery`, improving type safety. | Thanks to [@&#8203;itvi-1234](https://github.com/itvi-1234). [#&#8203;5164](https://github.com/kubernetes-sigs/headlamp/issues/5164) | | Fixed a backend panic crash in GetAPIGroup caused by index out of range errors when Kubernetes discovery paths were shortened or truncated. | Thanks to [@&#8203;KumarADITHYA123](https://github.com/KumarADITHYA123). [#&#8203;5161](https://github.com/kubernetes-sigs/headlamp/issues/5161) | | Fixed a bug where a stale global namespace filter could hide results in namespace-scoped views when no namespace filter should apply. | Thanks to [@&#8203;Vikaspal8923](https://github.com/Vikaspal8923). Also thanks to [@&#8203;jimmyjones2](https://github.com/jimmyjones2) for reporting the issue. [#&#8203;5157](https://github.com/kubernetes-sigs/headlamp/issues/5157) | | Fixed Helm repository and chart handler error behavior, including proper 404 responses on missing repos and safer lock error handling. | Thanks to [@&#8203;Athang69](https://github.com/Athang69). [#&#8203;5149](https://github.com/kubernetes-sigs/headlamp/issues/5149) | | Fixed Content-Type: application/json header being silently dropped in 7 Helm release API handlers, ensuring clients receive correct response metadata. | Thanks to [@&#8203;NAME-ASHWANIYADAV](https://github.com/NAME-ASHWANIYADAV). [#&#8203;5147](https://github.com/kubernetes-sigs/headlamp/issues/5147) | | Fixed a server panic caused by bare type assertions in kubeconfig parsing when processing malformed kubeconfig files. | Thanks to [@&#8203;KumarADITHYA123](https://github.com/KumarADITHYA123). [#&#8203;5138](https://github.com/kubernetes-sigs/headlamp/issues/5138) | | Added missing Pi and P memory unit support to normalizeUnit and corrected off-by-one multipliers for Ei and E, ensuring accurate Kubernetes quantity parsing. | Thanks to [@&#8203;KumarADITHYA123](https://github.com/KumarADITHYA123). [#&#8203;5135](https://github.com/kubernetes-sigs/headlamp/issues/5135) | | Fixed a bug in k8cache where Kubernetes resources older than 60 seconds silently skipped cache invalidation on Update or Delete, preventing stale data from being cleared. | Thanks to [@&#8203;KumarADITHYA123](https://github.com/KumarADITHYA123). [#&#8203;5130](https://github.com/kubernetes-sigs/headlamp/issues/5130) | | Removed debug console.log statements and fixed a typo in the frontend, keeping the production console clean. | Thanks to [@&#8203;NAME-ASHWANIYADAV](https://github.com/NAME-ASHWANIYADAV). [#&#8203;5129](https://github.com/kubernetes-sigs/headlamp/issues/5129) | <br><br> <br><br> #### 🐞 Bug fixes (part 6) | Bug fixes | | | :------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Removed an unnecessary debug console.log from the clusterRequests remove() function to keep the production console clean. | Thanks to [@&#8203;NAME-ASHWANIYADAV](https://github.com/NAME-ASHWANIYADAV). [#&#8203;5127](https://github.com/kubernetes-sigs/headlamp/issues/5127) | | Fixed backend linting on Windows with LF line endings and compatible Makefile targets, replaced deprecated fake clientset, and bumped helm/v3 to 3.20.2. | Thanks to [@&#8203;skoeva](https://github.com/skoeva). [#&#8203;5121](https://github.com/kubernetes-sigs/headlamp/issues/5121) | | Long cluster names in the Home page table now expand dynamically and show the full name on hover, improving readability. | Thanks to [@&#8203;vyncent-t](https://github.com/vyncent-t). Also thanks to [@&#8203;hpschry](https://github.com/hpschry) and [@&#8203;jimmyjones2](https://github.com/jimmyjones2) for reporting the issue. [#&#8203;5109](https://github.com/kubernetes-sigs/headlamp/issues/5109) | | Fixed resourceFieldRef env vars failing to resolve for admission-injected sidecar containers like istio-proxy, eliminating 'Container not found' errors. | Thanks to [@&#8203;itvi-1234](https://github.com/itvi-1234). Also thanks to [@&#8203;vmozghovyi](https://github.com/vmozghovyi) for reporting the issue. [#&#8203;5107](https://github.com/kubernetes-sigs/headlamp/issues/5107) | | Fixed helm route auth token handling to work unconditionally and added regression tests for helm auth and RouteSwitcher key uniqueness. | Thanks to [@&#8203;Athang69](https://github.com/Athang69). Also thanks to [@&#8203;v0lkan](https://github.com/v0lkan) for reporting the issue. [#&#8203;5105](https://github.com/kubernetes-sigs/headlamp/issues/5105) | | Replaced console.log with console.error in catch blocks so exceptions are correctly flagged in browser DevTools and log monitoring tools. | Thanks to [@&#8203;NAME-ASHWANIYADAV](https://github.com/NAME-ASHWANIYADAV). [#&#8203;5104](https://github.com/kubernetes-sigs/headlamp/issues/5104) | | Users now see an error notification when cluster deletion fails instead of silently receiving no feedback. | Thanks to [@&#8203;NAME-ASHWANIYADAV](https://github.com/NAME-ASHWANIYADAV). [#&#8203;5102](https://github.com/kubernetes-sigs/headlamp/issues/5102) | | Fixed the ResourceTable Name Search Storybook example so the search input is correctly prefilled and table filtering works as expected. | Thanks to [@&#8203;Vikaspal8923](https://github.com/Vikaspal8923). Also thanks to [@&#8203;sniok](https://github.com/sniok) for reporting the issue. [#&#8203;5100](https://github.com/kubernetes-sigs/headlamp/issues/5100) | | Updated npm dependencies via audit to address known vulnerabilities, with Electron upgraded to the latest version. | Thanks to [@&#8203;sniok](https://github.com/sniok). [#&#8203;5097](https://github.com/kubernetes-sigs/headlamp/issues/5097) | | Fixed a crash on CronJob list and details pages when `spec.suspend` is absent from the API response, preventing a TypeError on undefined. | Thanks to [@&#8203;Athang69](https://github.com/Athang69). Also thanks to [@&#8203;RobertSkawinski](https://github.com/RobertSkawinski) for reporting the issue. [#&#8203;5085](https://github.com/kubernetes-sigs/headlamp/issues/5085) | <br><br> <br><br> #### 🐞 Bug fixes (part 7) | Bug fixes | | | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | Helm chart now automatically mounts an `emptyDir` volume at `/tmp` when `readOnlyRootFilesystem` is enabled, fixing deployment failures in restricted security contexts. | Thanks to [@&#8203;YotamKorah](https://github.com/YotamKorah). Also thanks to [@&#8203;wkbrd](https://github.com/wkbrd) for reporting the issue. [#&#8203;5079](https://github.com/kubernetes-sigs/headlamp/issues/5079) | | Removed a leftover `console.log` debug statement from `HTTPRouteDetails`, eliminating unnecessary noise in the browser console. | Thanks to [@&#8203;NAME-ASHWANIYADAV](https://github.com/NAME-ASHWANIYADAV). [#&#8203;5074](https://github.com/kubernetes-sigs/headlamp/issues/5074) | | Fixed double-write HTTP responses and missing headers in Helm backend handlers, ensuring correct and well-formed API responses. | Thanks to [@&#8203;NAME-ASHWANIYADAV](https://github.com/NAME-ASHWANIYADAV). [#&#8203;5056](https://github.com/kubernetes-sigs/headlamp/issues/5056) | | Fixed typos and improved error logging in OauthPopup by correcting 'occured' to 'occurred' and using console.error for proper error severity reporting. | Thanks to [@&#8203;NAME-ASHWANIYADAV](https://github.com/NAME-ASHWANIYADAV). [#&#8203;5054](https://github.com/kubernetes-sigs/headlamp/issues/5054) | | Fixed a copy-paste bug where GRPCRoute used the wrong section ID (httproute-parentrefs) and removed leftover debug console.log statements from production code. | Thanks to [@&#8203;NAME-ASHWANIYADAV](https://github.com/NAME-ASHWANIYADAV). [#&#8203;5052](https://github.com/kubernetes-sigs/headlamp/issues/5052) | | Cluster action error notifications now surface detailed Kubernetes API error messages instead of generic failure text, making it easier to diagnose rejected operations like ValidatingAdmissionPolicy failures. | Thanks to [@&#8203;itvi-1234](https://github.com/itvi-1234). Also thanks to [@&#8203;jimmyjones2](https://github.com/jimmyjones2) for reporting the issue. [#&#8203;5047](https://github.com/kubernetes-sigs/headlamp/issues/5047) | | Fixed broken app startup after npm install due to an esbuild error by regenerating package-lock.json, updating frontend snapshots, and reverting the merge commit check. | Thanks to [@&#8203;illume](https://github.com/illume). [#&#8203;5029](https://github.com/kubernetes-sigs/headlamp/issues/5029) | | Fixed a Map view bug where resources with the same name in different namespaces were incorrectly linked by adding namespace checks to resource relation matching. | Thanks to [@&#8203;itvi-1234](https://github.com/itvi-1234). Also thanks to [@&#8203;rassie](https://github.com/rassie) for reporting the issue. [#&#8203;5006](https://github.com/kubernetes-sigs/headlamp/issues/5006) | | Fixed AppImage crash on Linux caused by chrome-sandbox permission issues by disabling the setuid sandbox in AppImage environments. | Thanks to [@&#8203;kunaldevsahu](https://github.com/kunaldevsahu). Also thanks to [@&#8203;eftewuer](https://github.com/eftewuer) for reporting the issue. [#&#8203;4996](https://github.com/kubernetes-sigs/headlamp/issues/4996) | | Fixed truncation of long Kubernetes condition names (e.g. PodReadyToStartContainers) in resource detail Conditions tables so full names are always visible. | Thanks to [@&#8203;itvi-1234](https://github.com/itvi-1234). [#&#8203;4967](https://github.com/kubernetes-sigs/headlamp/issues/4967) | | Fixed pod metrics matching to use both name and namespace, preventing incorrect CPU/memory stats for pods sharing the same name across different namespaces. | Thanks to [@&#8203;Utkarshpandey0001](https://github.com/Utkarshpandey0001). [#&#8203;4933](https://github.com/kubernetes-sigs/headlamp/issues/4933) | | Fixed GlobalSearch bar visibility on dark or colored navbars by adding explicit backgrounds, ensuring the search field is visible at all zoom levels and themes. | Thanks to [@&#8203;skoeva](https://github.com/skoeva). [#&#8203;4930](https://github.com/kubernetes-sigs/headlamp/issues/4930) | <br><br> <br><br> #### 🔒 Security | Security improvements | | | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Hardened service proxy URI validation to block path traversal and protocol-relative URLs that could redirect requests to arbitrary hosts. | Thanks to [@&#8203;skoeva](https://github.com/skoeva). [#&#8203;5299](https://github.com/kubernetes-sigs/headlamp/issues/5299) | | Bumped multiple app, plugin, and backend dependencies including storybook, i18next-fs-backend, xmldom, and headlamp-plugin to keep packages up to date and fix build issues. | Thanks to [@&#8203;skoeva](https://github.com/skoeva). [#&#8203;5122](https://github.com/kubernetes-sigs/headlamp/issues/5122) | | Bumped backend and headlamp-plugin dependencies including OpenTelemetry, go-jose, and Vite to keep packages up to date and secure. | Thanks to [@&#8203;skoeva](https://github.com/skoeva). [#&#8203;5108](https://github.com/kubernetes-sigs/headlamp/issues/5108) | | Validate host header to protect desktop and headless users. | Thanks to [@&#8203;illume](https://github.com/illume). Also thanks to Koda Reef for reporting the issue. [#&#8203;5419](https://github.com/kubernetes-sigs/headlamp/issues/5419) | | Updated SECURITY.md to reference the kubernetes-sigs security policy, making it easier to find for contributors browsing the repo. | Thanks to [@&#8203;illume](https://github.com/illume). Also thanks to [@&#8203;rassie](https://github.com/rassie) for reporting the issue. [#&#8203;5081](https://github.com/kubernetes-sigs/headlamp/issues/5081) | | Bumped multiple dependencies including tar, flatted, typedoc, body-parser, undici, and others to address security and compatibility updates. | Thanks to [@&#8203;skoeva](https://github.com/skoeva). [#&#8203;4948](https://github.com/kubernetes-sigs/headlamp/issues/4948) | | Bumped tar dependency from 7.5.10 to 7.5.11 in the sidebar plugin example to include a symlink escape fix. | . [#&#8203;4880](https://github.com/kubernetes-sigs/headlamp/issues/4880) | <br><br> <br><br> #### ♿ Accessibility | Accessibility improvements | | | :-------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | Replaced the accessible-name violation caused by role=button on a label element in DropZoneBox with a ref-based file input trigger. | Thanks to [@&#8203;skoeva](https://github.com/skoeva). [#&#8203;5272](https://github.com/kubernetes-sigs/headlamp/issues/5272) | | Unified sorting icons in SimpleTable to match ResourceTable's MUI arrow style and added tooltips to sorting buttons for better accessibility. | Thanks to [@&#8203;Utkarshpandey0001](https://github.com/Utkarshpandey0001). [#&#8203;4952](https://github.com/kubernetes-sigs/headlamp/issues/4952) | | Fixed heading hierarchy in the ReleaseNotesModal story so the h3 fixture is properly nested under h1/h2 ancestors, and updated the storyshot snapshot to match. | Thanks to [@&#8203;iashutoshyadav](https://github.com/iashutoshyadav). Also thanks to [@&#8203;illume](https://github.com/illume) for reporting the issue. [#&#8203;5315](https://github.com/kubernetes-sigs/headlamp/issues/5315) | <br><br> <br><br> #### 📖 Documentation | Documentation improvements | | | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------- | | Deduplicated nodes and edges in the resource map graph after merging sources, eliminating duplicate elements that could cause rendering issues. | Thanks to [@&#8203;mahmoudmagdy1-1](https://github.com/mahmoudmagdy1-1). [#&#8203;5400](https://github.com/kubernetes-sigs/headlamp/issues/5400) | | Added NKP (Nutanix Kubernetes Platform) to the supported platforms documentation, confirming it works with Headlamp out of the box. | Thanks to [@&#8203;jlnhnng](https://github.com/jlnhnng). [#&#8203;5173](https://github.com/kubernetes-sigs/headlamp/issues/5173) | | Added Linode Kubernetes Engine (LKE) to the list of tested and supported platforms in the documentation. | Thanks to [@&#8203;ruckus-voxi](https://github.com/ruckus-voxi). [#&#8203;5116](https://github.com/kubernetes-sigs/headlamp/issues/5116) | | Added a tutorial showing how to build a WhoAmI plugin that displays user identity in the cluster sidebar using the SelfSubjectReview API. | Thanks to [@&#8203;yolossn](https://github.com/yolossn). [#&#8203;5080](https://github.com/kubernetes-sigs/headlamp/issues/5080) | | Fixed multiple documentation issues including a grammatical error, stale Code of Conduct link, duplicate sections, outdated dependency versions, and broken internal links. | Thanks to [@&#8203;Athang69](https://github.com/Athang69). [#&#8203;5060](https://github.com/kubernetes-sigs/headlamp/issues/5060) | | Added documentation for MCP (Model Context Protocol) support to the Headlamp learn section, helping users discover and configure the feature. | Thanks to [@&#8203;vyncent-t](https://github.com/vyncent-t). [#&#8203;4998](https://github.com/kubernetes-sigs/headlamp/issues/4998) | | Added HolmesGPT documentation to the Learn section, making it easier to find and use HolmesGPT guidance within the docs. | Thanks to [@&#8203;vyncent-t](https://github.com/vyncent-t). [#&#8203;4997](https://github.com/kubernetes-sigs/headlamp/issues/4997) | <br><br> <br><br> #### 💻 Development (part 1) | Development improvements | | | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Added end-to-end tests verifying the Prometheus plugin is correctly bundled and its settings page is accessible in the UI. | Thanks to [@&#8203;illume](https://github.com/illume). [#&#8203;5362](https://github.com/kubernetes-sigs/headlamp/issues/5362) | | Storybook mocks now return HTTP 404 for deprecated v1beta1 CRD endpoints, better reflecting real cluster behavior in component stories. | Thanks to [@&#8203;mystic-06](https://github.com/mystic-06). Also thanks to [@&#8203;skoeva](https://github.com/skoeva) for reporting the issue. [#&#8203;5040](https://github.com/kubernetes-sigs/headlamp/issues/5040) | | Host header validation added on loopback listeners to reduce the risk of DNS rebinding attacks against the local backend server. | Thanks to [@&#8203;illume](https://github.com/illume). [#&#8203;5419](https://github.com/kubernetes-sigs/headlamp/issues/5419) | | Bumped Go to 1.25.9 to address stdlib CVEs, improving the security of the backend. | Thanks to [@&#8203;yolossn](https://github.com/yolossn). [#&#8203;5410](https://github.com/kubernetes-sigs/headlamp/issues/5410) | | Kubernetes volume status phases such as "Bound" and "Pending" are now translated, so they respect the user's selected locale instead of always appearing in English. | Thanks to [@&#8203;Joshna907](https://github.com/Joshna907). [#&#8203;5331](https://github.com/kubernetes-sigs/headlamp/issues/5331) | | Core API discovery failures (e.g. due to timeouts or RBAC issues) are now logged instead of silently swallowed, making it easier to diagnose missing resources in the UI. | Thanks to [@&#8203;Joshna907](https://github.com/Joshna907). [#&#8203;5329](https://github.com/kubernetes-sigs/headlamp/issues/5329) | | Switched plugin cache error checks to use `errors.Is()` so wrapped `cache.ErrNotFound` errors are correctly detected and plugin listing behaves reliably. | Thanks to [@&#8203;NAME-ASHWANIYADAV](https://github.com/NAME-ASHWANIYADAV). [#&#8203;5326](https://github.com/kubernetes-sigs/headlamp/issues/5326) | | Reverted Storybook stories for AddCluster component that were causing CI failures. | Thanks to [@&#8203;skoeva](https://github.com/skoeva). [#&#8203;5301](https://github.com/kubernetes-sigs/headlamp/issues/5301) | | Silent errors in terminal shell detection functions are now logged via console.debug, making node shell connection failures easier to debug. | Thanks to [@&#8203;NAME-ASHWANIYADAV](https://github.com/NAME-ASHWANIYADAV). [#&#8203;5282](https://github.com/kubernetes-sigs/headlamp/issues/5282) | | Replaced direct Helm sentinel error comparisons with errors.Is, ensuring wrapped errors are correctly detected in release-not-found checks. | Thanks to [@&#8203;NAME-ASHWANIYADAV](https://github.com/NAME-ASHWANIYADAV). [#&#8203;5280](https://github.com/kubernetes-sigs/headlamp/issues/5280) | | Reverted a namespace filter reset change that caused crashes when navigating to namespace views with an active namespace filter selected. | Thanks to [@&#8203;sniok](https://github.com/sniok). [#&#8203;5271](https://github.com/kubernetes-sigs/headlamp/issues/5271) | | Added an i18n-check step to CI to automatically catch translation file regressions as dependencies and code are updated. | Thanks to [@&#8203;illume](https://github.com/illume). [#&#8203;5257](https://github.com/kubernetes-sigs/headlamp/issues/5257) | ##### Added Storybook stories for the KubeConfigLoader component, enabling visual testing of all kubeconfig upload and cluster import UI states. <img width="1907" height="947" alt="frontend(KubeConfigLoader): Add Storybook stories with all component …" src="https://github.com/user-attachments/assets/3d07f544-66d5-44c0-8e4a-8f7d3c7e8684" /> <br><br> <br><br> #### 💻 Development (part 2) | Development improvements | | | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | Refactored Event hooks into standalone exported functions, fixing React hooks-rules violations and making useEventListForClusters and useEventWarningList available to consumers. | Thanks to [@&#8203;Utkarshpandey0001](https://github.com/Utkarshpandey0001). Also thanks to [@&#8203;illume](https://github.com/illume) for reporting the issue. [#&#8203;5255](https://github.com/kubernetes-sigs/headlamp/issues/5255) | | Replaced `log.Printf` with the structured logger in the telemetry package, aligning warning output with the rest of the backend. | Thanks to [@&#8203;NAME-ASHWANIYADAV](https://github.com/NAME-ASHWANIYADAV). [#&#8203;5221](https://github.com/kubernetes-sigs/headlamp/issues/5221) | | Added Copilot PR review instructions to automate common review feedback, helping enforce project standards more consistently. | Thanks to [@&#8203;joaquimrocha](https://github.com/joaquimrocha). [#&#8203;4937](https://github.com/kubernetes-sigs/headlamp/issues/4937) | | Added `console.debug` logging to previously silent catch blocks across frontend components, making errors visible during debugging. | Thanks to [@&#8203;NAME-ASHWANIYADAV](https://github.com/NAME-ASHWANIYADAV). [#&#8203;5220](https://github.com/kubernetes-sigs/headlamp/issues/5220) | | Replaced hardcoded `context.TODO()` in the service proxy with proper request-scoped context, enabling correct cancellation and deadline propagation. | Thanks to [@&#8203;NAME-ASHWANIYADAV](https://github.com/NAME-ASHWANIYADAV). [#&#8203;5219](https://github.com/kubernetes-sigs/headlamp/issues/5219) | | Replaced an incorrectly imported MUI icon with the Iconify equivalent in the Table component, restoring consistent icon rendering. | Thanks to [@&#8203;sniok](https://github.com/sniok). [#&#8203;5178](https://github.com/kubernetes-sigs/headlamp/issues/5178) | | Replaced `console.log` with `console.debug` for IndexedDB operational messages, keeping them available in development while hiding them in production. | Thanks to [@&#8203;NAME-ASHWANIYADAV](https://github.com/NAME-ASHWANIYADAV). [#&#8203;5177](https://github.com/kubernetes-sigs/headlamp/issues/5177) | | Removed 54 lines of unreachable dead code from `UpdatePopup` and hardened `window.open` usage, simplifying the component and improving safety. | Thanks to [@&#8203;NAME-ASHWANIYADAV](https://github.com/NAME-ASHWANIYADAV). [#&#8203;5175](https://github.com/kubernetes-sigs/headlamp/issues/5175) | | Expanded test coverage for the k8cache package, covering previously untested branches to improve backend reliability. | Thanks to [@&#8203;Athang69](https://github.com/Athang69). [#&#8203;5172](https://github.com/kubernetes-sigs/headlamp/issues/5172) | | Upgraded Node.js to v22.x LTS across all CI workflows and package.json engines fields to stay ahead of Node 20 end-of-life. | Thanks to [@&#8203;sniok](https://github.com/sniok). [#&#8203;5170](https://github.com/kubernetes-sigs/headlamp/issues/5170) | | Removed a legacy Webpack-specific workaround from ErrorPage, cleaning up the component now that Headlamp fully uses Vite for SVG imports. | Thanks to [@&#8203;itvi-1234](https://github.com/itvi-1234). [#&#8203;5143](https://github.com/kubernetes-sigs/headlamp/issues/5143) | | Enabled eslint-plugin-react-hooks lint rules in the frontend to surface hard-to-debug React hook mistakes earlier in development. | Thanks to [@&#8203;sniok](https://github.com/sniok). [#&#8203;5155](https://github.com/kubernetes-sigs/headlamp/issues/5155) | | Frontend lint warnings are now enforced as CI-blocking errors, with pre-existing violations suppressed, improving long-term code quality. | Thanks to [@&#8203;illume](https://github.com/illume). [#&#8203;5196](https://github.com/kubernetes-sigs/headlamp/issues/5196) | ##### Added Storybook stories for the AddCluster component, making it easier to visually develop and test its key UI states. <img width="1469" height="809" alt="Screenshot 2026-04-27 at 6 58 04 PM" src="https://github.com/user-attachments/assets/20ef2bcb-1a63-4a2c-b059-1fdf085db9c5" /> <br><br> <br><br> #### 💻 Development (part 3) | Development improvements | | | :-------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | Added a README for the Headlamp Releaser CLI tool documenting prerequisites, usage, and how it automates version bumping, tagging, and publishing. | Thanks to [@&#8203;illume](https://github.com/illume). [#&#8203;4942](https://github.com/kubernetes-sigs/headlamp/issues/4942) | | Increased pkg/config test coverage from 74.2% to 83.9% by adding unit tests for session TTL validation and default-application logic. | Thanks to [@&#8203;Athang69](https://github.com/Athang69). [#&#8203;5139](https://github.com/kubernetes-sigs/headlamp/issues/5139) | | Removed the Create button from pod lists inside parent resource detail views (e.g. Jobs, Deployments) where adding pods directly is not valid. | Thanks to [@&#8203;kannon92](https://github.com/kannon92). [#&#8203;5136](https://github.com/kubernetes-sigs/headlamp/issues/5136) | | CRD list fetch errors in the sidebar now use console.error instead of console.log, ensuring correct severity in browser developer tools. | Thanks to [@&#8203;NAME-ASHWANIYADAV](https://github.com/NAME-ASHWANIYADAV). [#&#8203;5128](https://github.com/kubernetes-sigs/headlamp/issues/5128) | | Added unit tests for the Helm handler, bringing test coverage from 0% to 90.8% and improving backend reliability. | Thanks to [@&#8203;Athang69](https://github.com/Athang69). [#&#8203;5124](https://github.com/kubernetes-sigs/headlamp/issues/5124) | | Replaced context.TODO() with explicit context.Background() in the drainNode goroutine, fixing improper context propagation in the backend. | Thanks to [@&#8203;itvi-1234](https://github.com/itvi-1234). [#&#8203;5095](https://github.com/kubernetes-sigs/headlamp/issues/5095) | | Removed leftover development console.log statements from the Backstage integration to keep the browser console clean in production. | Thanks to [@&#8203;itvi-1234](https://github.com/itvi-1234). [#&#8203;5094](https://github.com/kubernetes-sigs/headlamp/issues/5094) | | Replaced loose `as any` casts with strictly typed `Partial<Response>` in auth tests, reducing the risk of silent false-positive test results. | Thanks to [@&#8203;itvi-1234](https://github.com/itvi-1234). [#&#8203;5075](https://github.com/kubernetes-sigs/headlamp/issues/5075) | | Removed an outdated TODO comment in `NameValueTable.tsx` that no longer applies after the React 18 migration was completed. | Thanks to [@&#8203;itvi-1234](https://github.com/itvi-1234). [#&#8203;5064](https://github.com/kubernetes-sigs/headlamp/issues/5064) | | Escaped URLs in library typedoc comments to prevent the parser from misinterpreting them. | Thanks to [@&#8203;ashu8912](https://github.com/ashu8912). [#&#8203;5027](https://github.com/kubernetes-sigs/headlamp/issues/5027) | | Fixed activity panel text alignment for the cluster indicator and corrected text colors for themes with custom primary colors such as 'Lights Out'. | Thanks to [@&#8203;sniok](https://github.com/sniok). [#&#8203;5020](https://github.com/kubernetes-sigs/headlamp/issues/5020) | | Added 13 Storybook stories for ResourceTableMultiActions, covering all meaningful selection states to aid frontend development and testing. | Thanks to [@&#8203;mystic-06](https://github.com/mystic-06). Also thanks to [@&#8203;illume](https://github.com/illume) for reporting the issue. [#&#8203;4971](https://github.com/kubernetes-sigs/headlamp/issues/4971) | | Added Storybook stories for the AddCluster component, making it easier to visually develop and test its key UI states. | Thanks to [@&#8203;Dharmiksarvaiya24](https://github.com/Dharmiksarvaiya24). Also thanks to [@&#8203;illume](https://github.com/illume) for reporting the issue. [#&#8203;5171](https://github.com/kubernetes-sigs/headlamp/issues/5171) | | Added Storybook stories for the KubeConfigLoader component, enabling visual testing of all kubeconfig upload and cluster import UI states. | Thanks to [@&#8203;vishnukothakapu](https://github.com/vishnukothakapu). Also thanks to [@&#8203;illume](https://github.com/illume) for reporting the issue. [#&#8203;5166](https://github.com/kubernetes-sigs/headlamp/issues/5166) | <br><br> <br><br> #### 🧩 Official Plugin releases - [Volcano 0.2.0-beta](https://github.com/headlamp-k8s/plugins/releases/tag/volcano-0.2.0-beta) - [minikube 0.3.0](https://github.com/headlamp-k8s/plugins/releases/tag/minikube-0.3.0) - [Kubeflow 0.1.0-alpha](https://github.com/headlamp-k8s/plugins/releases/tag/kubeflow-0.1.0-alpha) - [Strimzi 0.4.0-alpha](https://github.com/headlamp-k8s/plugins/releases/tag/strimzi-0.4.0-alpha) - [Cluster API 0.1.0-alpha](https://github.com/headlamp-k8s/plugins/releases/tag/cluster-api-0.1.0-alpha) - [Volcano 0.1.0-alpha](https://github.com/headlamp-k8s/plugins/releases/tag/volcano-0.1.0-alpha) - [Knative 0.2.0-alpha](https://github.com/headlamp-k8s/plugins/releases/tag/knative-0.2.0-alpha) - [ai-assistant v0.2.0-alpha](https://github.com/headlamp-k8s/plugins/releases/tag/ai-assistant-0.2.0-alpha) <!-- end-release-notes --> <br><br> **Container image:** :whale: [ghcr.io/headlamp-k8s/headlamp:v0.42.0](https://github.com/kubernetes-sigs/headlamp/pkgs/container/headlamp) **Desktop Apps:** ⚠️ <strong>Important:</strong> Information on warnings from Mac and Windows <a href="https://headlamp.dev/docs/latest/installation/desktop/" target="_blank" rel="noopener noreferrer">when running Headlamp unsigned apps.</a> :penguin: [Flatpak / Linux (AMD64)](https://flathub.org/apps/details/io.kinvolk.Headlamp) :penguin: Linux AppImage [AMD64](https://github.com/kubernetes-sigs/headlamp/releases/download/v0.42.0/Headlamp-0.42.0-linux-x64.AppImage), [ARM64](https://github.com/kubernetes-sigs/headlamp/releases/download/v0.42.0/Headlamp-0.42.0-linux-arm64.AppImage), [ARMv7l](https://github.com/kubernetes-sigs/headlamp/releases/download/v0.42.0/Headlamp-0.42.0-linux-armv7l.AppImage) :penguin: Linux Tarball [AMD64](https://github.com/kubernetes-sigs/headlamp/releases/download/v0.42.0/Headlamp-0.42.0-linux-x64.tar.gz), [ARM64](https://github.com/kubernetes-sigs/headlamp/releases/download/v0.42.0/Headlamp-0.42.0-linux-arm64.tar.gz), [ARMv7l](https://github.com/kubernetes-sigs/headlamp/releases/download/v0.42.0/Headlamp-0.42.0-linux-armv7l.tar.gz) :penguin: Debian / Linux [AMD64](https://github.com/kubernetes-sigs/headlamp/releases/download/v0.42.0/headlamp_0.42.0-1_amd64.deb) :green_apple: [Mac (AMD64)](https://github.com/kubernetes-sigs/headlamp/releases/download/v0.42.0/Headlamp-0.42.0-mac-x64.dmg) :green_apple: [Mac (ARM/M1)](https://github.com/kubernetes-sigs/headlamp/releases/download/v0.42.0/Headlamp-0.42.0-mac-arm64.dmg) :blue_square: [Windows (AMD64)](https://github.com/kubernetes-sigs/headlamp/releases/download/v0.42.0/Headlamp-0.42.0-win-x64.exe) </details> --- ### Configuration 📅 **Schedule**: (in timezone America/New_York) - Branch creation - "after 3am and before 6am" - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate CLI](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4xNjcuMCIsInVwZGF0ZWRJblZlciI6IjQ0LjE2Ny4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJhdXRvbWF0ZWQtdXBkYXRlIiwiZGVwZW5kZW5jaWVzIiwibmVlZHMtcmV2aWV3IiwicmFuZ2Utd2lkZW4iXX0=-->
renovate-bot added the needs-reviewrange-widendependenciesautomated-update labels 2026-11-07 08:17:39 +00:00
renovate-bot added 1 commit 2026-11-07 08:17:39 +00:00
chore(deps): Update Helm release headlamp to <0.47.0
gate / gate (pull_request) Successful in 2m58s
gate / conformance (pull_request) Has been skipped
b7a77a7d1e
jakman85 merged commit 2b279d4f21 into main 2026-11-08 04:28:02 +00:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Home-Network/home-network-k3s-impl#130