
You want your app on both the App Store and Google Play, but building it twice, once in Swift and once in Kotlin, doubles your workload and requires two language skill sets few solo builders have.
Hybrid mobile apps let you ship to both platforms from a single codebase. Hybrid development is a practical path for indie builders, but "hybrid" covers two architecturally different approaches that are frequently conflated. Choosing the wrong one costs months.
What "hybrid" actually means in 2026
Hybrid frameworks work very differently under the hood. That difference sets your app's performance ceiling and the device features you can access.
WebView-based: Ionic and Capacitor
Your app runs as a website inside a native shell. On iOS, that shell uses Apple's WKWebView, and on Android, it uses Android WebView. Buttons, lists, and navigation are web elements styled to look native.
Capacitor is the bridge between your web code and device hardware. Capacitor plugins give your JavaScript access to the camera or GPS through a JavaScript bridge interface.
Build your web app, run npx cap sync, and test on device. Users download your app from the App Store like any other app.
React Native: JavaScript to native components
Your JavaScript describes the UI, and React Native translates those descriptions into actual native iOS and Android components. A <View> becomes a real UIView on iOS and an android.view.View on Android.
The original architecture relied on asynchronous JSON messages between JavaScript and native code, which created latency. The current system uses JSI, which allows JavaScript to hold direct references to C++ objects with zero serialization cost. React Native shipped version 0.82 as the new architecture release.
Flutter: its own rendering engine
Flutter owns the rendering layer. Its rendering engine, Impeller, is a new rendering runtime for Flutter that renders through GPU. This is closer to how a game engine works than how a traditional mobile framework works.
Flutter compiles to ARM. The trade-off is pixel-perfect control over your UI, with design updates that you handle yourself instead of inheriting automatically from iOS or Android.
Hybrid vs. native vs. PWA: what each costs you
Code reuse is only one part of the cost question. You also need to account for app-store economics and performance trade-offs that can affect retention.
The Apple Developer Program costs $99 per year. Google Play charges a one-time $25 fee. PWAs distributed outside the stores have zero platform fees.
Revenue commissions
For subscription apps, the commission structure matters more than registration fees over time.
- Apple charges 15% on proceeds up to $1M per year through the Small Business Program. New developers must actively enroll if they meet the eligibility requirements; they are not automatically enrolled.
- Google Play charges 15% on the first $1M per year in non-subscription revenue, 30% above that. Subscription revenue typically incurs a 15% service fee under certain programs and thresholds, with 30% applying above specific earnings levels or after the first year for some models.
- PWAs monetized through web payments can avoid standard app store commissions, though payment processor fees may still apply and platform-specific exceptions exist.
Performance reality
For typical UI scenarios, performance is "not significantly different" from fully Kotlin-based Android apps. The explicit carve-out is computationally heavy situations like 3D rendering.
Flutter targets smooth rendering. Impeller precompiles a smaller, simpler set of shaders at engine-build time so they do not compile at runtime, which helps reduce shader compilation jank.
Content apps and dashboards often fit hybrid frameworks. For heavy animation or real-time 3D, native still has a meaningful advantage.
PWA limitations on iOS
PWAs can validate mobile demand before you commit to store submissions, but iOS still imposes limits that affect distribution and reliability.
Apple's App Store Review Guidelines address apps that are primarily web wrappers or websites and lack sufficient native functionality under Guideline 4.2, which can result in rejection. All browsers on iOS must use WebKit under App Store Review Guideline 2.5.6, which can limit PWA performance and feature support. Push notifications on iOS PWAs have active reliability issues on iOS 18.x. Safari 26 also adds new restrictions on canvas, audio readback, SpeechSynthesis, and long-lived storage for fingerprinting prevention.
PWAs work well for validating mobile demand before committing to store submissions. As an iOS distribution channel, they remain unreliable.
Picking the right framework for your project
Framework choice should follow your starting point, not ideology. You usually move fastest with the tools and language you already know.
If you already know React, you can start building in React Native today. If you choose Flutter, expect a real learning investment in Dart first.
If you have an existing web app
Ionic and Capacitor let you add Capacitor to any existing web project. Ionic 8 works with React, Vue, Angular, or vanilla JavaScript. For a web app, this can be the fastest path to an app store listing.
If you know React or JavaScript
React Native with Expo is a common starting point. The React Native App Store publishing docs recommend using Expo Application Services for submitting iOS apps, while React Native also supports other deployment paths. Expo abstracts build tooling and supports over-the-air updates for JavaScript changes without a full store resubmission.
OTA updates cover only JavaScript and asset changes. Any native code modification requires store resubmission.
If you want design flexibility and hot reload
Flutter gives you consistent UI across platforms from a single codebase and Hot Reload for almost-instant iteration. One portfolio case study used Flutter as the primary cross-platform framework. That same developer switched to native SwiftUI for one app that needed iCloud Sync.
What indie builders have actually shipped
Solo developers using these frameworks have reached $10K MRR and built sustainable app businesses. Their choices show where framework selection actually matters.
HabitKit: solo app business
Sebastian Röhl built HabitKit as a solo developer and reached $10K in monthly recurring revenue. HabitKit appears to have grown through App Store and Google Play organic rankings, while revenue came from the app itself through subscriptions and in-app purchases. A December 2024 YouTube mention became a milestone for HabitKit. He quit his job to work on the app full-time.
Interactive home screen widgets required learning Kotlin/Jetpack Compose for Android and Swift/SwiftUI for iOS separately. Flutter alone was not sufficient for that OS-level feature.
Habit Pixel: solo cross-platform app
A solo developer launched Habit Pixel. The turning points were adding purchasing power parity pricing and building in public on X.
React Native indie apps
Before a startup accelerator funded their next company, the co-founders had already been building indie mobile apps.
Getting past the app stores
Review risk comes from how complete the app feels and whether your build fits platform rules.
A practitioner with multi-year Cordova experience has never seen an app rejected for being hybrid: "I also never heard of any app being rejected due to being a hybrid app." React Native and Flutter apps submit as standard native binaries with no separate review category.
What actually triggers rejection
Apple's Guideline 4.2 is a significant review risk for hybrid builders, especially for wrapper-style apps. Your app must provide functionality beyond a repackaged website. Apple's Guideline 4.2.2 can apply to apps deemed to have limited native functionality.
Building native UX patterns, push notifications, biometric authentication, and offline support distinguishes an acceptable Capacitor app from a browser wrapper.
Google Play requirements
New apps submitted after August 31, 2025, must target Android 15 (API level 35) or higher. An incorrect targetSdkVersion can prevent submission or limit your app's availability. The documentation does not specify automatic rejection before human review.
Google Play verification can involve friction such as DUNS number requirements and identity or beta tester checks.
For teams packaging a Next.js app with Capacitor, app-store submission can add significant work beyond the core app build.
Start with what you know, then ship
Start with the framework that matches your current skills. That choice shortens the path to a working app and gives you feedback sooner.
Capacitor is one option for converting existing web apps into mobile apps. Flutter gives full design control to developers willing to learn Dart.
The builders highlighted here shipped, measured, and iterated on distribution.
If you want to skip infrastructure setup and get to a first working prototype faster, try Anything free. You can ship iOS apps through Expo today, with Android support in development.


