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.
Added a delete button directly to the plugins list page, so users can remove plugins without navigating to the detail page first.
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.
✨ 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.
Added ephemeral storage usage chart to the Node Details view, giving users visibility into ephemeral storage consumption alongside other node stats.
Added a download YAML button to the resource table, letting users export any resource manifest directly from the table view.
Improved global search UX by adding a clear button to the search input and showing a pointer cursor on hover over search results.
✨ 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.
Added a 'Review changes' tab to the resource editor dialog so users can diff the original manifest against their edits before applying.
Added UI support for the Kubernetes VolumeAttributesClass resource in the Storage section, including list and detail views.
Container port names are now displayed alongside protocol and port number in the containers list, providing more complete port information at a glance.
✨ 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.
Added a Resource Allocation section to Node Details showing total CPU/Memory requests, limits, and their percentage of node capacity alongside existing usage metrics.
Aligned frontend duration/age formatting with Kubernetes apimachinery logic, ensuring consistent age display matching kubectl behavior.
🐞 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.
💻 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.
💻 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
- Volcano 0.2.0-beta
- minikube 0.3.0
- Kubeflow 0.1.0-alpha
- Strimzi 0.4.0-alpha
- Cluster API 0.1.0-alpha
- Volcano 0.1.0-alpha
- Knative 0.2.0-alpha
- ai-assistant v0.2.0-alpha
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)