Cross Platform Frameworks vs Platform Specific Sdks
Cross-platform frameworks like Flutter and React Native ship one codebase to every screen. Platform-specific SDKs (Swift/UIKit, Kotlin/Jetpack) build native per OS. We pick the one that wins for most teams.
The short answer
Cross Platform Frameworks over Platform Specific Sdks for most cases. For the overwhelming majority of apps, one codebase shipped to iOS and Android beats two native teams arguing about parity.
- Pick Cross Platform Frameworks if building a standard product app — CRUD, content, commerce, social — and want one team shipping to both stores without doubling headcount or maintaining feature parity by hand
- Pick Platform Specific Sdks if your app's reason to exist IS the platform: heavy AR, custom camera pipelines, low-latency audio/games, deep OS integrations (widgets, watch, CarPlay), or you're a single-OS company that will never ship the other
- Also consider: Team composition decides this more than tech. Two strong native engineers beat one mediocre Flutter dev. But you rarely get to hire in a vacuum — you get budget for one team, and one codebase is what that budget buys.
— Nice Pick, opinionated tool recommendations
The cost math is brutal and one-sided
Platform-specific SDKs mean two codebases, two languages, two build pipelines, and — the part nobody budgets for — two implementations of every feature you ever ship. A native shop doesn't just write the iOS button and the Android button once; they re-litigate every product decision twice, forever, and then spend standups reconciling why Android shipped the setting iOS forgot. Cross-platform collapses that to one. Flutter and React Native let four engineers do what eight native engineers do, and the gap compounds with every release. The native crowd will tell you the duplication 'keeps each platform idiomatic.' What it actually keeps is your roadmap at half speed and your QA matrix doubled. Unless you're Uber or Airbnb with the headcount to absorb two org charts, paying the native tax for a settings screen and a checkout flow is vanity. You are not building software that earns it.
The performance gap closed — stop fighting the last war
The case for native SDKs rests on a performance story from 2016. Flutter renders through Skia/Impeller at 60-120fps and doesn't touch a JS bridge; modern React Native runs the new architecture with Fabric and JSI. For 95% of apps — lists, forms, navigation, network calls, the occasional animation — users cannot tell. The jank you're picturing is old React Native or a team that profiled nothing. Native still genuinely wins at the edges: sustained 3D, real-time audio DSP, custom Metal shaders, frame-perfect AR. If that's your product, go native and don't apologize. But most teams invoke 'performance' as a status argument, not a measured one. They've never opened a flame chart. Picking platform-specific SDKs because cross-platform 'feels slow' is choosing double the cost to solve a problem your profiler would tell you that you don't have.
Where native actually earns it
I'm not pretending native is dead — that's the kind of 'it depends' dodge this site bans, in reverse. Platform-specific SDKs win cleanly when the OS IS the product surface. Day-one access to new APIs: Apple ships a feature at WWDC and you have it that afternoon, not whenever the framework maintainers wrap it. Deep system integration — widgets, Live Activities, App Clips, Wear/Watch, CarPlay, Shortcuts — is painful or impossible through an abstraction layer. Same for anything latency-critical or hardware-intimate: pro camera apps, instruments, AAA-adjacent games, fitness apps reading sensors at high frequency. And if you are honestly a single-platform company, cross-platform's whole value proposition evaporates and you're just paying an abstraction tax for nothing. Native is a sharp, correct tool. It's just the wrong default, chosen far more often by engineering ego than by product requirement.
The tiebreaker: who maintains it at 2am
Decisions die in maintenance, not in the demo. With cross-platform, one bug fix lands everywhere at once and one engineer can own the whole app. With platform-specific SDKs, your iOS person is asleep when Android crashes, the fix has to be ported, and the two builds drift until 'feature parity' becomes a quarterly project nobody wants. Cross-platform also degrades more gracefully when people leave — React Native and Flutter have enormous hiring pools, while a senior Swift-and-Kotlin pairing is expensive and scarce. Yes, you'll occasionally drop to native code through a platform channel for that one SDK that has no plugin. Good — that's the escape hatch working as designed, not a failure. The point isn't that cross-platform never touches native; it's that it touches native only where it must, instead of everywhere by default. Pick the one codebase. Open the hatch when reality forces you.
Quick Comparison
| Factor | Cross Platform Frameworks | Platform Specific Sdks |
|---|---|---|
| Engineering cost / headcount | One codebase, one team ships both stores | Two codebases, two languages, every feature built twice |
| Raw performance ceiling | 60-120fps; great for 95% of apps, weaker at hardware edges | Full native ceiling: AR, DSP, custom shaders, games |
| Time-to-market & shipping speed | One implementation, instant parity across platforms | Slowed by duplication and parity reconciliation |
| Day-one OS API & deep integration | Waits on framework wrappers; widgets/CarPlay painful | Immediate access; native widgets, watch, Shortcuts |
| Hiring pool & maintainability | Large RN/Flutter pool; one owner for whole app | Scarce senior Swift+Kotlin pairs; build drift |
The Verdict
Use Cross Platform Frameworks if: You're building a standard product app — CRUD, content, commerce, social — and want one team shipping to both stores without doubling headcount or maintaining feature parity by hand.
Use Platform Specific Sdks if: Your app's reason to exist IS the platform: heavy AR, custom camera pipelines, low-latency audio/games, deep OS integrations (widgets, watch, CarPlay), or you're a single-OS company that will never ship the other.
Consider: Team composition decides this more than tech. Two strong native engineers beat one mediocre Flutter dev. But you rarely get to hire in a vacuum — you get budget for one team, and one codebase is what that budget buys.
For the overwhelming majority of apps, one codebase shipped to iOS and Android beats two native teams arguing about parity. The performance gap that justified going native closed years ago, and the cost gap never did.
Related Comparisons
Disagree? nice@nicepick.dev