Why This Decision Matters More Than People Think

The choice between PWA and native app isn't just technical — it determines your distribution model, your development velocity, and what your users can do with your product. Getting it wrong costs you 6-12 months of rebuild time.

I run both: this portfolio is a PWA (installable, offline-capable, push notifications), while opus and powerx are native React Native apps. The choice was deliberate in each case. Here's the framework I use.

The Capability Gap in 2026

The capability gap between PWA and native has closed dramatically since 2020 but hasn't disappeared. What PWAs can do in 2026 that surprised even me when I tested it: background sync, push notifications (including on iOS 16.4+), camera access, biometric authentication, file system access, Web Bluetooth, Web NFC, contacts API, screen wake lock, and offline storage with IndexedDB at scale.

What PWAs still can't do well: background location tracking, deep system integrations (HealthKit, ARKit, CoreML), in-app purchases via App Store billing, inter-app communication, and complex audio processing in the background. If your core value proposition requires any of these, native is not optional.

For opus — a job search app where the core loop is browse, swipe, apply — none of those native-only capabilities were required. But push notifications for application status updates and the card swipe animation at 60fps were. For the swipe animation, a PWA with CSS animations and the Web Animations API actually delivers comparable performance to React Native on mid-range devices. The push notifications work on iOS 16.4+ via the standard Web Push API.

The Distribution Argument (and Why It Cuts Both Ways)

The conventional wisdom: "app stores give you distribution." This was truer in 2015 than in 2026. App store discovery is increasingly pay-to-play. Organic app store reach for a new app without significant reviews and ratings is minimal.

PWA distribution is SEO and direct link. If your product is something people search for, and your SEO is solid, a PWA can outperform an app store listing for user acquisition. No install friction — the user can start using your product on the first visit and add to home screen on their second.

The argument for native distribution: if your users are in a context where they browse app stores (productivity apps, gaming, tools that complement existing workflows), native has real advantages. Also: in-app purchases. If you need App Store or Play Store billing, you need a native app.

For powerx — a crypto wallet where users specifically search "crypto wallet app" in app stores, and where trust signals from the store listing matter for a financial product — native was the right call regardless of technical capability.

Performance: The Honest Comparison

PWA performance on modern hardware is excellent. On older low-end Android (the 30th percentile of real-world devices), it's not. JavaScript on the main thread, layout and paint in the browser rendering engine, and the overhead of running inside a browser process all add up on constrained hardware.

React Native with the New Architecture and Reanimated worklets achieves near-native UI thread performance regardless of device tier. If your core interaction is animation-heavy and your users are on a wide range of Android devices, this matters.

My practical threshold: if your product needs to work well on Android devices below ~$150 USD in current pricing, and has complex gesture-driven interactions, lean native. If your target demographic is predominantly on flagship or mid-range devices and your interactions are content-first, a well-optimized PWA is indistinguishable.

Development Velocity: PWA Wins, Usually

One codebase, web deployment, no app store review cycles. For a solo founder or small team, the development velocity advantage of PWA is real and significant. You deploy in seconds, not days. You iterate on user feedback same-day. You don't manage certificates, provisioning profiles, or reviewer guidelines.

The app store review process alone has killed momentum on React Native projects for me. A feature that would be live in 4 hours via web deployment takes 2-4 days through App Store review. For fast iteration cycles — which is how I build — this is painful.

My current default: start with a PWA. Validate the product. If native capabilities or distribution become a clear blocker, invest in native. Build the PWA well enough that it could become a companion web app when the native version ships. You get the best of both.

The Hybrid Approach Worth Considering

Capacitor (from the Ionic team) lets you wrap a web app in a native shell with access to native APIs. It's not the right tool for performance-critical native interactions, but for adding one or two native capabilities (camera, push notifications, haptics) to an otherwise solid web app, it's excellent.

I used this exact pattern for an early version of a project before the native rebuild: 90% web code, 10% native via Capacitor for camera access and local notifications. Time to production: 3 weeks. Time to a comparable full-native implementation: 3 months. The hybrid bought us enough time to validate the product before the native investment.