- Fixed an urgent issue where the OIDC redirect URI would mismatch.
- Switched from Remix.run to React-Router
- Fixed an issue where some config fields were marked as required even if they weren't (fixes #66)
- Fixed an issue where the toasts would be obscured by the footer (fixes #68)
- The footer now blurs your Headscale URL as a privacy measure
- Updated to the next stable beta of the React Compiler
- Changed
/healthz
to use a well-known endpoint instead of trying an invalid API key - Support
OIDC_REDIRECT_URI
to force a specific redirect URI - Redo the OIDC integration for better error handling and configuration
- Gracefully handle when Headscale is unreachable instead of crashing the dashboard
- Reusable Pre-Auth Keys no longer show expired when used (PR #88)
- Tweaked some CSS issues in the UI
- Fixed a race condition bug in the OIDC validation code
- Added a little HTML footer to show the login page and link to a donation page.
- Allow creating pre-auth keys that expire past 90 days (fixes #58)
- Validates OIDC config and ignores validation if specified via variables or Headscale config (fixes #63)
- Allow customizing the OIDC token endpoint auth method via
OIDC_CLIENT_SECRET_METHOD
(fixes #57) - Added a
/healthz
endpoint for Kubernetes and other health checks (fixes #59) - Allow
HEADSCALE_PUBLIC_URL
to be set ifHEADSCALE_URL
points to a different internal address (fixes #60) - Fixed an issue where the copy machine registration command had a typo.
- Fixed an issue where select dropdowns would not scroll (fixes #53)
- Added a button to copy the machine registration command to the clipboard (fixes #52)
- Quickfix a bug where environment variables are ignored on the server.
- Remove a nagging error about missing cookie since that happens when signed out.
- Clicking on the machine name in the users page now takes you to the machine overview page.
- Completely rebuilt the production server to work better outside of Docker and be lighter. More specifically, we've switched from the
@remix-run/serve
package to our own custom built server. - Fixed a bunch of silly issues introduced by me not typechecking the codebase.
- Improve documentation and support when running Headplane outside of Docker.
- Removing Split DNS records will no longer result in an error (fixes #40)
- Removing the last ACL tag on a machine no longer results in an error (fixes #41)
- Added full support for Exit Nodes in the UI and redesigned the machines page (fixes #36)
- Added a basic check to see if the API keys passed via cookies are invalid.
- Added the ability to load a
.env
file from the PWD whenLOAD_ENV_FILE=true
is set as an environment variable. - Fixed an issue where non-English languages could not create Pre-auth keys due to a localization error
- Improved ACL editor performance by switching back to CodeMirror 6
- Fixed an issue where editing the ACL policy would cause it to revert on the UI (fixes #34)
- Updated to the next stable beta of the React 19 Compiler (See More)
- Implement the ability to create and expire pre-auth keys (fixes #22)
- Fix machine registration not working as expected (fixes #27)
- Removed more references to usernames in MagicDNS hostnames (fixes #35)
- Handle
null
values on machine expiry when using a database like PostgreSQL. - Use
X-Forwarded-Proto
andHost
headers for building the OIDC callback URL.
- Fixed the Docker integration to properly support custom socket paths. This regressed at some point previously.
- Allow you to register a machine using machine keys (
nodekey:...
) on the machines page. - Added the option for debug logs with the
DEBUG=true
environment variable.
- Bumped the minimum supported version of Headscale to 0.23.
- Updated the UI to respect
dns.use_username_in_magic_dns
.
- Removed ACL management from the integration since Headscale 0.23-beta2 now supports it natively.
- Removed the
ACL_FILE
environment variable since it's no longer needed. - Introduce a
COOKIE_SECURE=false
environment variable to disable HTTPS requirements for cookies. - Fixed a bug where removing Split DNS configurations would crash the UI.
- Change the minimum required version of Headscale to 0.23-beta2
- Support the new API policy mode for Headscale 0.23-beta1
- Switch to the new DNS configuration in Headscale 0.23-beta2 (fixes #29)
- If OIDC environment variables are defined, don't use configuration file values (fixes #24)
- Added a proper Kubernetes integration which utilizes
shareProcessNamespace
for PIDs. - Added a new logger utility that shows categories, levels, and timestamps.
- Reimplemented the integration system to be more resilient and log more information.
- Fixed an issue where the /proc integration found
undefined
PIDs.
- Added the ability to manage custom DNS records on your Tailnet.
- ACL tags for machines are now able to be changed via the machine menu.
- Fixed a bug where the ACL editor did not show the diffs correctly.
- Fixed an issue that stopped the "Discard changes" button in the ACL editor from working.
- Fix the dropdown options for machines not working on the machines page.
- Add an option to change the machine owner in the dropdown (aside from the users page).
- Switch to Monaco editor with proper HuJSON and YAML syntax highlighting.
- Utilize magic DNS hostnames for the machine overview page.
- Fixed the expiry issue once and for all.
- Add a nightly build with the
ghcr.io/tale/headplane:edge
tag
- Built basic functionality for the machine overview page (by machine ID).
- Possibly fixed an issue where expiry disabled machines' timestamps weren't handled correctly.
- Prevent users from being deleted if they still have ownership of machines.
- Fixed some type issues where
Date
was being used instead ofstring
for timestamps.
- Added support for the
HEADSCALE_INTEGRATION
variable to allow for advanced integration without Docker. - Fixed a bug where the
expiry
field on the Headscale configuration could cause crashes. - Made the strict configuration loader more lenient to allow for more flexibility.
- Added
HEADSCALE_CONFIG_UNSTRICT
=true to revert back to a weaker configuration loader. - Headplane's context now only loads once at start instead of being lazy-loaded.
- Improved logging and error propagation so that it's easier to debug issues.
- Added experimental support for advanced integration without Docker.
- Fixed a crash where the Docker integration tried to use
process.env.API_KEY
instead of context. - Fixed a crash where
ROOT_API_KEY
was not respected in the OIDC flow.
- Robust configuration handling with fallbacks based on the headscale source.
- Support for
client_secret_path
on configuration file based OIDC. DISABLE_API_KEY_LOGIN
now works as expected (non 'true' values work).API_KEY
is renamed toROOT_API_KEY
for better clarity (old variable still works).- Fixed button responders not actually being invoked (should fix the ACL page).
- Users can now be created, renamed, and deleted on the users page.
- Machines can be dragged between users to change their ownership.
- The login page actually respects the
DISABLE_API_KEY_LOGIN
variable. - Implemented some fixes that should stop dialogs from hanging a webpage.
- Upgrade to React 19 beta to take advantage of the compiler (may revert if it causes issues).
- Upgrade other dependencies
- Switched to a better icon set for the UI.
- Support stable scrollbar gutter if supported by the browser.
- Cleaned up the header which fixed a bug that could crash the entire application on fetch errors.
- Added support for renaming, expiring, removing, and managing the routes of a machine.
- Implemented an expiry check for machines which now reflect on the machine table.
- Fixed an issue where
HEADSCALE_CONTAINER
was needed to start even without the Docker integration. - Removed the requirement for the root
API_KEY
unless OIDC was being used for authentication. - Switched to React Aria for better accessibility support.
- Cleaned up various different UI inconsistencies and copied components that could've been abstracted.
- Added a changelog for any new versions going forward.