Self-hosted server
The Minutist Server, the hub, is an optional, self-hosted daemon on the connected tier (AUD$20/yr). You run it as an always-on background service on hardware you own: a homelab box, a spare PC, a GPU workstation. It pairs into your device mesh (the set of your own devices that sync with one another) exactly like another desktop. It is a single small binary, minutist-hub, with no GUI.
Why run one
Section titled “Why run one”Sync converges your devices through the connected-tier relay, which store-and-forwards ciphertext while a device is offline. That works without a server of your own. A hub helps when two devices are rarely online at the same time, a laptop and a desktop, or later a phone and a desktop: each reaches your always-on hub whenever it is online, so they never have to overlap. A device that reconnects both deposits its changes and collects whatever accumulated while it was away.
The hub is a genuine always-on replica, not a push-only cache. When a device connects, the hub pulls any meetings it lacks from that device and re-completes any that only partially synced, so your full meeting history is preserved even if a previous transfer was interrupted. This backfill is idempotent: connecting the same device twice pulls nothing the second time.
Where your data lives
Section titled “Where your data lives”The hub is your hardware, in your control: the same trust boundary as your desktop. It holds your meeting notes and audio in the clear, exactly as your desktop already does. There is no special encryption-at-rest, and it does not need any, because it is your machine.
The hub is not the relay. The hosted relay only brokers an encrypted connection between your devices and never sees your content; it forwards ciphertext. Run your own hub and none of your meeting content reaches Minutist infrastructure, not even ciphertext. (The hub signs in to your Minutist account so your devices can find each other; your account and the list of your devices then live on our account service. That is addressing metadata, how devices find each other, never your meeting content.)
The net effect: your meeting content is only ever processed on hardware you own, and the hub is what makes that hold across devices that are seldom online together.
What you need
Section titled “What you need”- A connected-tier subscription. Subscribe at minutist.ai/pricing/.
- A relay access token: the credential that authorises the hub to reach the hosted relay under your account. The hub reads it from the
MINUTIST_SYNC_TOKENenvironment variable; prefer the environment variable or a token file over the command line, where a token is visible in the process list. - A host that stays on: Linux (Docker, Podman, or systemd) or Windows (as a service).
Install
Section titled “Install”The hub is one binary. Build it from the repository, or use the published container image. Pick the path that matches your host.
Build the image from the repository root:
DOCKER_BUILDKIT=1 docker build -f packaging/Dockerfile -t minutist-hub:latest .Run it always-on. --network host keeps the QUIC socket and relay path simple; the named volume preserves the hub’s device identity across restarts:
docker run -d --name minutist-hub --restart unless-stopped --network host \ -e MINUTIST_SYNC_TOKEN=<relay token> \ -v minutist-hub-data:/var/lib/minutist-hub \ minutist-hub:latestTo deploy to a host that has Docker but no Rust toolchain, build on one machine and ship the image:
docker save minutist-hub:latest | ssh HOST docker loadExtract a binary from the builder stage of the image (it matches an LTS host), install it, and enable the unit:
DOCKER_BUILDKIT=1 docker build -f packaging/Dockerfile --target builder -t minutist-hub-builder .id=$(docker create minutist-hub-builder)docker cp "$id:/src/target/release/minutist-hub" ./minutist-hubdocker rm "$id"
sudo install -m 0755 minutist-hub /usr/local/bin/minutist-hubsudo install -m 0644 packaging/minutist-hub.service /etc/systemd/system/minutist-hub.servicesudo install -d -m 0700 /etc/minutist-hubprintf 'MINUTIST_SYNC_TOKEN=%s\n' "<relay token>" | sudo tee /etc/minutist-hub/minutist-hub.env >/dev/nullsudo chmod 0600 /etc/minutist-hub/minutist-hub.envsudo systemctl daemon-reload && sudo systemctl enable --now minutist-hubThe unit runs as a DynamicUser with a managed state directory at /var/lib/minutist-hub. A bare host also needs ca-certificates, and libopus0 if the binary links libopus dynamically.
The daemon has no Windows-specific code; the bundled script registers it as a real Windows service through WinSW. Build minutist-hub.exe with the same MSVC toolchain used for the desktop app, then, from an elevated PowerShell:
packaging\windows\install-service.ps1 -BinaryPath C:\path\to\minutist-hub.exe -RelayToken <relay token>It stages the binary and WinSW under %ProgramFiles%\minutist-hub, writes the service config with the token file locked to SYSTEM and Administrators, and starts the service. The data directory is %ProgramData%\minutist-hub. Remove it with uninstall-service.ps1 (add -PurgeData to delete the data directory too).
Sign the hub in to your account
Section titled “Sign the hub in to your account”After the hub is running, sign it in to your Minutist account. It uses the same device-code flow as the desktop’s Connection pane: it prints a URL (and a code, if the URL does not already carry one); you approve it in a browser signed in to your account. Every device on that account, the hub included, then discovers and syncs with the others automatically, with no per-device pairing step.
-
Run the sign-in command.
Terminal window minutist-hub --data-dir <dir> loginIn a container:
docker exec -it minutist-hub minutist-hub --data-dir /var/lib/minutist-hub login. The-itflags let you read the printed URL and follow the prompt. -
Approve it in a browser. Open the printed URL on any device already signed in to your Minutist account and approve the request. The hub stores its identity under its data directory, so this is a one-time step that survives restarts.
-
Sync begins. Once approved, the hub joins your device mesh and your devices converge through it, automatically.