Self-hosting Homegames

Run a Homegames server on a machine in your house. Everyone on your network gets a game dashboard by typing homegames.link into any browser — no installs on their devices. (Curious how the URL magic works? See how it works.)

What you get

A self-hosted server is one process that does it all: it serves the Homegames client (the thing browsers render games with), runs the dashboard, and spins up game sessions — including the ~50 built-in games and any games you download from the catalog.

With the link service enabled, your server registers itself with homegames.link (an outbound-only connection), and every device on your network reaches it by typing homegames.link. Optionally you can enable HTTPS from the dashboard's settings: your network gets its own *.homegames.link subdomain pointed at the server's LAN address, with a real TLS certificate. Game traffic itself never leaves your network.

Download a build

The quickest way to self-host: a ready-to-run build with nothing to install — no Node, no git, no Docker. One download works on Windows, macOS, and Linux; it carries its own Node runtime for each platform, all the built-in games, and their assets, so it even plays fully offline.

⤓ Download Homegames  ·  Windows / macOS / Linux

Unzip it, then launch:

PlatformLaunch
Windowsdouble-click Play Windows.bat
macOSdouble-click Play Mac.command — if Gatekeeper objects the first time, right-click it and choose Open (or run bash "Play Mac.command" in Terminal)
Linuxrun ./play-linux.sh

A browser opens to the dashboard at localhost:7001 when the server is ready, and anyone on your network can join at http://<your computer's IP>:7001. Game sessions run as plain child processes, so Docker isn't needed.

One difference from a source install: homegames.link discovery is off by default in downloaded builds (they're built to run fully offline). To turn it on — so devices on your network can just type homegames.link — create a config file at %APPDATA%\homegames\config.json (Windows), ~/Library/Application Support/homegames/config.json (macOS), or ~/.homegames/config.json (Linux) containing:

{ "LINK_ENABLED": true }

then relaunch. Everything in the zip is readable source — poke around!

Requirements

The downloadable build above only needs the first item below. The rest apply when running from source:

Run from source

Prefer a git checkout — to hack on the server, or to stay on the latest code? The repos reference each other as sibling directories, so clone them side by side into one folder:

mkdir homegames-server && cd homegames-server
git clone https://github.com/homegamesio/squish
git clone https://github.com/homegamesio/homegames-common
git clone https://github.com/homegamesio/homegames-core
git clone https://github.com/homegamesio/homegames-client
git clone https://github.com/homegamesio/homegames

cd homegames-client
npm install && npm run build   # build the browser client bundle (served by the server)

cd ../homegames
npm install                       # links the sibling repos + installs deps
node index.js                     # no sudo needed

A browser opens to the dashboard (localhost:9801) when the server is ready; from any other device on the same network, open homegames.link.

What happens on first boot

  1. The homegames launcher starts homegames-core — the whole server, on port 9801 — and opens your browser when it responds. Game sessions get their own ports (8300–8400) as games launch.
  2. The server registers with homegames.link over an outbound connection and heartbeats every few seconds, so browsers on your network that visit homegames.link get redirected to it.
  3. That's it — by default everything runs over plain HTTP on your LAN.

Enabling HTTPS (optional)

Turn on secure connections from the dashboard's settings. The server asks the Homegames API which *.homegames.link subdomain your network is assigned, generates a keypair locally, and submits a certificate signing request — the private key never leaves your machine. The key and certificate are stored in your OS's application-data directory (e.g. ~/Library/Application Support/homegames/hg-certs on macOS, ~/.homegames/hg-certs on Linux) and renew automatically when they near expiry.

Certificate issuance runs in the background (usually a minute or two) and takes effect when the server restarts — the settings UI restarts it for you. While it's pending, visitors to homegames.link see a "setting up a secure connection" page that refreshes itself and flips to your dashboard automatically once HTTPS is up.

LAN-only / dev mode

You can also run the server directly, without the launcher. This is the fastest loop for development (it's how the games in the docs are typically iterated on locally):

# the whole server — dashboard + web client on port 9801
cd homegames-core && npm install && npm start

Then open http://localhost:9801. To boot straight into one game instead of the dashboard (great while building a game), set START_PATH in homegames-core's config.json to that game's index.js.

Configuration

Configuration lives in config.json, overridden key-by-key by a user config in your OS's application-data directory (that's what the dashboard's settings UI writes), and any key can be overridden with an environment variable of the same name. The keys you're most likely to touch:

KeyDefaultMeaning
LINK_ENABLEDtrueRegister with homegames.link so devices on your network can find the server
HOME_PORT9801The main port — dashboard, web client, and game WebSocket
HOMENAMES_PORT7400Port of the session/player management API (host-local)
GAME_SERVER_PORT_RANGE_MIN / MAX83008400Port pool for individual game sessions
HTTPS_ENABLEDfalseServe TLS using certs from hg-certs (normally toggled from the dashboard settings)
FORK_SESSIONS_ENABLEDfalseRun game sessions as plain child processes when Docker isn't available
START_PATHBoot directly into one game instead of the dashboard
TESTS_ENABLEDfalseShow the built-in diagnostic/test games in the dashboard

Ports & firewall

Devices on your LAN need to reach the server on:

Nothing needs to be reachable from the internet — no port forwarding, no router configuration. The homegames.link connection is outbound-only.

Troubleshooting

Hosting the whole platform

Everything behind homegames.io is open source too — the API, the website, the link service, and the background worker. Running your own complete platform (your own catalog, studio, and cert authority) is possible but is a much bigger project: the API alone wants MongoDB, RabbitMQ, a Forgejo git server, and Docker, and the cert flow needs a domain with DNS you control. If you're seriously interested, start with the READMEs in the homegamesio GitHub org — each repo documents its own moving parts — or email joseph@homegames.io.

Something wrong or confusing on this page? Email joseph@homegames.io or open an issue on GitHub.