Releases: kubernetes-sigs/headlamp
headlamp-plugin 0.13.0
New release of the headlamp-plugin tool for plugin authors.
⬆️ Upgrade
Upgrade your plugin to latest version by running:
npx @kinvolk/headlamp-plugin upgrade .✨ Enhancements:
- Creating a new plugin and installing dependencies is up to 4.2x times faster
- New and expanded guides for plugin architecture and development, including how to publish and ship plugins
- i18n support so plugins can be translated and localized
- Add example plugins: ui-panels, resource-charts, custom-theme, and projects
- Improve TypeScript support so more things are typed correctly, and on-hover documentation is shown
- Document plugin install locations, UI signifiers in Plugin Settings, and labels that differentiated shipped, UI-installed, and dev-mode plugins
- Remove many unused dependencies, for faster installs and fewer updates
- Add --noinstall option to
headlamp-plugin createcommand - Add concept of "shipped", "user plugins" and "dev plugins"
For Plugin Developers: Find Plugin Folder in the UI
To make it easier for plugin developers to find where on the local file system plugins are there is an open plugin folder button. In Plugin Settings select the plugin being developed, and then click the open folder icon to open the plugin path with the Desktop file Finder.
🐞 Bug fixes
- Fix storybook, so "npm run storybook" works again
- Upgrade dependencies to match latest Headlamp release
- Fix
createcommand to install with npm ci - Fix support for env vars REACT_APP_ NODE_ENV
- Fix npm start to log where files are copied, which helps people understand where plugins are copied
- Fix polyfils for node modules process and path
- Fix lib k8s import paths in storybook
- Fix
npm run buildcommand to copy css and svg files - Fix storybook theme logo and fonts to match Headlamp
- Fix storybook to include base mocks and css
🛠️ headlamp-plugin development
Items about the development of the headlamp-plugin package.
- Add tests to check storybook is working inside headlamp-plugin
- Add copy-package-lock script to create template/package-lock.json to pin dependencies and make headlamp-plugin installs faster
⚠️ Type Checking
Because of the improvements to type checking there may be a number of TypeScript issues found when ugprading.
You may find similar issues have been fixed in the example plugins, or in other plugins.
🐛 Reporting issues
Please submit an issue if you have any ideas, questions or feedback on Headlamp plugin development. Or come to the Kubernetes slack headlamp channel for a chat.
0.38.0
✨ Enhancements:
- Add custom local port input dialog for port forwarding. Thanks @jaehanbyun
- Add concept of "shipped", "user-installed", and "dev" plugin types
- Add ability to specify priorityClassName in the Headlamp Helm chart. This allows setting the relative priority of Headlamp compared to other Pods when Headlamp is deployed in a cluster. Thanks @mcg1024
Custom Local Port Forwarding Dialog
A custom local port selection dialog for port forwarding was added. Allowing people to specify their preferred local ports (e.g., 8080) instead of only using auto-assigned ports.
Screen.Recording.2025-11-08.at.10.41.28.PM.mov
Enhanced Plugin System to Handle Different Types of Plugins Better
The plugin loading system has been enhanced. It now differentiates plugins by type (shipped with app/user-installed/development) and loads them according to a priority-based system. Development plugins have the highest priority, followed by user-installed, then shipped plugins. When multiple versions of the same plugin exist, only the highest priority enabled version is loaded.
The UI has been enhanced to show the different types of plugins. To also make finding where they are easier.
🐞 Bug fixes
- Fix useAccessToken arg not set when using external secrets in Helm chart. Thanks @rickliujh
- Fix missing PKCE arg in Helm charts. Thanks @rayshoo
- Fix Add Local Cluster Provider link on Add Cluster view
- Fix so username is displayed in Top Bar for when Headlamp is behind an Oauth2Proxy
- Remove extra 1px border on top of the Side Bar
- Improve headlamp port clashes for the Headlamp app when it is starting and ports are already used
- Fix reloading of app after plugin install when using Windows app
Port Clashes Fixed in Headlamp Desktop App
Before Headlamp tried to listen on port 4466 with the desktop app. If that port was already used then Headlamp would just try to use that existing port. This was problematic of course if there are other apps using that port, or other users on the same machine using that port. Now Headlamp will use another port if that port is already used.
💻 Development
- Remove our homebrew and winget package creation automation, because they are handled by them now
- Add action to push chocolatey package automatically
- Update dependencies for security updates
- Fix storybook theme for plugins, and use correct new logo in storybook for plugins
For Plugin Developers: Find Plugin Folder in the UI
To make it easier for plugin developers to find where on the local file system plugins are there is an open plugin folder button. In Plugin Settings select the plugin being developed, and then click the open folder icon to open the plugin path with the Desktop file Finder.
📖 Documentation
- Improve Projects Learn section in docs
- Add Local Cluster Learn section to docs
- Fix missing commas in OIDC scopes in some OIDC installation tutorials
Full Changelog: v0.37.0...v0.38.0
Container image: 🐳 ghcr.io/headlamp-k8s/headlamp:v0.38.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)
headlamp-helm-0.38.0
Headlamp is an easy-to-use and extensible Kubernetes web UI.
headlamp-helm-0.37.0
Headlamp is an easy-to-use and extensible Kubernetes web UI.
0.37.0
✨ Enhancements:
- Load time of Desktop app up to 60% faster
- Add Default and Parameters columns to Ingress Class List. Thanks to @jaehanbyun
- Add cluster links to project details status section
- Add default indicator column to StorageClassesTable. Thanks to @jaehanbyun
- Set namespace from search
- Enabled Helm support in the backend via --enable-helm flag. Thanks to @muraliinformal
- Add Helm support to in-cluster Headlamp with vanilla Helm repos. Thanks to @shahvrushali22 and @muraliinformal from Oracle
- Add an authenticated "service proxy" used by the new helm repo support. Thanks to @shahvrushali22 and @muraliinformal from Oracle
- Add missing fields and subsection to Network Policy
- Implement kebab menu for table row actions. There is now a consistent kebab menu (vertical dots) for all table row actions across the application, replacing the previous horizontal dots icon. Thanks to @jaehanbyun
- Add Headlamp user agent and Headlamp version to Kubernetes API requests
- Show user information in OIDC authenticated clusters users per cluster-scoped user info via endpoint
- Add PKCE OIDC support to improve OIDC security. Off by default. To enable with helm add
config.oidc.usePKCE: true. Or add-oidc-use-pkce=trueto headlamp-server flags.
User information for OIDC Clusters Displayed
The user that is logged in is displayed in the top bar for clusters configured with OIDC.
Network Policy now with all the missing fields
Some of the fields were reported missing, and now they are shown.
Setting the namespace from search
In the global search there is a shortcut for setting up the current namespace. This is to avoid having to select the namespace from the dropdown.
🐞 Bug fixes
- Fix Monaco Editor with custom base url. Thanks to @DanielLeone
- Include baseURL in Cookie Path. Thanks to @appare45
- Fix baseURL handling in embedded spa handler
- Fix Release Notes rendering in the app of img tags that github now uses
- Fix isDrawerMode fetch when state not there
- Align Actions column and disable sorting/filtering in Cluster Table. Thanks to @jaehanbyun
- Fix status color for labels on Deployments List
- Align PortForward table with Cluster Table pattern. Thanks to @jaehanbyun
- Display valid dates on map view for events
- Fix loadBalancerSourceRanges formatting in the headlamp helm chart. Thanks to @caymard
- If there is an empty cluster list on the home view show the "Add Cluster" link
💻 Development
- Add e2e-tests for react-hotkeys dependency. Thanks to @adwait-godbole
- Extract RefreshAndCacheNewToken from headlamp.go and add tests
- Improve app in development to start up to 8.3x faster
- Add stories for NetworkPolicy
- Add root npm build scripts as an alternative to Make to reduce requirements for developers
- Fix on-hover display of documentation and types for some plugin APIs for plugin developers
- Fix for container test check on github to cleanup disk space to avoid running out
- Small fixes to projects and KubeMetadata types so plugins using them don't raise type errors
- Add storybook stories for Layout component with various states. Thanks to @hxrshxz
- Add isScalable attribute for resources, if true ScaleButton will show for these resources
📖 Documentation
- Add instructions for people who want to install headlamp plugins in the desktop app docs/installation/desktop/plugins-install-desktop.md
- Add page showing people wanting to use plugins some of the plugins
- Improve Plugin Manager related instructions to help with issues people were reporting
Plugins showcase
To go along with the new docs on installing plugins, there is now a page dedicated to showing off some of the plugins. To give people a bit of an idea about what plugins are available.
Learn section in docs
A new section was added within Headlamp official docs, aimed to help users learn how to navigate Headlamp. Available at Headlamp docs. The first section in there describes how to use the new "Projects" feature. More documentation on how to use different Headlamp features will go into the Learn section of the docs in the future.
🧩 Shipped Plugins
- Update shipped plugin plugin-catalog 0.4.2 (desktop only)
- Fixes for a number of display issues
- Minor bug fixes found with new type checker config
- Update shipped plugin app-catalog 0.7.0 (desktop only)
- Support for Vanilla Helm repos along with Artifact Hub ones
Full Changelog: v0.36.0...v0.37.0
Container image: 🐳 ghcr.io/headlamp-k8s/headlamp:v0.37.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)
0.36.0
✨ Enhancements:
- Add support for EndpointSlice resources
- Add memory for table sorting column and direction across navigation. Thanks to @krrish-sehgal
- Enhance global search to support searching by labels and improve multi-term queries
- Add a button to copy a resource's name to the clipboard. Thanks to @farodin91
- Standardize resource naming behavior across all resource types. Thanks to @farodin91
- Add support for more rule types in HTTPRoute resources. Thanks to @farodin91
- Fix and improve the log viewer inputs for responsiveness and usability
- Add a default security context and allow the plugins manager to use the global security context in Helm charts. Thanks to @jda258
- Add optional backend TLS termination support. Thanks to @shahvrushali22 and @vijayant7
- Add support for an optional PodDisruptionBudget in the Helm chart. Thanks to @jcpunk
- Add the ability to specify custom
podLabelsin the Helm chart. Thanks to @vnea - Add snackbar notifications for plugin deletion actions
- Add support for opening external URLs from the sidebar in a new tab. Thanks to @Exar04
- Add
namespaceOverridesupport to the Helm chart. Thanks to @rstribrn - Allow plugins to override default tabs in the project details view
- Add an
isEnabledmethod to allow plugins to conditionally render project detail tabs - Add support for
HEADLAMP_APP_andREACT_APP_environment variables in plugins - Add support for running Headlamp embedded within Backstage
- Add the ability for plugins to register a custom delete button for projects
- Add a loader and error page for the initial backend connection
Copy resource name to clipboard
Persistent Table sorting
Tables will now remember your sorting choices
Search improvements
You can now search by labels and combine multiple terms by separating them with spaces
Added support of EndpointSlices
EndpointsSlices are now available in Network sidebar
🐞 Bug fixes
- Fix the text contrast of notification menu items on dark themes
- Fix the base URL feature to ensure the application loads correctly when a base URL is configured. Thanks to @DanielLeone
- Fix an issue where deleting one dynamic cluster removed all clusters from the same kubeconfig
- Prevent stale entries from appearing after renaming a dynamic cluster
- Fix truncated Chinese text in the resource map's graph view buttons. Thanks to @wingerx
- Update the "Type" column header to "Kind" in resource tables for consistency. Thanks to @LinPr
- Fix bundling for icons to ensure they are visible in offline mode
- Add backward compatibility to
createRouteURLto accept URL paths for route names - Restore the
GetTokenFromCookiecall within theParseClusterAndTokenfunction - Handle cases where
routeNameis undefined ingetRouteto prevent crashes - Correct the positioning of CPU/Memory tooltips in the Nodes table. Thanks to @jaehanbyun
- Close the actions menu when the "Edit" button is clicked. Thanks to @jaehanbyun)
- Add a fallback for
idpIssuerURLto prevent issues with token expiration. Thanks to @lszczepaniak-XM - Fix security context rendering in Helm charts for CI jobs
- Fix a glob pattern in
setup-plugins.jsto support Windows paths - Fix
createRouteURLto correctly look up routes registered from plugins - Fix project creation when multiple clusters are involved
- Prevent dialog checkbox clicks from triggering table row selection. Thanks to @jaehanbyun
- Disable the backend loader to prevent an error page on application load
💻 Development
- Refactor the
GetExpiryUnixTimeUTCfunction into theauthpackage - Refactor the configuration parsing function for clarity and reduced complexity
- Extract
DropZoneBoxinto its own reusable component - Update application dependencies, removing
electron/notarizeand addingglob - Replace usages of the deprecated
makeKubeObject()function with theKubeObjectclass - Fix circular dependencies in the
lib/k8sfolder by usingimport type - Extract functions from
fetch.tsto new files to avoid circular imports - Resolve circular dependencies in the k8s API proxy imports
- Refactor the router implementation to untangle module imports
- Add Storybook stories for the
DateLabelcomponent - Refactor the
CacheRefreshedTokenfunction into theauthpackage - Use
import typein more files to separate type and value imports - Bump the Vite dependency to version 6.3.6 in the frontend and plugins
- Refactor the
IsTokenAboutToExpirefunction into theauthpackage - Add logging to the plugin
npm startcommand to show where files are copied - Fix Storybook support for plugins
- Export missing functions and types from the headlamp-plugin package
- Fix the return type for
HeaderActionFuncTypeto correctly includeReactNode - Refactor the
GetNewTokenfunction into theauthpackage - Fix the Docker extension release process to consistently use the
latesttag - Disable the nightly build workflow on forked repositories
- Update the failing EndpointSlice snapshot test
- Improve the plugin
createcommand's speed and security by usingnpm ci - Update GitHub issue templates to use correct repository labels. Thanks to @jaehanbyun
📖 Documentation
- Enhance the AKS cluster OAuth documentation with clearer steps and Helm-based deployment instructions
- Update the project name in the NOTICE file
- Add a note about the removal of
libgconf-2-4on newer Ubuntu releases - Add VKS (VMware Kubernetes Service) to the list of supported platforms. Thanks to @papivot
- Fix a broken link to the architecture page from the plugins documentation
🧩 Shipped Plugins
- Update shipped plugin prometheus 0.8.0
- Update dependencies
- Update shipped plugin plugin-catalog 0.4.1 (desktop only)
- Update dependencies
- Fix contrast on loading install button
- Fix origin link
- Update shipped plugin app-catalog 0.6.3 (desktop only)
- Update dependencies
- Add package script
Container image: 🐳 ghcr.io/headlamp-k8s/headlamp:v0.36.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)
headlamp-helm-0.36.0
Headlamp is an easy-to-use and extensible Kubernetes web UI.
headlamp-helm-0.35.0
Headlamp is an easy-to-use and extensible Kubernetes web UI.
0.35.0
✨ Enhancements:
- Add Projects feature (namespace-based, a collection of Kubernetes resources for organizing deployed applications or workloads)
- Gateway API resources can be seen on the map view. Thanks to @userAdityaa
- Add copy to clipboard button on secrets view
- Add Kube config upload options. Thanks to @Exar04
- Can see more than 20 labels on Nodes and Pods now without clicking edit. Thanks to @shezaan-hashgraph
- Improvements to local cluster support on Mac, and with display of status on Home Overview
- Helm Chart is available on GHCR now. Thanks to @onedr0p and @joryirving
- In the helm chart, ability to specify automountServiceAccountToken in the spec of the pod. Thanks to @vnea
- Now it is possible to add annotations to services in the helm chart. Thanks to @lszczepaniak-XM
- Add oidc-callback-url flag to backend and chart
- Add link to minikube in plugin-catalog on the Add cluster view
- Add support for custom CA and skipping TLS verification to backend and chart, improving flexibility for users working with self-signed OIDC providers
- Improvements to filter, to allow filtering for broken pods and multi select. Thanks to @farodin91
- Handle new k8s feature, native sidecars
- i18n support in plugins
- Changing theme font in plugins. Thanks to @kirederik
- Optional cache for k8s API calls to reduce API server load. Thanks to @upsaurav12
- Expand grouped CRs in sidebar. Making installations with lots of CRs much more usable. Thanks to @farodin91
New Projects feature
Custom Resources are now grouped in the sidebar
For clusters with many Custom resources installed this makes it much easier to see them grouped in the sidebar.
Gateway API resources can be seen on the map view.
Copy to clipboard button on secrets view
New Kube config upload options
Now people can upload kube config files by URL
🐞 Bug fixes
- Mac app no longer needs reloading to show plugins on some laptops in cases like when Headlamp was first run
- Fix for realtime updates because of web socket error when telemetry was enabled. Thanks to @wingerx
- App no longer needs to wait several seconds longer than necessary for clusters to display
- Sidebar a11y issue with focus on collapsed items was fixed. Thanks to @andoriyaprashant
- Make monaco-editor work again in an offline/air-gapped environment and fix localisation. This improves security and i18n functionality. Thanks to @DanielLeone
- Status Labels are wrapped incorrect (was "Pendin" on one line, "g" on the next)
- Fix for activity bar close button styling. Thanks to @Exar04
- Contrast fix for actions notifier (cancel button was not visible)
- Cookies are used for token rather than local storage improving security
- The plugin settings works again to allow disabling/enabling plugins
- Fix on the cluster context menu on the Home Overview page to not show multiple delete actions when a plugin defines a delete action
- Fix for the network icon in map
- A number of now unused dependencies were trimmed from the frontend and from headlamp-plugin
- Fixes for shell escaping in script used for signing some binaries. Thanks to @odaysec
- Fix display of accessModes on VolumeList detail view
- Fix fetchConfig to return a proper value removing error in web dev console. Thanks to @wingerx
- Fix for overflow on logs view Thanks to @greedy-wudpeckr
- A11y fix for Alert contrast in dark-mode
- Refactor CRs to use existing components. Thanks @farodin91
- Fix so plugins can be deleted again in Plugin settings
- Fix warnings, and bump node to 22 in Dockerfile. Thanks to @LinPr
💻 Development
- From 5x to 60x faster app load in development with
cd app && npm run star - Fix for running app on Windows with cd app && npm start
- Improved "releaser check" tool to so we can see which external release artefacts released correctly
- Remove unnecessary loop assignments which is possible in newer versions of golang. Thanks to @LinPr
- Clean up some parse tests. Thanks to @andoriyaprashant
- Fix bug in app for running long running javascripts use by minikube plugin
- Plugin manager can now download non tar.gz extra files
- Add gitignore for mac .DS_Store files
- Update golang version to 1.24.6. Thanks to @mkm29
- Stories for the Overview component were added. Thanks to @1012Charan
- Some unused functionality for plugins was removed "loadDevPlugins"
- Update storybook to 9.1.2
- Add registerClusterStatus for adding cluster status to the Overview cluster list
- Extract some auth related methods to new auth package with tests
- Add projects plugin example, for extending new Namespace Projects feature on Home
Plugins gain the ability to customise the font-family from a AppTheme. Thanks to @kirederik
Theme registration:
import './index.css'; // where the @font-face is defined
registerAppTheme({
name: "My Custom Theme",
base: "light",
primary: "#ff0000",
secondary: "#333",
fontFamily: ["Asimovian"],
})
📖 Documentation
- Document some functions in lib/k8s
- Add note about hack to get around issue installing with brew on Mac whilst binaries are not signed. Thanks to @kierr
- Add GKE to user tested platform table. Thanks to @eranchetz
Container image: 🐳 ghcr.io/headlamp-k8s/headlamp:v0.35.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)
headlamp-helm-0.34.0
Headlamp is an easy-to-use and extensible Kubernetes web UI.








