dockyard

dockyard

Docker app from HackerHogs' Repository

Overview

Dockyard is a minimal, self-hosted tiled launcher dashboard for your favorite apps. Add tiles with a name, URL, and icon - or pick them from a dropdown list of running containers - show/hide them, and drag to rearrange. Optionally lock changes behind a password (with a forced change on first use). Everything is stored in a single apps.json file on a mounted volume.

Dockyard icon

Dockyard

A minimal, self-hosted tiled launcher dashboard for your favorite apps. Add apps with a name, URL, and icon; Alternatively from a dropdown list of your Dockers, show/hide them; drag to rearrange. Everything is stored in a single apps.json file on a mounted volume.

Copyright © 2026 Ray Munro. Licensed under the GNU GPLv3.

Running on Unraid

The easiest path is Unraid's Docker Compose Manager plugin (available in Community Applications), which lets you paste a compose file directly. If you'd rather build/run by hand over SSH, both options are below.

Option A: Docker Compose Manager plugin (recommended)

  1. Install "Docker Compose Manager" from Community Applications if you don't have it.
  2. Copy this whole unraid-tile-dashboard folder onto your Unraid box, e.g. into /mnt/user/appdata/dockyard-src (via the Unraid GUI file browser, scp, or a network share).
  3. In the plugin, create a new stack pointing at that folder (it will pick up docker-compose.yml).
  4. Before starting, edit the compose file's volumes: line if you want config stored elsewhere, e.g.:
    volumes:
      - /mnt/user/appdata/dockyard:/data
    
  5. Start the stack. The dashboard will be at http://<unraid-ip>:8090.

Option B: build and run manually over SSH

scp -r unraid-tile-dashboard root@<unraid-ip>:/mnt/user/appdata/dockyard-src
ssh root@<unraid-ip>
cd /mnt/user/appdata/dockyard-src
docker build -t dockyard .
mkdir -p /mnt/user/appdata/dockyard
docker run -d \
  --name dockyard \
  --restart unless-stopped \
  -p 8090:3000 \
  -v /mnt/user/appdata/dockyard:/data \
  --label net.unraid.docker.managed=dockerman \
  --label 'net.unraid.docker.webui=http://[IP]:[PORT:8090]/' \
  --label 'net.unraid.docker.icon=http://<unraid-hostname>.local:8090/icon.png' \
  dockyard

Then open http://<unraid-ip>:8090. The --label flags make Unraid's Docker tab show a WebUI button and icon for the container even though it wasn't created from an Unraid template. Use your box's mDNS hostname (.local) for the icon label rather than its IP — see the callout in Option D below for why.

Option C: add as a custom container via the Unraid GUI

If you'd rather not use compose, build the image first (Option B's docker build step, or push it to a registry like Docker Hub / GHCR from your dev machine), then in Unraid's Docker tab click Add Container and set:

  • Repository: dockyard (or your pushed image name)
  • Port: container 3000 → host 8090 (or any free port)
  • Path: container /data → host /mnt/user/appdata/dockyard
  • WebUI: http://[IP]:[PORT:8090]/

Adding it through this form (rather than the labels in Option B) also gets you a proper Unraid template, so the container shows up with full Edit/icon support like any other app.

Option D: use the included Unraid template

templates/dockyard.xml in this repo is a ready-made Unraid template with proper fields for the WebUI port, data path, optional EDIT_PASSWORD, and the optional Docker socket mount, pointing at the prebuilt image published to GitHub Container Registry (see below) — no local build required. Copy it to Unraid's user-templates folder:

curl -o /boot/config/plugins/dockerMan/templates-user/my-dockyard.xml \
  https://raw.githubusercontent.com/RayMunro/dockyard/main/templates/dockyard.xml

This does two things without touching a running container:

  • If a container named dockyard is already running (e.g. from Option B), Unraid's Docker tab immediately gains a proper Edit option for it, with labeled fields instead of a raw/unlisted container.
  • It also appears as a template when you click Add Container, so installing fresh presents the same configuration screen — letting you change the port, path, or password before the container is even created.

If you built the image locally instead (Option B) and want the template to use that rather than pulling from the registry, edit the Repository field to dockyard:latest after copying the template over.

If the icon ever shows as a broken/question-mark placeholder, that's Unraid's own caching, not your config: it downloads a container's icon once and never retries once any file is cached for it. Force a refresh with the same script "Check for Updates" uses:

/usr/local/emhttp/plugins/dynamix.docker.manager/scripts/dockerupdate nonotify

Prebuilt image

Every push to main builds and publishes the image to GitHub Container Registry via a GitHub Actions workflow:

ghcr.io/raymunro/dockyard:latest

This is what templates/dockyard.xml and the Community Applications listing use — you don't need Docker installed anywhere to run Dockyard this way, just docker run or Unraid's own container UI pointed at that image.

Using it

  • + Add App — add a tile: name, target URL, and an icon (paste an image URL, or upload a small PNG/SVG/ICO). Leaving the icon blank shows a letter avatar. A good source for app icons is https://dashboardicons.com or the app's own favicon (e.g. http://192.168.1.10:8989/favicon.ico).
  • Edit Layout — reveals hide/edit/delete controls on every tile (including hidden ones) and lets you drag tiles into any order. Click Done to return to the normal launcher view, which only shows enabled tiles in your chosen order.
  • Clicking a tile in normal mode opens its URL in a new tab.

All data lives in /data/apps.json and /data/icons/ inside the container — back up that mounted folder if you want to preserve your layout.

Setting a background image

While in Edit Layout mode, a Set Background button appears. Upload an image (up to 10MB) to use it as the page background, or remove it to go back to the default gradient. It's stored at /data/backgrounds/ and shared for everyone who views the dashboard — this is a site-wide setting, not per-viewer.

Picking apps from running containers

Instead of typing name/URL by hand, the Add App form has a Pick from Running Containers button that lists containers currently running on the host and auto-fills the form when you pick one (name, a guessed URL from its first published port, and its icon if the container has an net.unraid.docker.icon label).

This requires mounting the Docker socket into the container:

volumes:
  - /var/run/docker.sock:/var/run/docker.sock:ro

Security note: even mounted :ro, this gives Dockyard's process the same level of control over Docker on the host as root would have — the :ro flag only stops the container from overwriting the socket file itself, not what API calls it can make through it. Dockyard's own code only ever calls the read-only list-containers endpoint, but anyone who compromised Dockyard would inherit that full access too. Leave the socket unmounted if you'd rather not take on that risk — the picker just shows a clear error and everything else works normally.

The guessed URL only works cleanly for containers using bridge networking with published ports; containers on host networking or with no exposed ports still appear in the list but need the URL filled in by hand.

Password-protecting changes

By default anyone who can open the dashboard can also add, edit, delete, reorder, or hide tiles. To require a password before any change can be made (viewing/launching tiles stays open to everyone), set the EDIT_PASSWORD environment variable on the container:

  • Compose: uncomment the environment: block in docker-compose.yml and set EDIT_PASSWORD to your chosen password.
  • Unraid GUI container: add a variable named EDIT_PASSWORD with your password as the value.

Once set, clicking Edit Layout or + Add App prompts for the password. After entering it correctly, editing stays unlocked for that browser session (12 hours, or until you click the lock icon in the top bar to lock it again immediately). Five wrong attempts locks out further attempts for 5 minutes.

EDIT_PASSWORD only ever sets the initial password. The first time it's used to unlock, you're immediately required to set a new password before any change can be made — there's no way to skip this and start editing with the initial password. That new password is hashed and stored in /data/auth.json on the mounted volume, so:

  • It survives container restarts and updates.
  • Changing or removing EDIT_PASSWORD afterward has no effect — it's only read when no password has been set yet.
  • You can rotate the password anytime afterward via the Change Password button that appears in the top bar once unlocked.
  • To fully reset (e.g. you forgot the password), delete auth.json from the data volume and restart the container with EDIT_PASSWORD set again.

Leaving EDIT_PASSWORD unset keeps the original open-editing behavior.

Local development

cd server
npm install
DATA_DIR=../data PORT=3000 npm start

Then open http://localhost:3000.

Install Dockyard on Unraid in a few clicks.

Find Dockyard in Community Apps on your Unraid server, review the template, and click Install. Unraid handles the Docker app or plugin setup from the published template.

Open the Apps tab on your Unraid server Search Community Apps for Dockyard Review the template variables and paths Click Install

Related apps

Details

Repository
ghcr.io/raymunro/dockyard:latest
Last Updated2026-09-07
First Seen2026-09-05

Runtime arguments

Web UI
http://[IP]:[PORT:3000]/
Network
bridge
Shell
sh
Privileged
false

Template configuration

WebUI PortPorttcp

Port to reach the Dockyard web interface on

Target
3000
Default
8090
Value
8090
DataPathrw

Persistent storage for your app list, icons, background image, and password

Target
/data
Default
/mnt/user/appdata/dockyard
Value
/mnt/user/appdata/dockyard
Edit PasswordVariable

Optional: sets an initial password required before any changes can be made (you'll be forced to change it on first use). Leave blank for open editing.

Target
EDIT_PASSWORD
Docker Socket (optional)Pathro

Optional: mount to enable 'Pick from Running Containers' in the Add App form. Security note: even mounted read-only, this gives Dockyard's process full control over Docker on this host - leave blank to skip.

Target
/var/run/docker.sock