Skip to content

Server Components

The desktop app is the full system. bae-proxy is its zero-knowledge subset for untrusted cloud hosting.

The desktop app (GUI or --headless) is a complete server. When a cloud home is configured, it serves cloud home proxy routes so followers and share link recipients connect directly to it.

  • Cloud home proxy routes (/cloud/*, /share/*) for followers and share links
  • Library images
  • Sync loop (pulls and pushes changesets to the cloud home)
  • Library management (import, edit, delete)

bae --headless runs without the GUI. It starts the cloud home proxy routes and sync loop, then runs until stopped with Ctrl+C.

This is for running bae on a home server, NAS, or VPS.

FlagPurpose
--headlessRun without the GUI
--portPort to listen on
--bindAddress to bind to (e.g., 0.0.0.0)

Run bae --headless on any machine with access to your library. A typical setup:

  1. Run bae --headless on a VPS or home server
  2. Point a domain at it (reverse proxy with nginx, Caddy, etc.)
  3. The server syncs from your cloud home and serves the library

This gives you a public URL for share links and follow connections.

For users without a static IP or custom domain, options include Tailscale Funnel, ngrok, Cloudflare Tunnel, or UPnP port forwarding.

bae-proxy is a zero-knowledge subset of the desktop app for untrusted cloud hosting. It proxies encrypted blobs between clients and S3 storage. It never has keys, never decrypts. All decryption happens on the client (the desktop app, bae-web, or bae-mobile).

bae-proxy reads a YAML registry file that maps hostnames to S3 prefixes. When a request comes in, it looks up the Host header, finds the corresponding S3 location, and proxies the request.

This registry is generated by the bae-cloud control plane. Each library gets its own hostname, scoped to its own S3 prefix. Libraries cannot access each other’s data.

A single bae-proxy instance handles many libraries. Routing is by Host header — each library has its own subdomain. The proxy scopes all S3 operations to the library’s prefix, enforcing isolation.

  • Encrypted release files (audio, images, etc.)
  • Encrypted database snapshots and sync changesets
  • Encrypted library images
  • Share link data (bae-web fetches encrypted share data through bae-proxy, decrypts in the browser)
  • Cloud home data for follow connections

bae-proxy has no knowledge of your library contents, metadata, or encryption keys. It cannot read, search, or index your music. It is a storage proxy, nothing more.

Desktop appbae-proxy
Cloud home proxyYesYes
Share linksYesYes (via bae-web)
Follow connectionsYesYes
DecryptionYes (has keys)No (zero-knowledge)
Multi-tenantNo (single library)Yes (Host header routing)
Typical deploymentHome server, NAS, VPS you trustbae cloud, untrusted VPS