Skip to the content.

PWA vs. Native vs. Desktop Comparison

Progressive Web Applications (PWAs) are our primary architectural choice as defined in PWA First. However, while PWAs offer significant advantages in cross-platform development and deployment, there are scenarios where they encounter obstacles or where native/hybrid approaches become necessary.

The meaning of a PWA can vary significantly across different operating systems. On Android and Windows, a PWA can feel nearly identical to a native application, with deep system integration and installation prompts. On iOS, it is often treated as a “bookmarked website” with more limited capabilities due to platform restrictions.

To bridge the gap between pure PWAs and fully native apps, technologies like Capacitor (often referred to as capacitorjs) and Apache Cordova (and desktop equivalents like Tauri or Electron) are used. These “Hybrid” or “Native Shell” technologies allow developers to use the same web source code while gaining access to native APIs that are otherwise unavailable to standard web browsers.

Overview Comparison

Feature PWA Hybrid Shell (Capacitor/Cordova) Native Mobile (iOS/Android) Local Desktop App
Language/Stack Web (HTML, CSS, JS/TS) Web + Native Bridge Swift/Kotlin/Java C++, C#, Java, Python
Installation Direct from Browser App Stores App Stores (App Store, Play) Installer / Package Manager
Distribution URL / QR Code App Stores / Enterprise App Stores Website / Store
Offline Support Service Workers (Good) Native + Web (Excellent) Native Storage (Excellent) Local FS (Excellent)
Hardware Access Limited (Web APIs) Full (via Plugins) Full (Native APIs) Full (System APIs)
Cryptography Web Crypto API (Software-based) Hardware-backed (via Plugins) Hardware-backed (Secure Enclave) Hardware-backed (TPM/HSM)
Secure Storage Limited (IndexedDB, WebAuthn) Native Secure Storage Native Secure Storage (Keychain) OS-level Keyring/Vault
Performance High (but restricted by JS) Near-Native (UI is Web) Native (Best) Native (Best)
Updates Immediate (on reload) Store Approval (CodePush possible) Store Approval Process Varied (Manual/Auto-updater)
Push Notifications Yes (Android/Desktop, iOS limited) Yes (Full Native) Yes (Native) Yes (OS Integrated)
Discoverability High (SEO/URL) Low (Store search) Low (Store search) Low (Site/Store)

Obstacles to “PWA First”

Applying the PWA First decision comes with several technical and platform-specific hurdles:

  1. Hardware & API Limitations: While Web APIs (WebBluetooth, WebUSB, WebNFC) are evolving, they are not supported by all browsers (especially Safari/WebKit). Complex hardware integrations often require native code.
  2. iOS Restrictions: Apple restricts certain PWA features (like push notifications in older versions, background sync, or full access to certain sensors) to maintain its App Store ecosystem.
  3. File System Access: Although the File System Access API exists, it is more restrictive than native file system access, which is often crucial for professional desktop productivity tools.
  4. Cryptography & Secure Storage: PWAs are limited to the Web Crypto API, which often lacks access to hardware-backed security modules (like Secure Enclave or TPM) for key generation and storage. Secure storage in PWAs is also limited compared to native Keychains/Keystores.
  5. Background Processing: PWAs are heavily throttled when not in the foreground to save battery and memory. Native apps have more robust background execution models.
  6. User Perception: Some users still prefer finding and installing apps through official stores, perceiving them as more “official” or “secure”.

OS-Specific Problems and Limitations

iOS (Apple)

iOS is currently the most restrictive platform for PWAs due to Apple’s control over the browser engine (WebKit) and the App Store ecosystem.

Android (Google)

Android is the most PWA-friendly mobile OS, but still has limitations compared to native apps.

Windows (Microsoft)

Windows provides good PWA support via Edge (Chromium), but desktop-specific expectations are high.

macOS (Apple)

Similar to iOS, but with the added complexity of Safari vs. Chrome.

Linux

Linux support varies greatly depending on the distribution and desktop environment.

When to Consider Non-PWA (Native/Hybrid)

We should deviate from the PWA-only path when:

Solving Problems Softly (The Hybrid Approach)

To maintain the “PWA First” spirit while overcoming its limitations, we use a hybrid approach. This allows us to use the same web source code while “wrapping” it in a native shell that provides access to native APIs.

Tool Focus PWA Relationship Description
Capacitor Mobile Native Bridge Modern replacement for Cordova (capacitorjs). Bridges Web App to Native iOS/Android APIs. Ideal for PWA-to-Native porting.
Apache Cordova Mobile Native Bridge The “classic” hybrid tool. Uses a plugin-based architecture to access native features.
Tauri Desktop Native Bridge Lightweight alternative to Electron. Uses Rust for the backend and the system’s native webview for the frontend.
Electron Desktop Bundled Browser The industry standard for cross-platform desktop apps using Chromium and Node.js. High memory usage but very mature.
Android Native Mobile Native Target Traditional native development using Kotlin/Java. See Android Native Know-how.
iOS Native Mobile Native Target Traditional native development using Swift. See iOS Native Know-how.
F-Droid Mobile Distribution Alternative FOSS App Store for Android. See F-Droid Know-how.

PWA vs. Capacitor vs. Cordova

While all three allow using web technologies for mobile, they differ in philosophy and implementation:

Strategy for Portability

  1. Core Logic: Keep business logic in framework-agnostic JS/TS.
  2. Abstraction Layer: Use an abstraction for features that differ between Web and Native (e.g., a NotificationService that uses Web Push in PWA and Native Push in Capacitor).
  3. Conditional Loading: Detect the environment at runtime to enable/disable specific native-only features.
  4. SMI Ecosystem Integration: Ensure that sub-apps can be bundled into a single native “Root App” shell if needed, while still functioning as individual PWAs.