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.
Try it locally
Section titled “Try it locally”On your own machine, with no proxy, domain or certificate. From apps/dashy/:
cp .env.local.example .env.localdocker compose -f docker-compose.local.yml --env-file .env.local up -dThen open http://localhost:8080. Stop it again with the same command and down.
Installation
Section titled “Installation”From apps/dashy/:
-
Copy the environment file and set
APP_TRAEFIK_HOSTandTZ:Terminal window cp .env.example .envThen 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' -
Create the dashboard configuration from the starter file:
Terminal window mkdir -p configcp config/conf.example.yml config/conf.ymlEdit
config/conf.yml— sections, items and bookmarks. The Dashy configuring guide documents the schema. -
Start it:
Terminal window docker compose up -d -
Open
https://<APP_TRAEFIK_HOST>.
Verify
Section titled “Verify”docker compose ps # one service, healthycurl -sSI https://<APP_TRAEFIK_HOST>/ # 401 — the gate askscurl -fsSI -u ops https://<APP_TRAEFIK_HOST>/ # asks for the password; 200 with itGoing further
Section titled “Going further”Changing the dashboard
Section titled “Changing the dashboard”config/conf.yml is mounted read-only, so the in-app editor cannot write to it.
Edit the file and restart:
docker compose restart dashy-appThe file is the source of truth and belongs in version control, which is also why a change needs the restart to take effect.
Who can reach it
Section titled “Who can reach it”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.
Backup
Section titled “Backup”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.
Updates
Section titled “Updates”-
Read the release notes.
-
Raise
APP_TAGin.env, then:Terminal window docker compose pull && docker compose up -d -
Load the dashboard and confirm the sections render — a schema change in
conf.ymlshows up as missing items rather than as a failed start.
Troubleshooting
Section titled “Troubleshooting”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.
Repository files
Section titled “Repository files”apps/dashy/README.md— setup, security model, known issuesapps/dashy/UPSTREAM.md— source and upgrade checklistapps/dashy/config/conf.example.yml— the starter configuration
Official sources
Section titled “Official sources”© 2026 SecDockBlueCode Apache-2.0Site content CC BY-NC 4.0