Skip to main content

Heimdall - Web dashboard

Tired of old browser bookmarks? Learn how to self-host and set up Heimdall, a beautiful web dashboard that gives you immediate, personalized access to all your favorite applications and links via Docker.

· 6 min read
View raw
Christophe
Markdown, WSL and Docker lover ~ Insatiable curious.
Cet article existe aussi en français — lire la version française.

This article is over a year old but was reviewed on July 30, 2026 — the content is still accurate.

Heimdall - Web dashboard

⚡
TL;DR

Tired of cluttered browser bookmarks? This article introduces Heimdall, a visually appealing, self-hostable web dashboard for organizing your favorite applications and links. Learn how to quickly deploy Heimdall using Docker with a simple compose.yaml file. The guide walks you through the initial setup, from customizing the appearance and creating organizational tags to adding your first applications. It also explains how to ensure your dashboard's configuration persists even if the container is removed.

https://heimdall.site/

I've never been a big fan of browser's bookmarks and in fact I have almost none. And, quite logically, I almost never display the favorite bar.

I only visit a few sites on a regular basis and my browser history remembers them; otherwise a famous search engine remembers them for me.

However, I'm not averse to a personalized homepage and I'm quite happy with Heimdall at the moment.

Heimdall is a web application you can self-host (and it's a piece of cake using Docker) on your computer.

Here is the official demo:

Heimdall - Web dashboard

You will define the look&feel of your homepage by specifying which links you want to have immediate access to and, for others, you will classify them according to folders. Nothing too complicated.

But it does give you a much nicer way of accessing your site than the outdated bookmarks management. It's perhaps one of the things that hasn't changed in thirty years.

Creating your dashboard​

Your values for this page
default
Applies to the commands on this pageSaved on this device only

Please create a dummy folder and jump in it:

>user@machine: ~/yourproject

$ mkdir ~/tools/dashboard && cd $_

In that folder, please create a file called compose.yaml with the following content (refers to official Docker Hub page for the latest version):

# cspell:disable
name: tools
services:
heimdall:
image: lscr.io/linuxserver/heimdall:latest
container_name: heimdall
environment:
- PUID=${USER_ID:-1000}
- PGID=${GROUP_ID:-1000}
- TZ=Europe/Brussels
volumes:
- ./config:/config
ports:
- 80:80
- 443:443
restart: unless-stopped

This is a Docker Compose configuration file that defines a single service called 'heimdall', which is a web-based application dashboard. It specifies the container image to use, sets up environment variables for user permissions and timezone, mounts a local config directory into the container, exposes ports for HTTP and HTTPS traffic, and configures the container to automatically restart if it stops unexpectedly.

Note

In the code here above, I've preferred the syntax PUID=${USER_ID:-1000} and PGID=${GROUP_ID:-1000} instead of just hardcoding 1000: on my computer, my Linux user id is 1002; not 1000 so I prefer to use a variable and, if the variable isn't defined, then use 1000 as default. Same for the group id.

Running the dashboard​

Once the compose.yaml file has been created, just run this command: USER_ID=$(id -u) GROUP_ID=$(id -g) docker compose up --build --detach.

This command will define our two USER_ID and GROUP_ID variables, initialise them to your own values then run the container.

Note

If you've hardcoded IDs in the compose.yaml file to, f.i. 1000 (because you know it's your IDs); then the command becomes shorter: docker compose up --build --detach

First run​

Once you've fired the docker compose up --build --detach command, you've already created the container i.e. you can already surf to http://localhost to see it in action.

http://localhost
The default welcome page

Let's play, click on the last button bottom right (the settings icon) and under Appearance, let's upload a new background image.

http://localhost
My own background

It's a lot more fun, isn't it?

Saving the configuration on disk​

Did you notice that, in the compose.yaml file there is a section called volumes with the following configuration?

volumes:
- ./config:/config

This YAML snippet defines a volumes section that mounts a directory from the host machine into a container. Specifically, it maps the './config' folder on the host to '/config' inside the container, allowing the container to read and write configuration files from your local machine.

It means that the config folder of Heimdall will be stored on your disk; in a folder called config too. That's the volume mechanism at work.

I can check this by running ls -alh on my host:

>user@machine: ~/yourproject

And, thus, everything I'll do in Heimdall will be saved on my computer. So, it means, if I've to stop and remove the Docker container, by running it again, I'll retrieve all my settings.

I suggest that, before adding new links, you first click on the Tags icon (the fifth icon bottom right) because you'll organize your links using tags and you have to create tags first.

http://localhost
Adding tags

Add as many tags as you want. For this tutorial, I'll just create one.

When finished, click on the Cancel button top right or click on the fourth button bottom right (called Application list)

Create a new application. You can choose between an Application type or a Website. In my current use, I always choose Website. I fill then the URL and click on Go.

Heimdall will extract the favicon in different sizes. I click on the one I wish.

http://localhost
Adding Docker

Automatically, Heimdall has filled in some properties in the bottom part of the screen. I'll remove Home dashboard from the Tags area and, instead, type Docker i.e. the tag I've previously created.

http://localhost
Adding Docker

Once saved, I'll get my new homepage:

http://localhost
Homepage with Docker

We can see that tags are represented as a folder. If I click on it, I'll enter in the folder and see all applications having this tag.

I can, too, add applications that will appear immediately on the homepage (like shortcuts on your desktop). To do this, create a new application and keep Home dashboard in the list of tags.

Let's explore that Application Type feature:

http://localhost
Application type

It's just something like a snippet. If I select Bitwarden from there, Heimdall will do basic initializations; it'll fill in the Application name textbox and the icon. Ok, why not.

I'll point the URL to https://vault.bitwarden.com/#/login and I'll keep Home dashboard as tag.

http://localhost
With Bitwarden

Here is the dashboard I'm using at work. Since it's so easy to add new items; I'm doing changes to it as soon as I'm working on a new project.

http://localhost
Final Heimdall dashboard

More customizations​

By clicking on the last icon bottom right, you can customize a few more things in Heimdall. You can display f.i. a search engine which is nice.

You can customize the CSS and add some JS too.

Continue your journey​

Visit the official site https://heimdall.site/ to get updates and docs.

Two other self-hosted applications I keep running next to Heimdall: Uptime Kuma, to know when one of those links is down, and Memos for note-taking.

Get inspirations by searching dashboard heimdall homepage on Google Search images.


🦋 Join the conversation on BlueskyRequires a free Bluesky account to like, repost or comment. This block talks to Bluesky's public API directly from your browser (no cookies, no sign-in) — that means your IP address reaches Bluesky's servers just by this section loading.

Loading comments…

Was this article helpful?
Did you try the steps in this article?