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.

Binary Source Modes

Set BINARY_SOURCE to control where downloads come from:

ModeDescriptionWhen to use
local (default)Serve from disk. Optional S3 offload.Docker Compose (init container populates a volume)
github302 redirect to GitHub ReleasesStandalone API image, or any deployment without local binaries

Local Mode

Binaries are served from disk. The API reads from two directories:

VariableDefaultContents
AGENT_BINARY_DIR./agent/binAgent binaries (e.g. breeze-agent-linux-amd64)
VIEWER_BINARY_DIR./viewer/binViewer installers (e.g. breeze-viewer-macos.dmg)

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

GitHub Mode

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.3.0/breeze-agent-linux-amd64

The release version is determined by BINARY_VERSION or BREEZE_VERSION. If neither is set, redirects to the latest release.

Docker Compose Setup

The default 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}
volumes:
- binaries:/target
restart: "no"
api:
volumes:
- binaries:/data/binaries:ro
environment:
AGENT_BINARY_DIR: /data/binaries/agent
VIEWER_BINARY_DIR: /data/binaries/viewer
depends_on:
binaries-init:
condition: service_completed_successfully

The init container:

  1. Runs once on docker compose up
  2. Copies bundled binaries to the shared binaries volume
  3. Exits (restart: “no”)
  4. The API mounts the volume read-only and serves files from it

S3 Offload (Optional)

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.

VariableDefaultDescription
S3_ENDPOINTS3-compatible endpoint
S3_ACCESS_KEYAccess key
S3_SECRET_KEYSecret key
S3_BUCKETBucket name
S3_REGIONus-east-1Bucket region
S3_PRESIGN_TTL900Presigned 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

Download Endpoints

Agent Binaries

GET /api/v1/agents/download/:os/:arch
ParameterValues
oslinux, darwin, windows
archamd64, arm64

Viewer Installers

GET /api/v1/viewers/download/:platform
ParameterValuesFile
platformmacosbreeze-viewer-macos.dmg
windowsbreeze-viewer-windows.msi
linuxbreeze-viewer-linux.AppImage

Install Script

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.

Decision Guide

Use the default setup. The init container handles everything:

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

Optionally add S3 for CDN-like distribution:

Terminal window
S3_ENDPOINT=https://s3.us-east-1.amazonaws.com
S3_ACCESS_KEY=AKIA...
S3_SECRET_KEY=...
S3_BUCKET=breeze-binaries