A Dashboard That Gets Out of Your Own Way
Most self-hosted dashboards arrive with feature lists that read like enterprise software brochures – widget libraries, plugin ecosystems, user roles, API integrations. Dasherr takes the opposite approach. It is a single HTML file with a configuration layer bolted on, designed to sit in a browser tab and show you exactly what you need without requiring a database, a reverse proxy setup, or twenty minutes of configuration just to add a link. If you run a home server with a handful of services, Dasherr is worth knowing about.
The appeal is not just minimalism for its own sake. A lightweight dashboard loads instantly, survives on almost no resources, and stays out of the way when something on your network breaks. Dasherr runs inside Docker with a footprint small enough to forget it is there – which is precisely the point. This guide walks through deploying it, configuring your services, and making it actually useful as a daily browser start page.

What You Need Before Starting
Dasherr requires Docker and Docker Compose. Beyond that, the prerequisites list is short: a host machine running Linux (a Raspberry Pi, an old mini PC, or a full home server all work fine), a terminal, and a text editor. You do not need a domain name, and you do not need SSL configured before getting started – though both are worth adding later if you plan to access the dashboard from outside your local network.
You should also decide where you want to store your configuration files. Dasherr keeps everything in a single app.json file, and you will mount that file into the container as a volume. Create a directory for it somewhere you manage your other Docker projects – for example, /opt/dasherr/config – and make sure your user has write permissions to it before proceeding.
Deploying Dasherr with Docker Compose
Create a docker-compose.yml file inside your chosen directory. The compose file is short. You are defining a single service using the official erohtar/dasherr image from Docker Hub, mapping a host port to container port 80, and mounting your config directory. A working minimal compose file looks like this:
version: “3”
services:
dasherr:
image: erohtar/dasherr
container_name: dasherr
restart: unless-stopped
ports:
– “3030:80”
volumes:
– /opt/dasherr/config:/www/public/db
Run docker compose up -d from the same directory. Docker will pull the image and start the container. Once it is running, open a browser and navigate to your host’s local IP address on port 3030 – something like http://192.168.1.100:3030. You should see a blank Dasherr page with no applications listed yet. That blank state is normal; nothing is configured until you edit the app.json file.
If the page does not load, check that port 3030 is not blocked by a firewall rule on your host. On Ubuntu or Debian systems using UFW, run sudo ufw allow 3030/tcp and try again. You can also change the host port in the compose file to anything you prefer – 8080 or 80 are common alternatives if 3030 feels arbitrary.

Configuring Your Applications
Dasherr reads its application list from app.json, which the container creates automatically on first run inside your mounted config directory. Open it in a text editor. The default file contains a sample entry showing the expected structure – each application is a JSON object with a name, URL, and optionally an icon.
Icons in Dasherr come from the walkxcode/dashboard-icons repository, which ships a broad set of SVG icons covering most self-hosted applications. To use one, you reference it by filename without the extension – so for Radarr, the icon value would be “radarr”, and for Plex it would be “plex”. If you run Radarr and Sonarr for automated media downloading, both have icons built into that library and drop straight into your config without any extra work.
Editing app.json and Reloading
A typical entry in app.json follows this pattern: {“appName”: “Jellyfin”, “appUrl”: “http://192.168.1.100:8096”, “appIcon”: “jellyfin”}. Each entry lives inside a top-level array called apps. You can add as many entries as you like, separated by commas. Keep the URLs as local IP addresses and ports unless you have a reverse proxy assigning subdomains – local addresses load faster and do not require any DNS resolution.
After saving changes to app.json, you do not need to restart the container. Dasherr re-reads the config file on each page load. Simply refresh the browser tab and your new applications will appear. This is one of the practical advantages of a file-based config system – there is no admin panel to log into, no save button to click, and no database transaction to wait on.
If you want to group applications visually, Dasherr supports a appCategory field on each entry. Adding a category string causes the dashboard to render a section header above the first application in that group. Keep category names short – “Media”, “Network”, “Dev”, “Home” – because they render inline and long strings push the layout around on smaller screens.

Setting Dasherr as Your Browser Start Page
The most direct way to use Dasherr is as a browser new tab page. In Chrome or Edge, go to settings, find the On startup or New Tab section, and set a specific page to your Dasherr URL. Firefox handles this through the Home settings tab. On mobile browsers like Firefox for Android, you can pin the URL as a home screen shortcut for the same effect.
For a cleaner setup, consider pairing Dasherr with a reverse proxy like Nginx Proxy Manager or Caddy so it sits at a subdomain such as dash.home.arpa instead of a raw IP and port. This also makes it easier to share access with other household members without explaining port numbers. If your home network uses Pi-hole for local DNS, you can add a custom DNS record pointing the subdomain directly to your server’s IP – no external DNS required, and the address works as long as you are on the same network.





