PAGES
← all tools
◆ Secure Access (VPN / SASE / ZTNA)

Headscale

v0.29.7 open-source

Headscale is an open source, self-hosted implementation of the Tailscale control server.

Summary

Headscale is an open-source, self-hosted control server that implements the Tailscale coordination protocol, letting you run your own WireGuardWireGuardA modern VPN protocol and Linux kernel module, maintained as an open-source project, that establishes encrypted tunnels using minimal code and fast cryptography, giving cyber tools a lightweight, high-performance transport layer.-based overlay network instead of using Tailscale's hosted service. It runs as a service you deploy yourself, exposing an HTTP API and CLI for managing users, nodes, and access policy. The README frames it for self-hosters and hobbyists, or small organizations running a single tailnet, rather than large enterprises needing multi-tailnet management, and it positions itself explicitly as an alternative to Tailscale's own control server. Recent work adds OAuth-based API authentication, SSH check-mode approvals, and policy reachability testing, alongside a rewritten map-update system for bandwidth efficiency. With 273 contributors, over a thousand commits in the past year, and a release 23 days ago, it is under continuing development.

Headscale is an open source, self-hosted implementation of the Tailscale control server.

How Headscale helps

Which of my devices can reach which others once this policy goes live?

evaluates the reachability assertions written into the policy file and rejects the change before it is applied if any expected path is blocked or any forbidden path is open

Which machines are actually allowed to SSH into a given host, and under what conditions?

checks each SSH rule's accept, deny, and check outcomes against the declared test cases at load time and refuses to apply a policy that fails one

Who is trying to get into a machine right now and needs my sign-off?

tracks pending check-mode authentication requests and lets an operator approve or reject them directly, without waiting on an OIDC round-trip

Which credential can do what, and can I take it away without touching my admin keys?

issues OAuth client-credential tokens scoped to specific operations and tagged to specific devices, separate from the all-access admin API keys

Did my last policy edit change what's reachable without me noticing?

runs the same reachability and SSH-reachability assertions on every reload, so a rule change that flips a verdict is caught at reload time rather than discovered in production

Which nodes get special network capabilities like file sharing or DNS overrides?

reads the node-attribute block in the policy file and reports which targeted nodes carry which capability, so grants aren't scattered across ad hoc configuration

all 34 features, with the evidence for each →

Languages

Not documented

Features

34 capabilities across 5 areas · 1 backed by code, an API document or a real run

Built from Headscale's releases, docs, README and our own runs. “Seen” marks the month we first spotted a release the vendor didn't date. Group names and tags are our labels.

Compare with peers →

What Headscale offers you

  • Command-line interface9
  • gRPC API support2
  • JSON data export1
  • Self-hosted deployment1
  • REST API
Access Control and Policy Management 3 capabilities Headscale lets operators define and validate who can reach what across the tailnet, including SSH access rules and wildcard group semantics. Policies are checked for errors before being applied to live nodes.
ACL policy authoring and validation shipped Operators can write and validate ACL policy files, including reachability and SSH rules, before pushing them to the network. 28 releases · 4 other sources · first seen Jul 2021

release 28 total

  • Evaluates the tests block in policy files (beta): reachability assertions run on headscale policy set, SIGHUP reload, and headscale policy check, rejecting bad policy before it is applied. v0.29.0 · Jun 2026 · source · release history
  • Supports nodeAttrs block in ACL policy files to assign Tailscale node capabilities (e.g. disable-captive-portal-detection, nextdns:<profile>, drive:share, drive:access) to targeted nodes. v0.29.0 · Jun 2026 · source · release history
  • BREAKING: proto:icmp now covers only ICMPv4; use proto:ipv6-icmp or protocol 58 for ICMPv6. v0.29.0 · Jun 2026 · source · release history
  • Evaluates the sshTests block in policy files (beta): per-SSH-rule accept/deny/check reachability assertions with the same rejection semantics as the tests block. v0.29.0 · Jun 2026 · source · release history
  • Evaluates the sshTests block in policy files (beta), asserting SSH reachability with accept, deny, and check user lists per source/destination pair. v0.29.0 · Jun 2026 · source · release history
  • Adds support for Tailscale Grants (grants block in policy), enabling application-level controls like Taildrive file sharing and traffic steering via tagged subnet routers or exit nodes. v0.29.0 · Jun 2026 · source · release history

example

  • Validate a policy file's tests and sshTests blocks before pushing it live, catching reachability regressions without affecting running nodes. headscale policy check v0.29.0 · Jun 2026 · source
  • Validate that a policy change won't break existing reachability assertions before applying it. headscale policy check v0.29.0 · Jun 2026 · source
  • Validate a policy file for v2 compliance before pushing it live, catching load-time errors (such as missing @ in usernames) without disrupting a running instance. headscale policy check --file policy.json v0.26.0 · May 2025 · source
  • Reload network policies without stopping the service kill -HUP $(pgrep headscale) v0.16.0 · Jul 2022 · source
SSH check-mode approval workflow verified Administrators can approve or reject pending SSH access requests when policy requires an explicit check before granting a session. 5 releases · 3 other sources · first seen Jan 2025

Shared capability: OIDC SSO

Also counts toward: Command-line interface

release

  • Supports Tailscale SSH "action": "check" rules, prompting OIDC or CLI approval before granting SSH access to a node. v0.29.0 · Jun 2026 · source · release history
  • Adds SSH check action support: when a policy rule uses "action": "check", connecting users must authenticate via OIDC or CLI approval before SSH access is granted. v0.29.0 · Jun 2026 · source · release history
  • New headscale auth CLI command group: approve, reject, and register subcommands manage SSH check-mode and web auth approval flows. v0.29.0 · Jun 2026 · source · release history
  • New headscale auth CLI command group with approve, reject, and register subcommands for managing pending SSH-check and web-auth flows. v0.29.0 · Jun 2026 · source · release history
  • Supports client certificate verification for DERP connections. v0.24.0 · Jan 2025 · source · release history

command line

  • reject — Reject a pending authentication request v0.29.0-beta.1 · May 2026 · command-line history

example

  • Approve a pending SSH check-mode or web auth request identified in server logs, granting the user access without re-keying. headscale auth approve --auth-id <id> v0.29.0 · Jun 2026 · source
  • Approve a pending SSH check-mode authentication request from the CLI without waiting for OIDC. headscale auth approve --auth-id <id> v0.29.0 · Jun 2026 · source
ACL wildcard and autogroup semantics shipped Controls how wildcards and built-in autogroups are resolved in ACL rules, keeping behaviour consistent with Tailscale's own validation logic. 6 releases · first seen Oct 2025

release

  • BREAKING: autogroup:self destinations now reject tags, hosts, and IPs as sources, matching Tailscale validation. v0.29.0 · Jun 2026 · source · release history
  • Introduces autogroup:danger-all as a source-only ACL target resolving to all IPs (0.0.0.0/0 and ::/0), replacing the prior behavior of wildcard *. v0.29.0 · Jun 2026 · source · release history
  • Adds autogroup:danger-all as a source that resolves to 0.0.0.0/0 and ::/0 for policies that need to match all IPs including non-Tailscale addresses. v0.29.0 · Jun 2026 · source · release history
  • Policies using tags, hosts, or IP addresses as sources for autogroup:self destinations now fail validation v0.29.0 · Jun 2026 · source · release history
  • Wildcard (*) in ACL sources and destinations now resolves to the Tailscale CGNAT range (100.64.0.0/10) and ULA range (fd7a:115c:a1e0::/48) instead of all IPs (0.0.0.0/0 and ::/0); policies relying on * to match all IP addresses must switch to autogroup:danger-all (source only) or explicit CIDR ranges… v0.29.0 · Jun 2026 · source · release history
  • Adds experimental support for autogroup:self autogroup (may be expensive on large installations; report bugs). v0.27.0 · Oct 2025 · source · release history
Version and Upgrade Lifecycle 2 capabilities Headscale enforces a controlled upgrade path for the server itself and sets a floor on which client versions are permitted to join the tailnet. This prevents skipped releases, downgrades, and connections from outdated clients.
Minimum Tailscale client version enforcement shipped Rejects Tailscale clients that fall below the minimum supported version from connecting to the tailnet. 7 releases · first seen Jan 2025

release 7 total

  • Minimum supported Tailscale client version is now v1.80.0. v0.29.0 · Jun 2026 · source · release history
  • Minimum supported Tailscale client version is now v1.80.0 v0.29.0 · Jun 2026 · source · release history
  • Raises minimum supported Tailscale client version to v1.80.0. v0.29.0 · Jun 2026 · source · release history
  • The minimum supported Tailscale client version is now v1.74.0. v0.28.0 · Feb 2026 · source · release history
  • The minimum supported Tailscale client version is now v1.64.0. v0.27.0 · Oct 2025 · source · release history
  • Tailscale clients older than version 1.62 (capability version 87) are no longer supported and will not be able to connect. v0.25.0 · Feb 2025 · source · release history
Upgrade path enforcement shipped Prevents operators from skipping minor versions during upgrades or rolling back to an earlier release. 3 releases · first seen Jun 2026

release

  • Enforces a strict one-minor-version-at-a-time upgrade path; skipping minor versions or downgrading is now blocked at startup. v0.29.0 · Jun 2026 · source · release history
  • BREAKING: Headscale enforces a strict sequential upgrade path — skipping minor versions (e.g., 0.27 → 0.29) and downgrading are blocked. v0.29.0 · Jun 2026 · source · release history
  • Skipping minor versions (e.g. 0.27 → 0.29) is blocked; upgrades must proceed one minor version at a time, and downgrading to a previous minor version is blocked v0.29.0 · Jun 2026 · source · release history
Client Configuration and Distribution 1 capability Headscale distributes tailnet-wide settings to connected clients, including whether those clients should update themselves automatically. These settings are pushed through the capability map rather than requiring per-device configuration.
Client auto-update control shipped Sets a tailnet-wide default that controls whether Tailscale clients automatically update themselves. 2 releases · first seen Jun 2026

release

  • Adds auto_update.enabled config option to set the tailnet-wide default for client auto-update via CapMap. v0.29.0 · Jun 2026 · source · release history
  • New auto_update.enabled config option sets the tailnet-wide default for client auto-update via CapMap. v0.29.0 · Jun 2026 · source · release history
Server Startup and Configuration Integrity 2 capabilities Headscale validates its own configuration at startup and refuses to run when deprecated or removed keys are present. It also normalises node hostnames to avoid DNS collisions before nodes become reachable.
MagicDNS hostname sanitisation shipped Sanitises node hostnames into valid MagicDNS names, handling special characters, non-ASCII input, and duplicate name collisions consistently. 7 releases · first seen Feb 2025

release 7 total

  • GivenName collision suffix changed from random 8-char hash to monotonic numeric suffix (laptop, laptop-1, laptop-2, …), matching Tailscale SaaS. v0.29.0 · Jun 2026 · source · release history
  • Hostname sanitisation now uses Tailscale's MagicDNS rules, allowing previously-rejected hostnames with apostrophes, special characters, and dots to register successfully. v0.29.0 · Jun 2026 · source · release history
  • Hostname sanitisation now uses Tailscale's MagicDNS rules, supporting hostnames with apostrophes, special characters, and non-ASCII characters. v0.29.0 · Jun 2026 · source · release history
  • Empty or all-non-ASCII hostnames now fall back to the literal node instead of invalid-<rand> v0.29.0 · Jun 2026 · source · release history
  • MagicDNS GivenName collision suffix changed from 8-char random hash (laptop-abc12xyz) to monotonic numeric suffix (laptop, laptop-1, laptop-2, …); MagicDNS names change on upgrade for any node whose previous label was a random-suffix form v0.29.0 · Jun 2026 · source · release history
  • Stricter hostname validation is enforced: hostnames must be 2–63 characters, alphanumeric and hyphens only, and cannot start or end with a hyphen. v0.27.0 · Oct 2025 · source · release history
Server configuration validation on startup shipped Refuses to start if the configuration file contains deprecated or removed keys, prompting the operator to migrate them. 5 releases · 1 other source · first seen Jul 2022

release

  • The randomize_client_port server-config key was removed; headscale refuses to start when the old key is present — the toggle must be moved to the policy file as the top-level randomizeClientPort field v0.29.0 · Jun 2026 · source · release history
  • BREAKING: randomize_client_port server-config key removed; headscale refuses to start if the old key is present — move it to the policy file. v0.29.0 · Jun 2026 · source · release history
  • Adds configtest CLI command to validate configuration files before starting v0.21.0 · Mar 2023 · source · release history
  • db_ssl defaults to false instead of previous default; if your database requires SSL, you must explicitly set db_ssl = true in your config file. v0.18.0 · Jan 2023 · source · release history
  • allow_random_port configuration key allowing Tailscale clients to use random WireGuard ports v0.16.0 · Jul 2022 · source · release history

example

  • Validate a configuration file without starting the server to catch syntax errors early headscale configtest --config /etc/headscale/config.yaml v0.21.0 · Mar 2023 · source
Other 26 capabilities
OIDC Authentication Support shipped Adds beta support for OpenID Connect authentication for node registration. 17 releases · 1 other source · first seen Dec 2021

release 17 total

  • Harden the OIDC callback: state and nonce cookies take their Secure flag from server_url so they survive a TLS-terminating proxy, a callback state is single-use, and an invalid oidc.issuer or a missing oidc.client_id/oidc.client_secret now fails at startup. 0.29.4 · Sep 2026 · source · release history
  • Adds oidc.email_verified_required config option to control whether OIDC authentication requires a verified email address. v0.28.0 · Feb 2026 · source · release history
  • OIDC: Group claims are now sourced from UserInfo, and user details are updated from UserInfo claims before evaluating allowed groups, email, and domain. v0.27.0 · Oct 2025 · source · release history
  • OIDC integration now fetches UserInfo to populate email_verified, name, email, and username when the ID token omits them. v0.26.0 · May 2025 · source · release history
  • OIDC-managed users can no longer be renamed via OIDC. v0.25.0 · Feb 2025 · source · release history
  • Adds PKCE (Proof Key for Code Exchange) verifier support for OIDC authentication flows. v0.24.0 · Jan 2025 · source · release history

example

  • After upgrading, let legacy OIDC users log in automatically while migration runs, then lock it down once all accounts are migrated. # In your headscale config.yaml — keep migration on until all users have logged in: map_legacy_users: true # Once all users have authenticated, disable legacy matching: map_legacy_users: false v0.24.0 · Jan 2025 · source
Route Management Enhancements shipped Improves route management with ptable support and batch enabling of advertised routes. 8 releases · 5 other sources · first seen Aug 2021

Also counts toward: Command-line interface

release 8 total

  • The dedicated Route API and Route CLI (headscale routes …) have been removed; route management now goes through headscale nodes list-routes and headscale nodes approve-routes. v0.26.0 · May 2025 · source · release history
  • New headscale nodes list-routes command shows approved, available, and serving (primary) routes per node. v0.26.0 · May 2025 · source · release history
  • New headscale nodes approve-routes --identifier <id> --routes <cidrs> command replaces the old dedicated route API/CLI for managing node routes. v0.26.0 · May 2025 · source · release history
  • Allows deleting routes via the management API v0.21.0 · Mar 2023 · source · release history
  • Enable both exit node routes (IPv4 and IPv6) at the same time v0.20.0 · Feb 2023 · source · release history
  • Enables subnet router failover via a reworked routing implementation, allowing multiple routes to be active for redundancy v0.18.0 · Jan 2023 · source · release history

example

  • Approve specific routes (including dual-stack exit routes) for a node without touching the old route API. headscale nodes approve-routes --identifier 1 --routes 0.0.0.0/0,::/0 v0.26.0 · May 2025 · source
  • List all routes advertised by nodes and see which are approved and actively serving, so you can audit exit-node or subnet-router state at a glance. headscale nodes list-routes v0.26.0 · May 2025 · source
  • Enable random IP allocation from separate v4/v6 prefix ranges instead of the old single ip_prefixes key. prefixes: v4: 100.64.0.0/10 v6: fd7a:115c:a1e0::/48 allocation: random v0.23.0 · Sep 2024 · source
  • Delete a specific route from a node using the API endpoint curl -X DELETE http://localhost:8080/api/v1/routes/<route-id> v0.21.0 · Mar 2023 · source
  • Enable every available advertised route at once without listing them individually. headscale routes enable --all v0.7.0 · Aug 2021 · source
Control Plane Architecture shipped Provides a self-hosted, open-source implementation of the Tailscale control server for managing a private Tailnet. 11 releases · 1 other source · first seen Jun 2021

Also counts toward: Self-hosted deployment

release 11 total

  • Key expiry values outside the years 0–9999 UTC are now refused at registration, on the OIDC token-expiry path, and in headscale nodes expire / POST /api/v1/node/{node_id}/expire (HTTP 400). v0.29.7 · Oct 2026 · source · release history
  • Pending registration capacity is now bounded: pending interactive registrations and OIDC logins are kept at capacity rather than evicted, new requests get a retry response, registered nodes keep capacity for SSH checks, and stored pending registration data is capped at 64 KiB (keeping tags and expiry), with oversized… v0.29.7 · Oct 2026 · source · release history
  • Client reports are now bounded to the first 256 endpoints and 4096 announced routes, with oversized hostnames, requested tags, or other metadata returning a registration error or HTTP 413 on map updates and zoned IPv6 endpoints refused; at startup, Headscale trims stored hostnames, endpoints, and routes to these… v0.29.7 · Oct 2026 · source · release history
  • A stalled request body, or a Noise tunnel with no open request, is now closed after 30 seconds. v0.29.7 · Oct 2026 · source · release history
  • Re-registering an expired tagged node now requires a valid pre-auth key, and another user's key or login on a tagged machine now creates a new device for that user instead of re-authenticating the tagged node. v0.29.7 · Oct 2026 · source · release history
  • Unifies derp.yaml into the main config.yaml, eliminating the need for multiple configuration files v0.11.0 · Oct 2021 · source · release history

docs

  • Self-hosted, open source implementation of the Tailscale control server for managing a private Tailscale network.
Node Management shipped Provides CLI commands to delete nodes from the network with interactive confirmation. 7 releases · 3 other sources · first seen Jul 2021

Also counts toward: Command-line interface

release 7 total

  • Supports expiring nodes with a custom timestamp, enabling precise lifecycle control over node access. v0.27.1 · Nov 2025 · source · release history
  • A node re-registered with a different (new) user is now registered as a brand-new node rather than updating the existing node record — existing node identities tied to user changes will be affected. v0.25.0 · Feb 2025 · source · release history
  • Registering a node with a new user now creates a distinct new node instead of reusing an existing one. v0.25.0 · Feb 2025 · source · release history
  • headscale nodes move command to migrate nodes between namespaces v0.16.0 · Jul 2022 · source · release history
  • headscale tags create command to assign tags to a node v0.16.0 · Jul 2022 · source · release history
  • Adds --force flag to the node delete CLI subcommand to allow forced deletion of nodes. v0.10.3 · Oct 2021 · source · release history

example

  • Migrate a node from one namespace to another via CLI headscale nodes move <node-key> --dest-namespace <target-namespace> v0.16.0 · Jul 2022 · source
  • Forcefully remove a node from the network regardless of its current state or locks. headscale node delete <node-id> --force v0.10.3 · Oct 2021 · source
  • Remove a node from the network after interactive confirmation is provided. headscale node delete <node-key-or-name> v0.3.5 · Jul 2021 · source
Health Check Endpoint shipped Exposes an HTTP health endpoint to verify if the Headscale service is responding correctly. 6 releases · 1 other source · first seen Aug 2021

release

  • Adds headscale_mapper_changes_dropped_total and headscale_ha_health_updates_total Prometheus counters to track dropped map updates and health probe no-ops. 0.29.4 · Sep 2026 · source · release history
  • Adds headscale_mapper_changes_dropped_total and headscale_ha_health_updates_total Prometheus metrics to track suppressed no-op map updates.⁠︀︄︇︀︅︉︀︅︀︀︃︀︀︅︅︀︅︊︀︄︆︀︃︄⁠ v0.29.4 · Sep 2026 · source · release history
  • Adds real-time update delivery via go channels (notifier package), replacing fixed-interval polling for lower-latency propagation to connected clients. v0.23.0 · Sep 2024 · source · release history
  • Supports delta network map updates — nodes now receive only changed/added/removed node info instead of full network state on every update. v0.23.0 · Sep 2024 · source · release history
  • Supports manual DERP map entry creation with custom configuration instead of automatic generation only. v0.23.0 · Sep 2024 · source · release history
  • /health HTTP endpoint added to the service v0.6.0 · Aug 2021 · source · release history

example

  • Check if the Headscale service is responding correctly by querying the health endpoint. curl http://<host>:<port>/health v0.6.0 · Aug 2021 · source
Pre-auth Key Management shipped Allows expiring specific pre-auth keys via CLI commands. 5 releases · 1 other source · first seen Aug 2021

Also counts toward: Command-line interface

release

  • The pre-auth key API now returns a full user object instead of a username string. v0.26.0 · May 2025 · source · release history
  • The pre-auth key API/CLI now uses the numeric ID instead of username to identify keys. v0.26.0 · May 2025 · source · release history
  • Pre-auth keys belonging to a user are no longer deleted when the user is deleted. v0.25.0 · Feb 2025 · source · release history
  • Pre-auth keys actively used by a node can no longer be deleted. v0.25.0 · Feb 2025 · source · release history
  • headscale expire subcommand allows expiring preauth keys via CLI v0.6.0 · Aug 2021 · source · release history

example

  • Expire a specific pre-auth key by its ID from the command line. headscale expire <key-id> v0.6.0 · Aug 2021 · source
Experimental SSH Support shipped Enables experimental SSH ACLs via an environment variable configuration option. 4 releases · first seen Nov 2022

release

  • Disable SSH agent and port forwarding on a node by setting TS_SSH_DISABLE_FORWARDING=1 in the tailscaled service environment; applies to all Tailscale SSH sessions on that node and works on older clients too.⁠︀︄︇︀︅︉︀︅︀︀︃︀︀︅︅︀︅︊︀︄︆︀︃︄⁠ v0.29.7 · Oct 2026 · source · release history
  • Allows nodes to use SSH agent forwarding. v0.24.0 · Jan 2025 · source · release history
  • Adds Tailscale SSH support, enabling SSH access control through Headscale policy. v0.23.0 · Sep 2024 · source · release history
  • Added HEADSCALE_EXPERIMENTAL_FEATURE_SSH=1 environment variable to enable experimental SSH ACLs v0.17.0 · Nov 2022 · source · release history
Prometheus Metrics Export shipped Exports Prometheus metrics to monitor control plane performance, including dropped map updates and HA health probe efficiency. 2 releases · 2 other sources · first seen Sep 2026

release

  • Metrics are no longer exposed to unregistered clients through the Noise protocol and remain available only on the configured metrics_listen_addr; setting metrics_listen_addr to empty disables the listener entirely. v0.29.7 · Oct 2026 · source · release history
  • Added Prometheus metrics headscale_mapper_changes_dropped_total and headscale_ha_health_updates_total to monitor dropped map updates and health probe efficiency. v0.29.4 · Sep 2026 · source · release history

example

  • Restrict Headscale metrics so they are only reachable on the local management interface, not through the Noise protocol. metrics_listen_addr: '127.0.0.1:9090' v0.29.7 · Oct 2026 · source
  • Monitor for dropped map updates or health probes to detect performance degradation. curl -s http://localhost:8097/metrics | grep 'headscale_mapper_changes_dropped_total\|headscale_ha_health_updates_total' v0.29.4 · Sep 2026 · source
Node Tagging shipped Allows administrators to create and list tags for nodes via CLI commands. 3 releases · 1 other source · first seen Jul 2022

Also counts toward: Command-line interface, gRPC API support

release

  • Enables user-owned nodes to request tags at registration via --advertise-tags, with tags manageable post-registration via headscale nodes tag or the SetTags API. v0.28.0 · Feb 2026 · source · release history
  • headscale tags list command to view node tags v0.16.0 · Jul 2022 · source · release history
  • headscale tags create command to assign tags to a node v0.16.0 · Jul 2022 · source · release history

example

  • Register an infrastructure node as tagged (server identity) rather than user-owned using a tagged PreAuthKey. headscale preauthkeys create --reusable --tags tag:server v0.28.0 · Feb 2026 · source
Split DNS Support shipped Implements per-node or per-ACL-based custom DNS resolver configuration. 4 releases · first seen Aug 2021

release

  • Restores support for Override local DNS behaviour. v0.26.0 · May 2025 · source · release history
  • Allow split DNS configuration without requiring global nameservers v0.20.0 · Feb 2023 · source · release history
  • Add support for Split DNS implements per-node or per-ACL-based custom DNS resolver configuration. v0.10.5 · Oct 2021 · source · release history
  • Passes DNSConfig to nodes in MapResponse. v0.7.1 · Aug 2021 · source · release history
MagicDNS Server Capability shipped Enables Headscale to act as a MagicDNS server, automatically resolving hostnames and generating search domains for the Tailnet. 3 releases · 1 other source · first seen Oct 2021

release

  • Adds dns.extra_records_path configuration option for supplying additional DNS records. v0.24.0 · Jan 2025 · source · release history
  • MagicDNS: Enables Headscale to act as a MagicDNS server, allowing nodes in the Tailnet to resolve each other's hostnames automatically. v0.10.0 · Oct 2021 · source · release history
  • Adds automatic generation of MagicDNS search domains for any configured tailnet range (defaulting to 100.64.0.0/10). v0.10.0 · Oct 2021 · source · release history

example

  • Serve custom DNS records (e.g. internal service entries) by pointing Headscale to an external records file. # In your headscale config.yaml: dns: extra_records_path: /etc/headscale/extra_records.json v0.24.0 · Jan 2025 · source
Configuration Validation on Startup shipped Refuses to start or errors when invalid configuration is detected, including a dedicated CLI command for pre-flight checks. 3 releases · first seen Mar 2023

Also counts toward: Command-line interface

release

  • OIDC issuer validation (oidc.issuer) and client credential checks (oidc.client_id, oidc.client_secret) now fail at startup, preventing silent misconfigurations in production environments. v0.29.4 · Sep 2026 · source · release history
  • New headscale policy check --file <file> command validates a policy file for errors before loading it. v0.26.0 · May 2025 · source · release history
  • Adds configtest CLI command to validate configuration files before starting v0.21.0 · Mar 2023 · source · release history
Enhanced PreAuth Key Management shipped Supports managing PreAuth keys by ID, secures them with bcrypt hashing, and simplifies API usage by removing user-specific constraints. 3 releases · first seen Jun 2021

release

  • Secures PreAuthKeys with bcrypt hashing; full key shown only once at creation, with prefix-only display (hskey-auth-{prefix}-***) when listing. v0.28.0 · Feb 2026 · source · release history
  • Introduces new key prefixes: hskey-auth-{prefix}-{secret} for PreAuthKeys, hskey-api-{prefix}-{secret} for API keys, and hskey-reg-{random} for web registration keys. v0.28.0 · Feb 2026 · source · release history
  • Adds support for ephemeral nodes using pre-auth keys that do not require re-authentication v0.1.0 · Jun 2021 · source · release history
ACME Certificate Configuration shipped Allows specifying ACME email address and URL for automatic TLS certificate generation. 3 releases · first seen Jun 2021

release

  • Embedded DERP server now requires a private key — add a filepath entry to derp.server.private_key_path in config. v0.23.0 · Sep 2024 · source · release history
  • Adds --acme-email and --acme-url configuration options to specify the ACME email address and URL for node registration v0.9.3 · Oct 2021 · source · release history
  • Adds support for automatic TLS certificates via Let's Encrypt (autocert) v0.1.0 · Jun 2021 · source · release history
CLI JSON Output Support shipped Provides structured JSON output for CLI commands and internal status queries to facilitate automation and scripting. 3 releases · first seen Jun 2021

Also counts toward: Command-line interface, JSON data export

release

  • Disables the version check mechanism when JSON output format is requested, preventing unwanted version mismatch warnings during automated deletions. v0.10.2 · Oct 2021 · source · release history
  • Uses JSON output format for the internal tailscale status command instead of plain text. v0.9.0 · Sep 2021 · source · release history
  • Adds the --json flag to CLI commands to output results in JSON format v0.1.0 · Jun 2021 · source · release history
SSH forwarding restrictions shipped Allows operators to disable SSH agent forwarding and port forwarding on a node for all Tailscale SSH sessions, either via the `TS_SSH_DISABLE_FORWARDING` environment variable or ACL policy, to limit exposure on nodes accessible to untrusted users. 1 release · 1 other source · first seen Oct 2026

release

  • Disable SSH agent and port forwarding on a node by setting TS_SSH_DISABLE_FORWARDING=1 in the tailscaled service environment; applies to all Tailscale SSH sessions on that node and works on older clients too.⁠︀︄︇︀︅︉︀︅︀︀︃︀︀︅︅︀︅︊︀︄︆︀︃︄⁠ v0.29.7 · Oct 2026 · source · release history

example

  • Lock down SSH agent and port forwarding on a node exposed to untrusted users via Tailscale SSH. # In the tailscaled systemd service override or environment file: TS_SSH_DISABLE_FORWARDING=1 v0.29.7 · Oct 2026 · source
File Transfer via Mesh shipped Enables receiving files over the mesh network using Tailscale's Taildrop mechanism. 2 releases · first seen Sep 2021

release

  • Adds taildrop.enabled configuration option to enable or disable Taildrop file sharing. v0.28.0 · Feb 2026 · source · release history
  • Adds taildrop support for receiving files over the mesh network v0.9.1 · Sep 2021 · source · release history
Noise Protocol Key Management shipped Provides CLI commands to generate private keys and requires configuration of `noise.private_key_path` for the noise protocol. 1 release · 1 other source · first seen Jan 2022

Also counts toward: Command-line interface

release

  • Adds a new keys generate subcommand to create a private key for headscale. v0.12.4 · Jan 2022 · source · release history

example

  • Generate a new private key for headscale from the command line. headscale keys generate v0.12.4 · Jan 2022 · source
DERP Configuration shipped Configures DERP relay settings and TLS certificates for mesh network connectivity, consolidating settings into a single configuration file. 2 releases · first seen Oct 2021

release

  • Bundles TLS certificates in the Docker image to allow fetching the DERP map directly from Tailscale v0.11.0 · Oct 2021 · source · release history
  • The separate derp.yaml file is removed; all DERP settings must now be defined in config.yaml according to the updated schema in /config-example.yaml v0.11.0 · Oct 2021 · source · release history
Namespace Management shipped Enables administrators to create, list, unshare, and destroy namespaces for organizing nodes and access control. 2 releases · first seen Jun 2021

Also counts toward: Command-line interface

release

  • Adds the headscale nodes unshare CLI command to remove a machine from a specific namespace v0.10.4 · Oct 2021 · source · release history
  • Adds new DestroyNamespace CLI subcommand to delete namespaces v0.1.0 · Jun 2021 · source · release history
Database Backend Configuration shipped Manages the underlying database backend, supporting SQLite as the default and allowing configuration of database file paths relative to the config directory. 2 releases · first seen Jun 2021

release

  • The default database backend changed from PostgreSQL (implied by previous versions) to SQLite; previously deployed instances using PostgreSQL will need migration v0.1.0 · Jun 2021 · source · release history
  • The db_path configuration key is now interpreted as relative to the directory where the config file resides if not absolute v0.1.0 · Jun 2021 · source · release history
Taildrive Support shipped Enables file-sharing capabilities via Taildrive, configurable through policy using node attributes and grants. 1 release · first seen Jun 2026

release

  • Taildrive file-sharing is now configurable through policy using drive:share/drive:access node attributes and tailscale.com/cap/drive grants. v0.29.0 · Jun 2026 · source · release history
Route Type Distinction shipped Distinguishes subnet routes from exit node routes internally to improve ACL granularity for exit node visibility. 1 release · first seen Nov 2025

release

  • Distinguishes subnet routes from exit node routes internally, improving ACL granularity for exit node visibility. v0.27.1 · Nov 2025 · source · release history
CLI gRPC Communication shipped Adds a gRPC server to Headscale for efficient CLI communication, replacing or supplementing previous transport methods. 1 release · first seen Dec 2021

Also counts toward: gRPC API support

release

MagicDNS Configuration Validation shipped Enforces that DNS servers are explicitly configured before MagicDNS can function, rejecting invalid configurations. 1 release · first seen Oct 2021

release

  • Headscale will now reject MagicDNS configuration if no DNS servers are explicitly set up. v0.10.0 · Oct 2021 · source · release history
TLS and HTTPS Configuration shipped Configures the control plane server to serve HTTPS traffic using either manually provided certificates or automatic issuance via Let's Encrypt. 1 release · first seen Jun 2021

release

  • Adds HTTPS support for the web endpoint with manually configured certificate and key files via config paths v0.1.0 · Jun 2021 · source · release history

Lines in monospace are the tool's own words: help text parsed from its source, or an endpoint from its API document. Under release, a line is our summary of a dated release. Under docs, it is quoted from the tool's own documentation or website. Each links back to the source it came from.

Score card

  1. Shipping velocity releases a month, last 12 months
  2. Documentation quality release-notes rubric, 0–100
  3. Breaking-change discipline how rarely a release breaks users, and notice given
  4. Maintenance risk quiet time against its own cadence, maintainers
  5. Innovation & surface new capabilities, API and MCP surface
  6. Community health
  7. Contributor trend distinct committers, this year against last
  8. Maintainer concentration bus factor now against a year ago
  9. Issue backlog trend issues closed per issue opened, 12 months
  10. Responsiveness median time to a maintainer’s first reply

Nine scores for Headscale, each built from the releases, notes and API history this site tracks — and, on Researcher and Business, where it stands among every measured tool in its category and how that has moved.

Score cards are part of every paid plan.

See plans →

Each score is 0–100 on a published rubric, derived from data this site already shows. A dimension we cannot measure says so — it is never scored 0 and never enters a rank.

How this is scored
  • Shipping velocity — releases a month over the last 12 months, on a log scale where 16 a month scores 100. Needs 3 releases in the window.
  • Documentation quality — the release-notes rubric published on the analytics page, unchanged.
  • Breaking-change discipline — the share of releases carrying a breaking change (none scores 100, half or more scores 0). Only projects that label breaking changes are measured: a clean record cannot be told from an unlabelled one.
  • Maintenance risk — quiet time measured against the tool's own release cadence (quiet longer than 90 days and three typical gaps scores 0), plus the number of active maintainers and whether contributors are growing, where known. Higher is lower risk.
  • Innovation & surface — new capabilities in the feature ledger this year, API and MCP operations added, and the share of commits that are features: the mean of whichever we hold.
  • Community health (open-source tools only) — each is a direction, not a size: contributors this year against last, the bus factor now against a year ago, and issues closed per issue opened, where steady scores 50, doubled 100 and halved 0; plus the median time to a maintainer's first reply (an hour scores about 100, a month or more 0). A commercial card has no repository and carries none of the four.
  • Documented delivery (commercial tools) — when a vendor's documented new capabilities have slowed against its own baseline, that counts against the overall standing as heavily as two low dimensions. Steady delivery, or too little history to judge, leaves the standing alone; it is never a sixth score.
  • Open-source tools are scored on repository signals; commercial tools on their published changelog. Ranks compare tools within one category and one profile and need at least five measured peers; the overall standing needs three ranked dimensions. Best-in-breed or consolidator is a shape, not a quality, and is never scored.

Release-note detail over time

See how much detail Headscale puts in its release notes, quarter by quarter, and compare it with tracked tools in the same category. This history uses up to ten retained, reviewed notes per tool; sparse or blank older quarters may reflect that limit.

Checking release-note history…

Explore the full chart →

Releases

Show

40 entries

  1. October 20261
  2. September 20261
  3. June 20263
  4. February 20261
  5. November 20251
  6. October 20251
  7. May 20251
  8. February 20251
  9. January 20251
  10. September 20241
  11. May 20231
  12. March 20231
  13. February 20231
  14. January 20231
  15. November 20221
  16. August 20222
  17. July 20221
  18. March 20221
  19. February 20222
  20. January 20221
  21. December 20211
  22. October 20217
  23. September 20212
  24. August 20213
  25. July 20212
  26. June 20211
    Show

    40 entries

    Project health

    Issue, contributor and maintainer activity in juanfont/headscale, 2023-10 – 2026-09, as of 2026-09-25. Twelve-month figures first; the trend lines run the whole window.

    1. Contributors 52 −6 vs prior 12 months
    2. Maintainers 2 +0 joined · −1 left, last 12 months
    3. Bus factor 1 committers behind half the commits
    4. Community-filed 84% of issues opened, last 12 months
    5. Median time to close 14 days first maintainer reply 3.1 days
    6. Open backlog 76 of 1,353 issues ever filed
    1. Issues opened / month 7 · 0 communitymaintainers
    2. Open backlog 76
    3. Contributors / month 9
    4. Commits / month 54
    5. Stars 43,875
    Issue themes, last 12 months
    • bugs 61%
    • features 26%
    • other 13%

    Counts from the project's public repository and git history; no individuals are identified. Maintainers are the committers covering 80% of the last year's commits. how we measure this

    Libraries its release ships

    What its latest release locks, checked against known advisories.

    None of its release's images build from a lockfile we can read.

    Add the badge to your README

    Maintain this project? The badge links readers straight to this page, so they can follow every release here.

    Tracked by Cyber Toolchain Choose a badge style and copy the code →
    browse all tools → score card for your toolchain →