docs/wiki/3.05-Web-App-vs-Desktop.md
This reference enumerates functional differences and limitations of the web app compared with the desktop (Electron) app. Most limitations stem from browser security (CORS, CSP, sandboxing) rather than intentional feature removal.
Plugins that require Node.js execution (elevated permissions) are disabled in the web version. When such a plugin is loaded, the app shows a disabled placeholder with an error stating the plugin requires the desktop version.
Calendar providers can be disabled for the web app via an isDisabledForWebApp flag to avoid CORS failures. When this flag is set and the app runs in a browser, calendar event requests return empty results instead of performing the HTTP request. The UI shows a prominent warning that calendar integration will likely not work in the browser and recommends downloading the desktop version.
In the web version, time tracking only works while the app is open. Idle time tracking in the browser requires the Super Productivity Chrome Extension to be installed.
WebDAV sync and calendar integration are likely to fail in the browser due to CORS. The app detects CORS-related failures and can show localized messages suggesting the user check server configuration. The desktop app can bypass CORS for these requests; the web app cannot.
The web app depends on modern browser support for:
window.crypto.getRandomValues and window.crypto.subtle.digest.crypto.subtle) is only available in secure contexts (HTTPS). The app shows alerts when WebCrypto is unavailable or when run over non-HTTPS.The web version uses BroadcastChannel to prevent multiple tabs from running the app at once. If another tab already has the app open, the new tab shows a blocker message asking the user to close one of the tabs.
The web app requests persistent storage from the browser. If the request is denied, the user sees a warning that data may be lost. Denial is surfaced via a snack notification.
The app uses the Storage API to estimate usage and quota. When available space falls to 333 MiB or less, the user is alerted that disk space is low and the app may be affected.
When IndexedDB quota is exceeded, the app triggers emergency compaction with reduced retention (24 hours instead of 7 days) and uses a circuit breaker to avoid infinite retry loops.
The web app registers a Service Worker for offline caching (PWA). This is disabled for Electron and Android. Background behavior is limited to what the browser's Service Worker API allows.
These limits are enforced by the sync server; they affect web users who sync:
The desktop app disables background throttling for its window. The web app is subject to the browser's background tab throttling, which can affect timer accuracy and background task execution when the tab is in the background.
The web app uses a Service Worker (production builds) to cache assets for limited offline use. Full offline behavior is more limited than on desktop and Android. The app shows an offline banner when the network is unavailable.
When plugins use iframe-based UIs, the following API methods are not available for security reasons:
registerHeaderButton()registerMenuEntry()registerSidePanelButton()registerShortcut()registerHook()execNodeScript()Iframe plugins are subject to strict CSP:
Jira integration and idle time tracking in the web version require the Super Productivity Chrome Extension to be installed.
The web version does not have:
Certain UI elements tied to these features are hidden in the web build via platform-specific CSS or logic.
NS_ERROR_DOM_QUOTA_REACHED, Safari code 22) and triggers emergency compaction.For installation and download options, see [[2.01-Downloads and Install]]. For sync backends and limitations, see [[2.09-Configure-Sync-Backend]].