Skip to content

Dashy

Dashy is a start page for the services on your server: sections, links, and optional live status for each one. One container, no database — a single YAML file describes the whole dashboard.

Last run on a host 8 Nov 2026

Pinned at 4.9.17 (released 7 Nov 2026) · the newest upstream release

To try it: Docker, nothing else. See Try it locally.

To deploy it behind the proxy: Traefik running and a domain.

On your own machine, with no proxy, domain or certificate. From apps/dashy/:

Terminal window
cp .env.local.example .env.local
docker compose -f docker-compose.local.yml --env-file .env.local up -d

Then open http://localhost:8080. Stop it again with the same command and down.

From apps/dashy/:

  1. Copy the environment file and set APP_TRAEFIK_HOST and TZ:

    Terminal window
    cp .env.example .env

    Then set APP_BASIC_AUTH_USERS. The route ships with a basic-auth gate, because Dashy’s own login runs in the browser only and protects nothing on the server; the placeholder is not a valid hash. Every $ in the hash is doubled for Compose — the command does it, paste the whole line:

    Terminal window
    htpasswd -nbB ops 'the-password' | sed -e 's/\$/\$\$/g'
  2. Create the dashboard configuration from the starter file:

    Terminal window
    mkdir -p config
    cp config/conf.example.yml config/conf.yml

    Edit config/conf.yml — sections, items and bookmarks. The Dashy configuring guide documents the schema.

  3. Start it:

    Terminal window
    docker compose up -d
  4. Open https://<APP_TRAEFIK_HOST>.

Terminal window
docker compose ps # one service, healthy
curl -sSI https://<APP_TRAEFIK_HOST>/ # 401 — the gate asks
curl -fsSI -u ops https://<APP_TRAEFIK_HOST>/ # asks for the password; 200 with it

config/conf.yml is mounted read-only, so the in-app editor cannot write to it. Edit the file and restart:

Terminal window
docker compose restart dashy-app

The file is the source of truth and belongs in version control, which is also why a change needs the restart to take effect.

The stack ships access-vpn with limit-standard and headers-standard — reachable over your VPN, refused from everywhere else. A dashboard names every service you run, which is a map worth keeping off the open internet.

Nothing to back up. There is no database, and the container holds no state of its own — config/conf.yml is the entire configuration and it is versioned in git. Restoring means checking out the repository and starting the container.

  1. Read the release notes.

  2. Raise APP_TAG in .env, then:

    Terminal window
    docker compose pull && docker compose up -d
  3. Load the dashboard and confirm the sections render — a schema change in conf.yml shows up as missing items rather than as a failed start.

A configuration change has no effect. The container reads conf.yml at start. Restart the app service.

The in-app editor refuses to save. The mount is read-only by design. Change the file instead.