Self-hosting HomeGrid

One container. Your hardware.

HomeGrid runs as a single container with a named volume for its SQLite database and uploads. You need Docker with the Compose plugin on an AMD64 or ARM64 host; no Go, Node.js or source checkout.

Install with Docker Compose

Download the Compose file of the current release into a directory on your Docker host. It is pinned to that release's image. To follow latest instead, use docker-compose.yml from the repository. Then run from that directory:

Shell
curl -fsSLo docker-compose.yml https://github.com/bifrost0x/homegrid/releases/download/v0.1.0/docker-compose-0.1.0.yml
docker compose up -d --wait
docker compose ps

Open http://<docker-host-ip>:8095 from your network, or http://localhost:8095 on the Docker host, and create the administrator account. There are no default credentials. Complete setup from a trusted network before exposing the installation more broadly.

The Compose file pulls the public image ghcr.io/bifrost0x/homegrid. It runs the container as UID/GID 65532 with a read-only root filesystem, a temporary /tmp, dropped capabilities and no-new-privileges. Only /data is writable. The Docker socket is not mounted, and a fresh named volume needs no permission changes.

Running Portainer? Paste the Compose file into a stack. The Docker guide covers stack variables and troubleshooting.

Configuration

Create a .env file beside docker-compose.yml. Compose reads it for variable interpolation; apply changes with docker compose up -d --wait. A plain restart does not pick up changed settings.

HomeGrid environment variables
VariableDefaultPurpose
HOMEGRID_BIND_ADDRESS0.0.0.0Compose host binding. Use 127.0.0.1 for access only from the Docker host.
HOMEGRID_PORT8095Compose host port.
HOMEGRID_IMAGEghcr.io/bifrost0x/homegrid:latestContainer image. Pin a release tag or digest for repeatable deployments.
TZUTCContainer timezone.
HOMEGRID_SECURE_COOKIEfalseSet to true when the browser reaches HomeGrid over HTTPS.
HOMEGRID_TRUSTED_PROXIESemptyComma-separated CIDRs of proxies you control, used only for forwarded client IPs.
HOMEGRID_LISTEN127.0.0.1:8080Native listen address. Compose sets 0.0.0.0:8080 inside the container.
HOMEGRID_DATA_DIR./dataNative data directory. Compose uses /data.

The native executable reads process environment variables and does not load .env files on its own.

LAN access and HTTPS

By default Compose publishes HomeGrid on every host interface at port 8095, subject to the host firewall. To keep it local to the Docker host, set:

.env
HOMEGRID_BIND_ADDRESS=127.0.0.1
HOMEGRID_PORT=8095

Direct port access uses plain HTTP. For access over an untrusted network, put HomeGrid behind an HTTPS reverse proxy and enable secure cookies:

.env
HOMEGRID_BIND_ADDRESS=127.0.0.1
HOMEGRID_SECURE_COOKIE=true

If sign-in reports an address or origin error, check that the proxy does not replace Host with the upstream container name or port.

Updates and version pinning

latest is a moving tag that follows the main branch. For repeatable deployments, pin a release tag or an image digest in .env:

.env
HOMEGRID_IMAGE=ghcr.io/bifrost0x/homegrid:0.1.0
# or: HOMEGRID_IMAGE=ghcr.io/bifrost0x/homegrid@sha256:<digest>

Available versions and their digests are listed on the releases page. To update:

  1. Make a full backup of the stopped data volume (see below).
  2. Change the pinned version, if you use one, and run docker compose pull.
  3. Run docker compose up -d --wait and check docker compose logs.

Database migrations run at startup. Schema downgrades are not supported: to roll back, start the previous image with a restored pre-upgrade volume.

Backups

Portable JSON export

Settings → Backup exports applications, categories and appearance as JSON. The export excludes passwords and sessions and references uploaded images by path without embedding them. Imports also accept Homepage, Homer and Dashy configurations, show a preview and offer merge or replace. Find unused images lists uploads that nothing uses anymore and deletes them after you confirm. Exports can reveal internal service names and addresses, so treat them as sensitive.

Full data-volume backup

The named volume holds the database, uploaded files and the administrator account. Stop HomeGrid for the entire copy: copying only homegrid.db from a running SQLite database is not a complete backup. The Docker guide provides tested commands that create a private archive and restore it into a new volume, leaving the original untouched until you have verified the result.

A volume backup contains the password hash and everything on your dashboard. Store it in a protected location and test a restore before you rely on it.

Uninstall

From the Compose directory, docker compose down removes the container and network and keeps your data volume. You can start again later with docker compose up -d --wait.

docker compose down -v permanently deletes the data volume, including the administrator account, applications and uploaded files. Run it only after you have a backup you no longer need, or when you intend to discard everything.

Afterwards, remove the image with docker image rm ghcr.io/bifrost0x/homegrid:latest (or the tag you pinned).

Know the boundaries.

What HomeGrid protects, what it leaves to you and how to report a problem.