Skip to content

Cloud Sync and Media Transfer

Pair your appliance with your cloud account, sync supported rows, and download missing media.

Video coming soon.

Before you start

  • self-hosting/01-deploying-with-docker
  • self-hosting/03-configuration-and-multi-device

What you'll learn

  • Pair the appliance with your cloud account using a sync token
  • Understand which content types and files sync, and how conflicts resolve
  • Read the sync health signal and recover missing media
  • Run multiple appliances against one cloud account

Cloud Sync exchanges supported rows between two Glassy instances — an appliance and its cloud account, or an appliance and a private receiving instance in a Zero Reliance Pair. The sending appliance also downloads missing note images and background renditions referenced by local rows. Voice audio uses a separate download path. These downloads are not two-way file replication.

Pairing the appliance

Generate a sync token on the receiving instance

On the instance you are syncing to — app.glassy.fyi, clear.glassy.fyi, or your own VPS in a Pair — open Settings → Cloud Sync and click Generate. The raw token is shown only once. It is separate from the self-host membership token and can be rotated independently.

Save the pairing on the sending appliance

On the appliance, open Settings → Cloud Sync, paste the token into Pair token, enter the receiving instance’s URL in Syncs to, and choose Save Cloud Sync settings. The token is stored encrypted and both values are resolved every cycle, so no restart is needed.

For a scripted/bootstrap install only, GLASSY_SYNC_TOKEN in .env remains the recovery path and is read at boot.

Verify and run a first cycle

In the appliance’s web app, Settings → Cloud Sync shows the peer connection, credentialSource, pending outbound count, and per-type cursors. Click Sync now for an immediate cycle. With the default 10-second fast check, local writes typically reach the peer within seconds.

What syncs, and which direction

Per-type toggles and the conflict policy (most-recent last-writer-wins by default, or cloud-wins) live in Settings → Cloud Sync on each side. Direction (push-only / pull-only / two-way) belongs to the sending appliance, which runs the cycles. Disabled types pause in the outbox — held, not lost — and flow again when re-enabled.

Media transfer (beta.40+)

After row sync, the appliance downloads missing note images and custom-background renditions referenced by local rows. Voice audio uses its own endpoint. The server exposes a manifest with hashes, but the current downloader does not consume it or verify checksums. This is appliance-side download, not two-way file replication. If the peer is offline, a later eligible cycle can retry.

Reading the health signal

The Cloud Sync panel and /api/sync-token/health report files missing from this instance. The current mediaMissing counters cover voice audio and note images; they do not certify every asset class or prove the source has lost a file.

On eligible pull cycles, the appliance attempts to download missing files from the peer. If a count persists, check connectivity, credentials, peer version, disk space, and source-file availability. A persistent count alone does not prove permanent loss.