armdash

Minimal, open source home server dashboard

A small dashboard for any home server.

armdash is a single static binary that shows what your home server and your FRITZ!Box smart home are doing, in around 20 MB of memory. Every number is read from Prometheus, so every number on screen has history behind it. Install the package, open the page, and set up the rest in the browser.

EUPL-1.2 · Linux, FreeBSD, macOS · x86, ARM, RISC-V · .deb, .rpm and Arch packages

The armdash mascot, a small single-board computer holding up a chart
The floor plan page: a flat drawn from its SweetHome3D file, with live power and temperature readings from the FRITZ!Box devices placed in its rooms
A real flat, imported from SweetHome3D, with live FRITZ!Box readings: power in teal, temperatures in indigo, doors in red.

Why not just Grafana?

Grafana is the obvious answer and a good one. But it is a large thing to run permanently on a 12 W board, it is not packaged for aarch64 in Arch Linux ARM or the AUR, and most of it goes unused when all you want is a handful of charts and a plan of your flat.

armdash is the small version of that. Go with the standard library only, server-rendered pages with htmx, Bulma and uPlot embedded in the binary. Nothing to install next to it, nothing to update behind its back.

Measured on the Radxa Dragon Q6A it was written for, it idles at around 20 MB of memory and under 0.1 % of one core. That leaves a small ARM board free for everything else, and it runs just as well on an x86 box.

  • Installone static binary
  • Memoryaround 20 MB
  • CPU at idleunder 0.1 % of a core
  • Databasenone, Prometheus keeps history
  • Runtime dependenciesnone
  • Go modulesstandard library only
  • Node toolchainnever
  • Runs onLinux, FreeBSD, macOS
  • Architecturesx86, ARM, RISC-V

What it shows

One tab per system. Each one is compiled in and shown or hidden on the settings page.

Host

Server metrics

CPU, memory, filesystems, temperatures, load and uptime from node_exporter. An overview of the current values and a chart per metric, from the last hour to the last year, each reloading on its own while it is open. The thermals chart names its lines, so a warm board tells you which part is warm.

FritzHome

FRITZ!Box smart home

Where the power goes, what is on, which window is open. Plugs, thermostats, sensors, contacts and bulbs, charted per device, plus the internet traffic. Read from the box itself over AHA or the REST API, so there is no exporter to run.

Floor plan

Your flat, to scale

Upload the .sh3d file straight from SweetHome3D: walls, rooms, doors, windows and furniture are drawn from it. An SVG or a photo of the plan works too. Press Edit and drag each sensor to where it sits.

Links

The rest of the server

Put your wiki, a Grafana or the router in the navbar. Each one opens in a frame, through the built-in reverse proxy, or in a new tab, from a few lines of configuration.

Config

Set up in the browser

The first visit creates the login, then the Settings page takes Prometheus, the FRITZ!Box and the navbar links, applied without a restart. A status box says what is still missing. Env files still work and win over the page.

Login

Open to look, locked to change

The dashboards stay open to your LAN, like a display on the wall. Uploading a plan, placing devices and opening Settings need the one owner login: a PBKDF2 hash, server-side sessions and failed logins limited per address.

A look around

Real pages, reading a real FRITZ!Box and a real Prometheus. Click one for the full size.

The FritzHome overview: power now, energy today, doors and windows, indoor climate, where the power goes, switches, contacts and climate tiles
The moment at a glance: power, doors and windows, the climate per room.
The settings page: Prometheus and FRITZ!Box forms on the left, a status box on the right with every check green
Set up in the browser, with a status box that says what is still missing.
The energy chart: a week of daily bars for three smart plugs and the house meter
A week of energy per day, per plug and for the whole flat. Every chart goes back as far as Prometheus keeps.

How it fits together

armdash keeps no history of its own. Prometheus scrapes node_exporter and armdash's /metrics, and armdash reads Prometheus back to draw the pages. Both exporters are packaged by the major distributions on ARM and x86 alike, so none of it needs containers. A Compose stack is there if you prefer them.

Install

Every release ships static binaries for Linux on amd64, arm64, armv7 and riscv64, and for FreeBSD and macOS on amd64 and arm64, plus .deb, .rpm and Arch packages for Linux, all built from the same commit.

# brings Prometheus and node_exporter along
$ sudo pacman -U armdash_*_linux_arm64.pkg.tar.zst

# scrape node_exporter and armdash
$ sudo cp /usr/share/armdash/prometheus.yml.example /etc/prometheus/prometheus.yml

# PROMETHEUS_ARGS="--storage.tsdb.retention.time=10y"
$ sudoedit /etc/conf.d/prometheus

$ sudo systemctl enable --now prometheus prometheus-node-exporter armdash

# then create the login and fill in the rest
$ xdg-open http://homeserver:9494/

The package brings a hardened systemd unit. It runs as its own unprivileged user on a read-only filesystem, with one writable directory for the settings, the uploaded floor plan and device positions. Ports 80 and 443 work without root.

It brings Prometheus and node_exporter along. The example configuration scrapes both, and the flag keeps ten years of history instead of 15 days. That is Arch: Debian and Fedora install with apt or dnf install ./ and take the flag in /etc/default/prometheus. The install guide has every step.

Point it at a certificate and it serves HTTPS, with the plain port redirecting there.

armdash is a LAN tool. Keep it on your home network and do not forward it to the internet.