open source · MIT · zero telemetry

The Beacon Stack

TV, movies, and BitTorrent — each app works standalone, and all three share indexers, quality profiles, and settings through Pulse when you want them to. One docker compose up for the whole stack.

beacon-stack/stack
$ docker compose up -d
4 apps in the stack
1 control plane
0 telemetry

How Pulse connects everything

Each Beacon service registers with Pulse on startup and heartbeats periodically. Shared state — indexers, quality profiles, settings — flows outward from Pulse to every subscribed service. If you move Pilot to a new host, every other service picks up the new address on the next heartbeat.

Pulse isn't Beacon-only. Any Go service can join through the client SDK at pkg/sdk — register, discover peers, pull assigned indexers, and subscribe to shared config with one client instance.

Register once, configured automatically

When Pilot starts, it registers with Pulse: name, URL, capabilities. Pulse returns a tailored config bundle — only the indexers tagged tv, the quality profiles this service subscribes to, and the shared settings relevant to its namespace.

Add a new indexer to Pulse and tag it movies. Prism picks it up on the next heartbeat. Tag it tv too and Pilot gets it. One API key to update, not three.

One stack, four apps

Pilot TV series
Pulse Control plane
Prism Movies
Haul BitTorrent

Built for people who run their own stack

Register once, configure everywhere

Add an indexer to Pulse, tag it, and every subscribed service picks it up. One API key, one quality profile, one place to change things when they break.

Standalone or connected

Pilot, Prism, and Haul each run fine with local config. Pulse is purely additive — bring it in when you're ready for the shared layer.

Zero telemetry, MIT licensed

No analytics, no crash reporting, no update checks. Everything runs in your network and stays there. All four apps are MIT licensed and built in the open.

Up in three commands

The full stack — Postgres, Pulse, Pilot, Prism, Haul, and a VPN container — lives in beacon-stack/stack. Point it at your media directories and run.

beacon-stack/stack →
terminal
# Clone and configure
$ git clone https://github.com/beacon-stack/stack
$ cp .env.example .env
# Set MEDIA_DIR, TV_DIR, MOVIES_DIR in .env

# Start everything
$ docker compose up -d