headplane/docs/Simple-Mode.md
Ryan Malloy 7c21720519
Some checks are pending
Build / native (push) Waiting to run
Build / nix (push) Waiting to run
Complete the Astro rewrite
Drop the entire app/ Remix tree (144 deletions) and replace with the
Astro + Alpine.js architecture under src/. The Remix entrypoint, routes,
components, layouts, server bindings, and types are all gone; the Astro
pages (acls, dns, machines, settings, terminal, users, login, index)
plus their API endpoints under src/pages/api/ now own the surface.

Other surfaces touched:
- package.json: drop react-router, react-router-hono-server, remix-utils
  and the rest of the Remix stack; pull in Astro + integrations + Alpine
- pnpm-lock.yaml: regenerated against the new dependency set
- astro.config.mjs added; vite.config.ts, react-router.config.ts dropped
- New src/lib/auth/ (oidc-client, role-mapper, session-manager) and
  src/lib/config/authentik.ts for env-driven config
- biome.json: enable VCS-aware filtering, exclude .astro/dist/data/
  upstream/ and the React Router backup
- Extensive docs (HEADY_MANIFESTO, AUTHENTIK_*, BETTER_ROLE_MAPPING* etc.)
  and example role-mapping yamls added under examples/
- New remote-access/ tree for the Guacamole-Lite integration
- terminal.astro: prerender disabled (data is request-time only)

Committed with --no-verify; biome auto-fix was applied first but there
are still lint warnings in the new code worth a separate cleanup pass.
The legacy app/ tree was never re-pushed after the rewrite, which is
why the Gitea/Docker builds were trying to compile app/routes/ssh/
console.tsx.
2026-06-06 13:05:35 -06:00

1.6 KiB

Simple Deployment

Note

: With Heady v1.0, we've unified the architecture! The distinction between "Simple" and "Integrated" modes has been streamlined. All deployments now support the full feature set, with integration capabilities configured through the integration section in your config.

Simple deployment enables you to quickly deploy Heady and is recommended for testing or environments where you want to manage Headscale separately. For advanced features like automatic DNS management and configuration updates, enable the appropriate integration in your configuration.

Deployment

If you are not looking to deploy with Docker, follow the Bare-Metal deployment guide.

Requirements:

  • Docker and Docker Compose
  • Headscale 0.26 or newer (already deployed)
  • A finished configuration file (config.yaml)

Here is what a sample Docker Compose deployment would look like:

services:
  heady:
    # I recommend you pin the version to a specific release
    image: ghcr.io/tale/heady:1.0.0
    container_name: heady
    restart: unless-stopped
    ports:
      - '3000:3000'
    volumes:
      - './config.yaml:/etc/heady/config.yaml'
      - './heady-data:/var/lib/heady'
    environment:
      - HEADY_CONFIG_PATH=/etc/heady/config.yaml

This will result in the Heady UI being available at the root path (/) of the server you deployed it on. The path prefix is configurable via the __INTERNAL_PREFIX environment variable if needed.

Refer to the Configuration guide for help with setting up your config.yaml file to the appropriate values.