Fork of tale/headplane (Heady). Web UI for the supported.systems headscale tailnet.
Find a file
Ryan Malloy 1ced46e680 🍴 ENTERPRISE SECURITY FORK: Complete OIDC overhaul + architecture realignment
This commit marks the creation of the enterprise security fork, fundamentally
realigning Headplane's architecture toward production VPN infrastructure requirements.

## 🚀 OIDC AUTHENTICATION REVOLUTION

### Convention Over Configuration Role Mapping
- Smart pattern recognition for common identity provider groups
- Case-insensitive matching works with any capitalization
- Role hierarchy ensures highest privilege wins
- Zero-config setup for 90% of identity providers

### Environment Variable Power
- Custom role mapping via HEADPLANE_*_GROUPS variables
- Override system with graceful fallbacks to conventions
- Enterprise-friendly configuration management
- Easy deployment customization without code changes

### Configuration Self-Healing
- Auto-scope detection adds "groups" scope automatically
- Auto-redirect generation from PUBLIC_URL/HEADPLANE_URL
- Provider-specific optimizations (Google, Azure AD, Keycloak, Okta)
- Helpful guidance and environment variable suggestions

### Production-Ready Quality
- 32/32 comprehensive tests passing
- Real-world provider scenario validation
- Complete TypeScript type safety
- Extensive error handling and logging

## 🏗️ ARCHITECTURAL VISION

### Security-First Philosophy
- Eliminated 38MB WASM SSH console (security nightmare)
- Designed guacamole + Python ASGI remote access architecture
- Server-side connections only, no client-side crypto
- Audit-friendly technologies that security teams understand

### Enterprise Integration Focus
- OIDC role mapping integrates with remote access permissions
- Comprehensive audit trails and session management
- Standards-based protocols over experimental approaches
- Maintainable, deployable, scalable solutions

## 📁 CORE CHANGES

### Implementation Files
- app/server/web/roles.ts - Intelligent role mapping engine
- app/utils/oidc.ts - Smart group extraction from claims
- app/server/config/oidc-enhancer.ts - Configuration self-healing
- app/routes/auth/oidc-callback.ts - Enhanced logging & error handling
- config.example.yaml - Simplified configuration examples

### Database & Testing
- drizzle/0003_add_groups_column.sql - Groups storage migration
- tests/oidc-improvements.test.js - Comprehensive test suite

### Documentation & Architecture
- OIDC_IMPROVEMENTS_SUMMARY.md - Complete implementation guide
- GUACAMOLE_REMOTE_ACCESS_DESIGN.md - Security-first remote access architecture
- WASM_SSH_REMOVAL.md - Justification for security improvements
- docs/OIDC-Authentication.md - User configuration guide

## 🎯 FORK JUSTIFICATION

The upstream project's commitment to a 38MB client-side WASM SSH console
reveals irreconcilable differences in architectural philosophy:

**Upstream Priority**: Technical novelty, feature completeness, "cool factor"
**Enterprise Fork Priority**: Security, auditability, production readiness

This fork targets organizations running production VPN infrastructure who need:
- Security-first development practices
- Enterprise identity system integration
- Audit trails and compliance tooling
- Maintainable, proven technologies

## 🚀 FORWARD VISION

This enterprise security fork establishes the foundation for:
- Advanced role-based access control
- Comprehensive audit and compliance features
- Multi-tenancy and organizational management
- API-first infrastructure as code support
- Integration with enterprise monitoring and SIEM systems

---

**Breaking Change**: This commit removes the WASM SSH console and establishes
a new security-focused architectural direction incompatible with upstream.

Organizations prioritizing VPN infrastructure security will find this fork
provides the enterprise-grade features and security posture they require.
2025-09-17 02:23:56 -06:00
.github chore: remove github pages workflow 2025-08-19 17:53:34 -04:00
.zed style: format go code on precommit 2025-06-16 11:45:24 -04:00
app 🍴 ENTERPRISE SECURITY FORK: Complete OIDC overhaul + architecture realignment 2025-09-17 02:23:56 -06:00
cmd feat: handle logging from the agent 2025-08-20 14:07:08 -04:00
docs 🍴 ENTERPRISE SECURITY FORK: Complete OIDC overhaul + architecture realignment 2025-09-17 02:23:56 -06:00
drizzle 🍴 ENTERPRISE SECURITY FORK: Complete OIDC overhaul + architecture realignment 2025-09-17 02:23:56 -06:00
internal feat: handle logging from the agent 2025-08-20 14:07:08 -04:00
nix feat: overhaul oidc work 2025-08-28 22:55:26 -04:00
patches feat: update to rolldown-vite and typescript-go 2025-08-18 16:42:29 -04:00
public feat: add logo and favicon (#238) 2025-06-09 10:30:03 -04:00
tests 🍴 ENTERPRISE SECURITY FORK: Complete OIDC overhaul + architecture realignment 2025-09-17 02:23:56 -06:00
.dockerignore feat: add docker build 2024-03-26 10:10:34 -04:00
.gitignore feat: documentation website using Vitepress 2025-08-18 13:10:38 -04:00
.npmrc feat: switch away from websocket to stdout messaging for agent 2025-05-25 11:02:19 -04:00
.tool-versions feat: build a debug-shell and distroless container 2025-06-24 10:56:43 -04:00
agent.Dockerfile feat: containerize agent 2025-01-15 10:17:30 +05:30
biome.json chore: update biome to v2 2025-08-19 17:52:26 -04:00
Caddyfile chore: add tooling for go wasm 2025-06-16 11:45:23 -04:00
CHANGELOG.md feat: overhaul oidc work 2025-08-28 22:55:26 -04:00
compose.yaml chore: add tooling for go wasm 2025-06-16 11:45:23 -04:00
config.example.yaml 🍴 ENTERPRISE SECURITY FORK: Complete OIDC overhaul + architecture realignment 2025-09-17 02:23:56 -06:00
Dockerfile chore: walk back on nonroot, its too much of a breaking change 2025-06-24 12:23:05 -04:00
drizzle.config.ts feat: cleanup removal of old ssh plexer and logic 2025-06-20 00:14:00 -04:00
flake.lock flake.lock: Update 2025-08-18 13:09:51 -04:00
flake.nix feat: nix: add a new mise task and nix flake output to generate NixOS docs 2025-08-18 13:10:38 -04:00
go.mod feat: handle logging from the agent 2025-08-20 14:07:08 -04:00
go.sum feat: handle logging from the agent 2025-08-20 14:07:08 -04:00
GUACAMOLE_REMOTE_ACCESS_DESIGN.md 🍴 ENTERPRISE SECURITY FORK: Complete OIDC overhaul + architecture realignment 2025-09-17 02:23:56 -06:00
lefthook.yml style: format go code on precommit 2025-06-16 11:45:24 -04:00
LICENSE chore: add license and readme again 2024-03-26 10:24:28 -04:00
mise.toml feat: overhaul hp_agent lifecycle handling 2025-08-19 00:10:06 -04:00
OIDC_IMPROVEMENTS_SUMMARY.md 🍴 ENTERPRISE SECURITY FORK: Complete OIDC overhaul + architecture realignment 2025-09-17 02:23:56 -06:00
package.json feat: overhaul oidc work 2025-08-28 22:55:26 -04:00
pnpm-lock.yaml feat: overhaul oidc work 2025-08-28 22:55:26 -04:00
react-router.config.ts feat: bundle node_modules into the server 2025-03-24 16:15:38 -04:00
README.md feat: documentation website using Vitepress 2025-08-18 13:10:38 -04:00
tsconfig.json feat: update to rolldown-vite and typescript-go 2025-08-18 16:42:29 -04:00
vite.config.ts feat: upgrade react-router + hono-server 2025-08-18 16:05:51 -04:00
vitest.config.ts Implement path loading 2025-08-05 13:15:03 -04:00
WASM_SSH_REMOVAL.md 🍴 ENTERPRISE SECURITY FORK: Complete OIDC overhaul + architecture realignment 2025-09-17 02:23:56 -06:00
wrangler.toml chore: add wrangler.toml 2025-08-18 13:37:53 -04:00

Headplane

A feature-complete web UI for Headscale

Preview

Headscale is the de-facto self-hosted version of Tailscale, a popular Wireguard based VPN service. By default, it does not ship with a web UI, which is where Headplane comes in. Headplane is a feature-complete web UI for Headscale, allowing you to manage your nodes, networks, and ACLs with ease.

Headplane aims to replicate the functionality offered by the official Tailscale product and dashboard, being one of the most feature complete Headscale UIs available. These are some of the features that Headplane offers:

  • Machine management, including expiry, network routing, name, and owner management
  • Access Control List (ACL) and tagging configuration for ACL enforcement
  • Support for OpenID Connect (OIDC) as a login provider
  • The ability to edit DNS settings and automatically provision Headscale
  • Configurability for Headscale's settings

Deployment

Headplane runs as a server-based web-application, meaning you'll need a server to run it. It's available as a Docker image (recommended) or through a manual installation. There are 2 ways to deploy Headplane:

  • Integrated mode unlocks all the features of Headplane and is the most feature-complete deployment method. It communicates with Headscale directly.

  • Simple Mode

    Simple mode does not include the automatic management of DNS and Headplane settings, requiring manual editing and reloading when making changes.

Versioning

Headplane uses semantic versioning for its releases (since v0.6.0). Pre-release builds are available under the next tag and get updated when a new release PR is opened and actively in testing.

Contributing

Headplane is an open-source project and contributions are welcome! If you have any suggestions, bug reports, or feature requests, please open an issue. Also refer to the contributor guidelines for more info.


ACLs Machine Management

Copyright (c) 2025 Aarnav Tale