Installation
Install the client
Curl installer (recommended)
curl -fsSL https://get.hle.world | shInstalls via pipx (preferred), uv, or pip-in-venv. To pin the current release:
curl -fsSL https://get.hle.world | sh -s -- --version 2609.6To also enroll the machine as an agent and run it as a service that starts at boot:
curl -fsSL https://get.hle.world | sh -s -- --agentpipx
pipx install hle-clientHomebrew
brew install hle-world/tap/hle-clientUpdate the client
One command, whichever way you installed it:
hle updateIt works out where the client lives — pipx, uv, a venv, Homebrew, plain pip —
and runs the right upgrade. Then it rebuilds any services installed on the
machine against the new client and restarts them, because a service started
before the upgrade is still running the old code while hle version reports
the new one.
To look before you leap, or to pin a version:
hle update --checkhle update --version 2609.5If a client was upgraded some other way — a package manager, a restored backup — the services on the machine can be left describing the old one. Rebuild them without touching the client:
hle daemon refresh --allRun it as a service
To keep a tunnel (or the agent) running across reboots, install a systemd unit or launchd job:
# The dashboard-managed agent — all endpoints in one servicehle daemon install agent
# Or a single fixed tunnelhle daemon install tunnel ha http://localhost:8123Scope is auto-detected: as root you get a system service that starts at boot, as
a normal user you get a per-user one. Force it with --system or --user.
Credentials are read at runtime from ~/.config/hle/ and never written into the
service file.
Manage it with hle daemon status, hle daemon list, and
hle daemon uninstall. See the agent guide for logs and
troubleshooting.
Get an API key
- Sign up at hle.world/register
- Go to Dashboard > Keys
- Click “New API Key” and copy the key
Expose a service
hle tunnel create http://localhost:8123 --api-key hle_your_keyYour service is now accessible at https://<label>-<code>.hle.world
Save your API key
To avoid passing --api-key every time, set the environment variable:
export HLE_API_KEY=hle_your_keyOr save it permanently in your shell profile (~/.bashrc, ~/.zshrc, etc.).
The client also stores your key in ~/.config/hle/config.toml after the first successful connection.
Docker
Run the HLE client as a Docker container:
docker run -d --name hle-tunnel \ -e HLE_API_KEY=hle_your_key \ ghcr.io/hle-world/hle-client:latest \ expose --service http://host.docker.internal:8123 --label haKubernetes sidecar
Run the HLE client as a sidecar container alongside your app:
containers: - name: my-app image: my-app:latest ports: - containerPort: 8080 - name: hle-tunnel image: ghcr.io/hle-world/hle-client:latest env: - name: HLE_API_KEY valueFrom: secretKeyRef: name: hle-credentials key: api-key command: ["hle", "expose", "--service", "http://localhost:8080", "--label", "myapp"]Licensing
The HLE client is MIT-licensed open source. You can inspect the code, build from source, and verify that nothing shady happens with your traffic. The relay server at hle.world is a managed service.