What's New
Changelog
New features, improvements, and fixes across all our products.
What's New
New features, improvements, and fixes across all our products.
Production now refuses to start if CORS_EXTENSION_IDS is missing Per-user rate limiting for clipboard mutation endpoints (add, sync, delete, favorite, bulk delete) SSE connection race condition guard
/auth/refresh is now rate-limited Startup validation for WEB_APP_URL when email reset is enabled Clipboard duplicate detection now checks only the most recent item Re-copying older clipboard content moves it back to the top Mobile dashboard refreshes clipboard when app returns to foreground Simplified offscreen clipboard reads using async clipboard API Null-safe character counting in popup Snippet ordering and deduplication cleanup Cross-platform build script improvements
Password reset/change now increments token_version, invalidating old JWTs and issuing a fresh token for the current session
Reliable token storage for mobile app sessions and bulk delete for clipboard history items
Input validation for IDs and numeric settings and snippet conflict handling and limits and standalone web build API config
This update makes cloud sync safer and more reliable, improves tab-save verification, and adds cleanup safeguards to keep storage and sync data healthy over time.
Cloud sync reliability by using local storage as the main source of truth Made real-time sync safer by removing auth tokens from WebSocket URLs. Tab-save verification to catch mismatched saved groups more accurately
Cleanup and indexing to reduce storage bloat and keep sync fast
Significant security and reliability improvements across the extension, backend, and web app. Cloud sync is more robust with real-time SSE, bulk operations, and cross-device conflict resolution.
Session tokens now stored in httpOnly cookies on the web app — no longer accessible via JavaScript. Account deletion now requires current password confirmation. SSE connections no longer accept tokens via URL query string.
Bulk delete — remove many history items in a single request. Real-time sync via SSE — changes on one device appear instantly on others. autoApplyLastSynced setting — opt-in before synced content overwrites local clipboard.
Shared API client — extension and web app share the same HTTP/retry/timeout logic. Migration system — schema only re-runs when it actually changes (hash-based). Retention cleanup is now safe across multiple server processes.
Popup width reduced to 440px; fits smaller screens without overflow. Delete All now shows inline confirmation instead of a browser dialog. History list shows animated skeleton while loading instead of blocking overlay. Multiple toast notifications now queue instead of overwriting each other.
Settings and tab groups now sync instantly between the extension and the web dashboard in both directions. Deleting or modifying tabs in the web reflects in the extension immediately, and vice versa. This release also fixes several bugs affecting cross-device settings persistence, unexpected group reordering, and performance under concurrent operations.
Settings sync across devices and web — changes made in the extension (including theme toggle) now push to cloud and broadcast to all open clients via WebSocket
settings:changed WebSocket event — backend now broadcasts settings changes so the web dashboard and other extension instances apply them instantly without polling
Cross-device settings not reflecting — sync storage was being overwritten by stale cloud-pulled data; local storage now mirrors Chrome sync correctly
Theme toggle in popup did not push to cloud, so other devices and the web never received the change
Renaming or recolouring a tab group unexpectedly moved it to the top of the list (timestamp was being bumped on metadata-only edits)
Concurrent 401 responses all triggered independent token refresh attempts simultaneously (thundering herd); now deduplicated to a single in-flight refresh
Settings change (e.g. theme toggle) unnecessarily invalidated the saved-groups cache, causing a redundant storage read on every settings write
Favicon error listeners used { once: false }, leaving stale listeners attached across re-renders
Group IDs could collide when multiple groups were created within the same millisecond
Mutating the cached settings object in-place in the popup could silently corrupt the cache for subsequent reads
Settings changes no longer trigger a full saved-groups cache flush unless storageType actually changed
Deletions made on mobile or web were not being reflected in the browser extension. Manually clicking "Sync Now" made it worse by re-uploading deleted items back to the cloud.
Items deleted on mobile or web now correctly sync to the extension via cloud tombstone processing
"Sync Now" no longer re-uploads items that were deleted on mobile/web before applying cloud changes
Clipboard items copied on one device now automatically land in your clipboard on other devices just paste without opening the app. Also fixes duplicate entries appearing when syncing between Mac and iPhone
Auto-copy the latest synced item to your clipboard when a new item arrives from another device (Extension + Mobile)
Duplicate clipboard entries caused by sync echo loop between Mac and iPhone
The extension’s name has been updated to improve search engine visibility and discoverability. No functional, UI, or backend changes were made in this release.
Updated extension name and short description
The extension’s name has been updated to improve search engine visibility and discoverability. No functional, UI, or backend changes were made in this release.
Updated extension name to "Tab Manager & Tab Sync – Save & Restore Tabs Fast" for SEO purposes.
Fixes sync issues where settings showed different values between web and extension, deleted items reappeared after sync, and clipboard count was off.
Deleted clipboard items reappearing after cloud sync pull
Settings desync between web and extension (e.g. maxItems showing 200 vs 500)
Web settings form not reflecting server-normalized values after save
Full pull storing raw cloud settings without normalization or UI broadcast
Web account page allowing maxItems up to 1000 instead of the 500 cap