Skip to main content

Installation

Prerequisites: Docker Engine + Docker Compose (Linux) or Docker Desktop (Windows/Mac).

Three commands to get started:

mkdir foundry-relay && cd foundry-relay
curl -O https://raw.githubusercontent.com/ThreeHats/foundryvtt-rest-api-relay/main/docker-compose.local.yml
docker compose -f docker-compose.local.yml up -d

That's it. The relay is now running at http://localhost:3010.

Open it in your browser, click Sign Up, and create your account. Your relay key is shown exactly once after registration — copy it into a password manager before dismissing the dialog. Then create a scoped API key from the dashboard's API Keys tab for all integrations.


Optional Configuration

To configure SMTP, rate limits, or other settings, grab the example config and edit it before starting:

curl -O https://raw.githubusercontent.com/ThreeHats/foundryvtt-rest-api-relay/main/.env.example
cp .env.example .env
# edit .env, then:
docker compose -f docker-compose.local.yml up -d

See Server Configuration for the full list of environment variables.


GPU Acceleration (Optional)

GPU acceleration improves headless Chrome performance for screenshots, sheet rendering, and canvas-heavy operations. The relay auto-detects the best available option once the device is exposed.

  • NVIDIA (Linux): install nvidia-container-toolkit, set it as the default Docker runtime, and restart Docker. No compose changes needed — the image already requests the right capabilities. See GPU Acceleration in Docker for the full setup. Note: use Docker Engine CE, not Docker Desktop — Docker Desktop on Linux runs in a VM and can't pass through the GPU.
  • Intel / AMD (Linux): expose /dev/dri in your compose file — see the commented-out example in docker-compose.local.yml.
  • Windows (Docker Desktop + WSL2): NVIDIA passthrough works — follow the Linux steps inside WSL2.
  • Mac: no GPU passthrough available; the relay falls back to software rendering automatically and still works.
NVIDIA toolkit version

Requires nvidia-container-toolkit >= ~1.14. Some distros (Pop!_OS, Ubuntu) ship older versions. If you see nvidia-container-runtime did not terminate successfully: exit status 2, upgrade from the NVIDIA repo:

sudo apt-get install \
nvidia-container-toolkit=1.19.0-1 \
nvidia-container-toolkit-base=1.19.0-1 \
libnvidia-container-tools=1.19.0-1 \
libnvidia-container1=1.19.0-1
sudo systemctl restart docker

Stopping and Updating

# Stop
docker compose -f docker-compose.local.yml down

# Update to latest image
docker compose -f docker-compose.local.yml pull
docker compose -f docker-compose.local.yml up -d

See Updating the Docker Image for more detail.


Other Setup Options


Accessing the Relay From Other Devices on Your LAN

The relay binds to 0.0.0.0 by default, so it's reachable from any device on your local network. The startup logs print every reachable URL:

INF Local URL url=http://localhost:3010
INF LAN URL (reachable from other devices on your network) url=http://192.168.1.42:3010

When configuring the Foundry module, point it at the LAN IP (http://192.168.1.42:3010), not localhost, unless Foundry is on the same machine as the relay.

If it doesn't work: check your host firewall has port 3010 open, and that your compose file publishes 3010:3010.


Manual Installation (No Docker)

  1. Prerequisites: Go 1.22+, Node.js v18+ and pnpm (for frontend build and tests), Chromium/Chrome (for headless sessions)

  2. Clone and run:

    git clone https://github.com/ThreeHats/foundryvtt-rest-api-relay.git
    cd foundryvtt-rest-api-relay
    pnpm run local:sqlite

    Or build the binary directly:

    cd go-relay
    go build -o relay ./cmd/server/
    DB_TYPE=sqlite PORT=3010 ./relay

The server will be running at http://localhost:3010.