Binary Distribution
Breeze serves agent binaries and viewer installers through its own API. The download source is configurable via BINARY_SOURCE, so downloads work regardless of how you deploy.
Binary Source Modes
Section titled “Binary Source Modes”Set BINARY_SOURCE to control where downloads come from:
| Mode | Description | When to use |
|---|---|---|
github (default) | Agents download directly from GitHub Releases CDN | Most deployments |
local | Serve from disk, with optional S3 offload | Distribute binaries from your own infrastructure |
GitHub Mode (Default)
Section titled “GitHub Mode (Default)”No local binaries needed. Download requests redirect to GitHub Releases:
GET /api/v1/agents/download/linux/amd64→ 302 https://github.com/lanternops/breeze/releases/download/v0.11.3/breeze-agent-linux-amd64The release version is determined by BINARY_VERSION or BREEZE_VERSION. If neither is set, redirects to the latest release.
On startup, the API calls GitHub’s Releases API to register the current version’s checksums in the agent_versions table, so agents know when a new version is available.
Local Mode
Section titled “Local Mode”Binaries are served from disk. The API reads from these directories:
| Variable | Default | Contents |
|---|---|---|
AGENT_BINARY_DIR | ./agent/bin | Agent binaries (e.g. breeze-agent-linux-amd64) |
VIEWER_BINARY_DIR | ./viewer/bin | Viewer installers (e.g. breeze-viewer-macos.dmg) |
HELPER_BINARY_DIR | /data/binaries/helper | Helper binaries (e.g. breeze-helper-windows.msi) |
On startup, the API:
- Scans
AGENT_BINARY_DIRfor agent binaries - Computes SHA-256 checksums and registers each binary in the
agent_versionstable - Marks them as the latest version
- If S3 is configured, syncs both directories to your S3 bucket
Docker Compose Setup
Section titled “Docker Compose Setup”The docker-compose.yml includes a binaries init container that bundles agent and viewer binaries into a shared volume:
services: binaries-init: image: ghcr.io/lanternops/breeze/binaries:${BREEZE_VERSION:-latest} pull_policy: always volumes: - binaries:/target restart: "no"
api: volumes: - binaries:/data/binaries:ro environment: BINARY_SOURCE: ${BINARY_SOURCE:-github} AGENT_BINARY_DIR: /data/binaries/agent VIEWER_BINARY_DIR: /data/binaries/viewer HELPER_BINARY_DIR: /data/binaries/helperdepends_on: binaries-init: condition: service_completed_successfullyThe init container:
- Runs on every
docker compose up(pull_policy: alwaysensures the latest image is pulled) - Copies bundled binaries to the shared
binariesvolume - Exits (restart: “no”)
- The API mounts the volume read-only
When BINARY_SOURCE=github (default), the API ignores the local volume and syncs versions from GitHub Releases instead. The volume is only used when BINARY_SOURCE=local.
S3 Offload (Optional)
Section titled “S3 Offload (Optional)”When BINARY_SOURCE=local and S3 credentials are configured, Breeze:
- On startup: syncs local binaries to your S3 bucket
- On download: returns a 302 redirect to a presigned S3 URL (falls back to disk if presigning fails)
This offloads download bandwidth from your API server to S3/R2/MinIO.
| Variable | Default | Description |
|---|---|---|
S3_ENDPOINT | — | S3-compatible endpoint |
S3_ACCESS_KEY | — | Access key |
S3_SECRET_KEY | — | Secret key |
S3_BUCKET | — | Bucket name |
S3_REGION | us-east-1 | Bucket region |
S3_PRESIGN_TTL | 900 | Presigned URL expiration in seconds (15 min) |
S3 is activated when S3_BUCKET, S3_ACCESS_KEY, and S3_SECRET_KEY are all set. Files are uploaded to:
s3://{bucket}/agent/— agent binariess3://{bucket}/viewer/— viewer installers
Download Endpoints
Section titled “Download Endpoints”Agent Binaries
Section titled “Agent Binaries”GET /api/v1/agents/download/:os/:arch| Parameter | Values |
|---|---|
os | linux, darwin, windows |
arch | amd64, arm64 |
Viewer Installers
Section titled “Viewer Installers”GET /api/v1/viewers/download/:platform| Parameter | Values | File |
|---|---|---|
platform | macos | breeze-viewer-macos.dmg |
windows | breeze-viewer-windows.msi | |
linux | breeze-viewer-linux.AppImage |
Helper Binaries
Section titled “Helper Binaries”GET /api/v1/agents/download/helper/:os/:arch| Parameter | Values |
|---|---|
os | linux, darwin, windows |
arch | amd64, arm64 |
Helper binaries are companion processes used for remote desktop in headless/service contexts (Session 0 on Windows, LaunchDaemon on macOS, systemd on Linux).
Backup Binary
Section titled “Backup Binary”The breeze-backup binary handles enterprise backup operations (Hyper-V, MSSQL, system image, cloud-to-cloud). It is bundled in installers, not downloaded separately:
- Windows MSI: installed to the same directory as
breeze-agent.exe - macOS .pkg: installed to
/usr/local/bin/breeze-backup - Linux: included alongside the agent binary
The backup binary communicates with the main agent over HMAC-signed IPC. It is not served through the download API — it ships as part of the agent installer package.
Install Script
Section titled “Install Script”GET /api/v1/agents/install.shOne-line agent installer that auto-detects OS/arch, downloads the binary, enrolls, and installs as a system service.
Decision Guide
Section titled “Decision Guide”Agents download directly from GitHub. No configuration needed:
# BINARY_SOURCE=github (default, no change needed)Distribute binaries from your own S3-compatible storage:
BINARY_SOURCE=localS3_ENDPOINT=https://s3.us-east-1.amazonaws.comS3_ACCESS_KEY=AKIA...S3_SECRET_KEY=...S3_BUCKET=breeze-binariesOn upgrade, the init container pulls the new binaries image, copies to the volume, and the API syncs to S3 automatically.
Build the agent and binaries are served from ./agent/bin:
cd agent && make build-all# API serves from AGENT_BINARY_DIR=./agent/bin (default)