Skip to content

Desktop integration

The desktop apps don’t run a browser login. Instead they pair with your cloud account using a short code — the same pattern as GitHub CLI or a smart TV — and then talk to the cloud over a versioned API. This page covers pairing from the user’s side and what actually syncs.

  1. In the desktop app, start the cloud sign-in. It shows a short pairing code (e.g. WX7K-MN42) and can open your browser for you.
  2. In the browser, go to app.helm.show/pair (sign in with Google if you aren’t already).
  3. If the desktop opened the link for you, the page already knows the request — you’ll see a consent card: which product, which device, OS and app version, plus the account you’re signed into. Click Authorize (or Deny).
  4. Coming to /pair manually instead, type the code from the desktop app and click Approve & pair.
  5. Back on the desktop: it detects the approval within a few seconds and is signed in.

Approval issues the desktop a device token, stored in the OS keychain (never in a config file). In user terms:

  • Tokens are long-lived — pair once per machine, not per session.
  • Each token is bound to one device. Your account page → Connected devices lists every paired device with product, OS, app version, and last-seen time.
  • Revoke a device there at any point — it’s signed out immediately and must re-pair. Revoking a licence revokes its tokens too.
  • Pairing codes themselves expire after ten minutes if unapproved.

While running, each desktop app heartbeats the cloud every few minutes, which is what keeps the “last seen” column fresh.

The desktop apps sync through the public API at app.helm.show/api/v1. What flows over it:

SurfaceDirectionNotes
Identity & licencescloud → desktopWho you are, which products you’re licensed for
ProjectsbothList/open your projects; create and update them from the desktop
FilesbothUpload and download go direct to storage via short-lived signed URLs — the API brokers, it never proxies the bytes. Uploads are de-duplicated by content, so retries are safe
FoldersbothThe desktop mirrors its folder structure to the cloud so the Assets tab matches what you see locally
Per-product project databothEach product gets an opaque JSON slot per project (the Cues show, a DJ setlist…), with version numbers for conflict detection and a version history with restore
Shows / setlistscloud → desktopCloud-built setlists — Cues pulls them on sync; cloud-only-edited in v1
Annotationscloud → desktopRead-only: the desktop can display timestamped comments on its timeline; creating them is web-only
Heartbeatdesktop → cloudKeeps the device’s last-seen fresh

Helm Cues is the active integration: it pairs, pushes its show data (which powers the Cues panel and track pages), uploads the show’s media, and pulls cloud setlists. Media the show references but hasn’t uploaded yet appears in the cloud as “local only” ghosts until the desktop syncs it.

Helm DJ uses the same pairing flow and API surface; its per-product data slot is reserved and its cloud sync is being brought up against this contract. Until then, DJ shows move between machines via .helm bundles as documented in the DJ docs.

If a desktop app reports it’s been signed out, the usual cause is a revoked device or licence — re-pair from the app and it’s back.