passband

Self-host · MIT licensed

Your box. Your disk. Your mail.

Run the Passband daemon on your own machine, NAS, or server. Your mail and your Google credentials never reach anything we operate, and the app connects to wherever the daemon lives.

Source Your Gmail

Through a Google OAuth client you create.

Your hardware squelchd

Syncs, triages and stores your mail in SQLite, on loopback by default.

Your devices Passband for Mac

Paired to your daemon with a one-time code.

What reaches us: nothing, unless you turn on push notifications or read receipts, which carry no mail content. Every channel is on the trust page.

SETUP

Three steps. No account with us.

You need Docker, a Google account, and a Mac. The daemon runs anywhere Docker does; prebuilt images cover amd64 and arm64.

01

Create a Google OAuth client

Your daemon talks to Gmail as an app you own, so Google never sees us in the loop.

  1. Go to console.cloud.google.com and create a project
  2. Enable the Gmail API
  3. Configure the OAuth consent screen (External) and add yourself as a test user
  4. Create credentials: OAuth client ID, type Desktop app
02

Run the daemon

Prebuilt multi-arch images are public on GHCR, no registry login needed:

docker pull ghcr.io/passband-app/squelchd:latest

A minimal docker-compose.yml:

services:
  squelchd:
    image: ghcr.io/passband-app/squelchd:latest
    restart: unless-stopped
    ports:
      - "127.0.0.1:8848:8848"   # loopback only
    volumes:
      - squelch-data:/data
    environment:
      SQUELCH_ACCOUNT_EMAIL: you@gmail.com
      SQUELCH_CLIENT_ID: ${SQUELCH_CLIENT_ID:?set in .env}
      SQUELCH_CLIENT_SECRET: ${SQUELCH_CLIENT_SECRET:?set in .env}

volumes:
  squelch-data:

The port stays on loopback; front it with tailscale serve --bg 8848 or your own proxy to reach it from your Mac. The full environment-variable reference and the OAuth consent flow live in deploy/DOCKER.md, and docs/GETTING-STARTED.md walks a complete setup end to end: daemon in Docker on a NAS, Passband on a Mac.

03

Get the app

brew install --cask passband-app/tap/passband

Point it at your daemon, pair the device, and you're done. Updates arrive in the app.

Nothing held by us

Your mail, search index and Google tokens live on your disk. We hold no copy and no key, so there is nothing for us to lose or hand over.

Your model, your key

Triage and the assistant use an Anthropic or OpenAI key you supply, under your own account. With no key, triage runs on local rules and no mail leaves the box.

Open source

MIT licensed, daemon and apps alike. Read the source on GitHub, threat model included.