Skip to content

iCloud sync

iCloud sync makes your saved sessions follow you from Mac to Mac. Save on your work laptop, restore on your desktop. Everything stays in your private CloudKit database — nothing is public, nothing is indexable.

TabControl app → Settings → iCloud Sync → Enable iCloud Sync

The first time you enable sync, TabControl:

  1. Checks that you’re signed in to iCloud (System Settings → Apple ID).
  2. Requests permission to use the TabControl CloudKit container.
  3. Uploads your existing local sessions to your private cloud database.
  4. Starts listening for changes from your other Macs.

The first upload can take a minute or two if you have hundreds of saved sessions. Subsequent syncs push only what’s changed.

Every field TabControl stores about a session gets mirrored to iCloud, with one notable exception:

Synced:

  • Session names, timestamps, tab counts, window counts.
  • The full snapshot of every captured window and tab (titles, URLs, pinned/active state).
  • Categories and tags.
  • Lock status, soft-delete state.

Not synced:

  • AI provider API keys — they live in macOS Keychain, which doesn’t cross devices via iCloud.
  • Local preferences that are per-device by nature, like the precise tab suspend timings you’ve set on this Mac.

The sync tab shows one of four states:

  • Ready — sync is on, everything is up to date.
  • Syncing — TabControl is pushing or pulling changes.
  • Error — something’s wrong. Typical causes: signed out of iCloud, iCloud Drive disabled in System Settings, no network.
  • Idle — sync is enabled but hasn’t run recently. It’ll run on the next save.

You can also trigger a manual sync with Sync now.

When the same session is changed on two Macs while they’re both offline, TabControl uses a last-write-wins strategy based on the session’s cloudModifiedAt timestamp. The edit with the later timestamp wins when both come back online.

In practice:

  • Rename on Mac A, delete on Mac B — whichever was later is the final state. If the delete was later, the session moves to trash on both Macs and can still be recovered.
  • Add tag on Mac A, add tag on Mac B — both tags survive. Tags merge, not overwrite.
  • Edit the category on both — last category wins.

For the handful of fields where last-write-wins feels wrong (tags, most obviously), TabControl does a field-level merge rather than replacing the whole record.

Disabling sync stops TabControl from pushing new changes or pulling changes from other Macs. Your local database stays put — sessions don’t disappear.

If you want to remove data from iCloud, toggling sync off isn’t enough. You’d need to:

  1. Turn sync off on every Mac.
  2. Delete the TabControl data from iCloud via System Settings → Apple ID → iCloud → Manage Account Storage → TabControl → Delete data.

Sessions on the Mac you signed out from stay local. They stop syncing. If you sign back in later, TabControl reconciles — local sessions get pushed, anything on iCloud that isn’t local gets pulled, and conflicts use the last-write-wins rule.

CloudKit counts toward your iCloud storage (the same pool as iCloud Photos, iCloud Drive, etc.). The TabControl database is tiny — a few megabytes even with thousands of sessions. It’s not going to be the thing pushing you over your free tier.