Skip to content

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.

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

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-amd64

The 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.

In production, GitHub mode requires the RELEASE_ARTIFACT_MANIFEST_PUBLIC_KEYS env var. This is the base64 SPKI of the Ed25519 public key that signs our release manifests. The API verifies every fetched manifest against this key before trusting its checksums, so a compromised GitHub release alone can’t deliver tampered binaries.

For the official Breeze releases, use the published trust anchor:

Terminal window
RELEASE_ARTIFACT_MANIFEST_PUBLIC_KEYS=yzx8ftmcls6uBetFC5SYnZhBo+cbur3IX50TbBthTso=

This is a public key (also embedded in the agent and CI), so it is safe to commit. Only override it if you build and sign your own binaries. The API refuses to start in production without it. During a signing-key rotation you can trust multiple keys at once by comma-separating them (RELEASE_ARTIFACT_MANIFEST_PUBLIC_KEYS=old,new).

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:

  1. Scans AGENT_BINARY_DIR for agent binaries
  2. Computes SHA-256 checksums and registers each binary in the agent_versions table
  3. Marks them as the latest version
  4. If S3 is configured, syncs both directories to your S3 bucket

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/helper
depends_on:
binaries-init:
condition: service_completed_successfully

The init container:

  1. Runs on every docker compose up (pull_policy: always ensures the latest image is pulled)
  2. Copies bundled binaries to the shared binaries volume
  3. Exits (restart: “no”)
  4. 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.

When BINARY_SOURCE=local and S3 credentials are configured, Breeze:

  1. On startup: syncs local binaries to your S3 bucket
  2. 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 binaries
  • s3://{bucket}/viewer/ — viewer installers
GET /api/v1/agents/download/:os/:arch
Parameter Values
os linux, darwin, windows
arch amd64, arm64
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
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).

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.

GET /api/v1/agents/install.sh

One-line agent installer that auto-detects OS/arch, downloads the binary, enrolls, and installs as a system service.

Agents download directly from GitHub. No configuration needed:

.env
# BINARY_SOURCE=github (default, no change needed)