github ZenNotes/zennotes v2.33.0
ZenNotes 2.33.0: Cloud sync tells you the truth

one hour ago

ZenNotes 2.33.0: Cloud sync tells you the truth

A sync that could not finish no longer reports success. When ZenNotes Cloud turns an upload away for capacity (storage quota, active-item limit, or a file over the size cap), the status bar now says Sync incomplete with the real numbers and a Review action, instead of "Synced just now". Unlinking a device and deleting a Cloud vault are two different, clearly labeled actions, each with its own confirmation; deleting the Cloud copy from inside the app is new. The usage card counts synced files honestly, split into Markdown, binary, other, and ZenNotes metadata.

✨ New

  • Delete a Cloud vault from the app. Settings → Cloud, next to the linked vault, now has Delete Cloud vault. It asks first, in red, and spells out what happens: the Cloud copy, its backups, and its exports are removed permanently; local files on every device stay where they are. The device is unlinked afterward and a toast confirms it. How to test locally: link a throwaway vault, click Delete Cloud vault, cancel once, confirm once, then check that the vault is gone from the Cloud vault list and the local notes are untouched.

  • Usage shows what is actually stored. The "Synced notes" card is now Synced files, with a second line splitting the count into Markdown, binary, other, and ZenNotes metadata, because images, PDFs, and vault.json count toward capacity too. The numbers refresh after each manual sync.

🐛 Fixes

  • Sync admits when it is incomplete. A capacity rejection used to be filed under "1 conflict needs review" in settings while the status bar stayed green, though nothing had uploaded and there was nothing to review. There is now a third outcome between success and failure. The status bar switches to the warning tone with Sync incomplete and a Review action that opens Cloud settings; the summary reads "Cloud storage limit reached (4.8 GB of 5.0 GB)", or the active-item equivalent, or names the file-size cap, and says the waiting changes retry automatically. Real conflicts get their own sentences too: files that differ on first link, keep-both copies, and changes that could not be applied. The last successful sync time is kept, and a manual sync clears the previous summary before it starts, so a timeout cannot leave an earlier green box on screen. How to test locally: fill a Cloud vault to its limit, add one more file, press Sync now; the status bar should read Sync incomplete, and Review lands on the explanation.

  • Unlink asks first and says what it does. The one-click Unlink left people guessing whether their Cloud copy survived. It is now Unlink this device, with a confirmation stating that automatic sync stops here and the Cloud vault and backups stay available to other devices.

  • Plans without publishing no longer trip the Cloud surfaces. The published-note lookups behind the sidebar badges, the publish dialog, and Cloud settings threw when the account was disconnected or the plan has no publishing. They now return an empty list in those two cases; any other failure still surfaces.

🧰 For contributors

  • CloudSyncPhase gains attention; cloudSyncAttentionMessage(summary) in cloud-auto-sync.ts is the single source of the wording for both the status bar and the settings summary.
  • CloudSyncConflict carries an optional structured capacity block (dimension, used, reserved, limit, projected, can_retry_after_reduction); CAPACITY_EXCEEDED and FILE_SIZE_LIMIT_EXCEEDED join the conflict codes. Missing details degrade to a generic capacity message.
  • New bridge method deleteCloudVault() over CLOUD_VAULT_DELETE; the handler takes the vault root from main-process state, calls DELETE /api/v1/vaults/:id, then unlinks. The web bridge reports it as not implemented.

Local-first and keyboard-first, as always.

Don't miss a new zennotes release

NewReleases is sending notifications on new releases.