Setup guide

Choose how VoxHF reaches your cockpit.

Run it entirely on the Altitude PC, connect that PC to an existing private server, or operate the complete relay yourself. Start with the path that matches what you actually need.

Path 01

Local Slim

Everything operational stays on the Windows PC running Altitude. This is the smallest installation and the correct starting point for most pilots.

Install the requirements

VoxHF requires Node.js 20 or newer and ffmpeg with Speex support.

winget install OpenJS.NodeJS.LTS
winget install Gyan.FFmpeg

Open a new terminal after installation.

Get Local Slim

Download voxhf-local-<version>.zip and SHA256SUMS.txt from the matching GitHub release. Extract the complete archive to a normal user folder.

Open releases

Start the agent

Double-click start.bat. On first launch the setup wizard creates private config.json and detects a suitable Ethernet or Wi-Fi IPv4 address.

Connect PilotUI

Double-click start.bat before opening PilotUI. Enter the IPv4 address printed in the VoxHF console as the PilotUI Simulator Address, then connect Altitude normally.

Open the workspace

http://localhost:3000

The local browser workspace needs no account and is not exposed to the public internet.

Path 02

Existing server

Your local agent still owns the Altitude and IVAO-facing connections. The external server supplies account access and relays allowlisted state, commands and live audio to trusted browsers.

Choose an operator

Ask the server operator for the hosted app URL, relay URL and a one-time registration code when registration is invite-only. Independent servers may run modified software; review the operator's information before registering.

Browse listed servers

Create your account

Open the server app's /register page. Enter your own username, password and invitation code. Save the personal agent token shown once after registration.

Configure Local Slim

From the extracted Local folder, use the guided setup:

npm.cmd run setup -- agent

Enter the server's relay URL, your personal agent token and a recognizable simulator-PC name.

Alternatively, open the existing config.json and update only these fields:

{
  "remoteAgentEnabled": true,
  "remoteRelayUrl": "wss://relay.example.com",
  "remoteRelayToken": "paste-your-personal-agent-token",
  "remoteDeviceId": "my-simulator-pc",
  "remoteDeviceName": "My Simulator PC"
}

Use the relay URL supplied by the operator. Keep remoteDeviceId stable for this PC; remoteDeviceName is the friendly name shown in the app. Preserve every other setting already present in config.json.

Restart and verify

Restart start.bat. The console should report the remote agent as connected. Sign in to the hosted app from each trusted PC or phone using the same account.

Keep local fallback

http://localhost:3000 remains available even when the external relay is unavailable. No PilotUI, PilotCore, FSD or TS2 proxy port is opened to the internet.

Path 03

Self-hosted server

Use this route when you want control over accounts, storage, updates and availability. One Linux VPS runs the landing page, hosted app and relay behind automatic HTTPS.

Prepare the VPS and DNS

Use a current Ubuntu or Debian VPS with a public IP address. Create three DNS records pointing to that address and wait until all three resolve:

your-domain.example
app.your-domain.example
relay.your-domain.example

The first serves the public site, the second the operational app, and the third the relay and admin panel.

Install Docker and host tools

apt update
apt install -y docker.io docker-compose-v2 git curl ufw
systemctl enable --now docker
docker --version
docker compose version

If your distribution does not provide docker-compose-v2, install Docker Engine and the Compose plugin from Docker's official repository. Do not continue until docker compose version succeeds.

Open only the required ports

Allow your real SSH port before enabling the firewall, then expose HTTP and HTTPS:

ufw allow OpenSSH
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable
ufw status

VoxHF does not require any other public port. Keep the local PilotUI, PilotCore, FSD, TS2 and webapp ports private.

Clone VoxHF Server

A Git checkout is recommended because the managed update and rollback commands use its history.

git clone https://github.com/leledeste/voxhf.git /opt/voxhf
cd /opt/voxhf
chmod +x infra/docker/voxhf-server.sh

Create private configuration

infra/docker/voxhf-server.sh setup

Enter the base domain without https://, an email address for TLS notices, and choose either Private token for one owner or Accounts for invite-only multi-user access. Store every generated token in a password manager. The wizard creates the Git-ignored infra/docker/.env; never commit or share it.

Validate and start

infra/docker/voxhf-server.sh doctor
infra/docker/voxhf-server.sh start
curl https://relay.your-domain.example/health

Startup builds both containers, obtains TLS certificates and waits for relay health. DNS must already point to the VPS and inbound TCP 80/443 must be reachable.

Complete access setup

Accounts: customise the neutral Terms and Privacy templates before inviting other people. Then open https://relay.your-domain.example/admin, use the bootstrap token to create the owner, create a one-time invite under Access, and register at https://app.your-domain.example/register. Save the personal agent token shown after registration.

Private token: use the relay token printed by the wizard for the local agent and browser Remote settings. The browser must also be paired with the short-lived code printed by the agent.

MFA for the owner account is optional and can be enabled later from the admin Security section.

Connect the Altitude PC

Install Local Slim on the Windows PC, then configure its outbound connection:

npm.cmd run setup -- agent

Enter wss://relay.your-domain.example, the personal agent token and a recognizable PC name. Restart start.bat; the console must report the remote agent as connected. The local workspace remains available at http://localhost:3000.

Verify the complete path

Open the base domain, sign in at the app domain, confirm the agent is online, and test COM, XPDR, chat, RX and TX from a trusted browser before relying on the deployment during a flight.

infra/docker/voxhf-server.sh doctor
infra/docker/voxhf-server.sh logs

Back up before updating

infra/docker/voxhf-server.sh backup
infra/docker/voxhf-server.sh update

Keep off-server copies of infra/docker/.env and the SQLite backups in infra/docker/backups/. Test restore <backup-file> before depending on those backups. After a managed update, rollback restores the previous commit and its pre-update database.

Read the complete self-hosting reference