Why
The premise in the question is right: writing once and running everywhere is the mainstream answer in 2026, not a minority one. React Native and Flutter carry a large share of new consumer apps, Kotlin Multiplatform occupies the conservative middle by sharing logic while leaving UI native, and Expo removed most of the build-tooling tax that used to be the strongest argument against the approach. Choosing native-only for a small team is now a decision that needs a reason, which is a reversal from a few years ago.
The second half of the question is the interesting one, and the honest answer is that the study load does not fall proportionally. A cross-platform framework shares the layer that was already the cheapest to learn: laying out views, holding state, calling an API, navigating between screens. What it does not share is everything the operating system and the app stores own. Permission models differ and change with each OS release. Background execution is not a difference in API but a difference in philosophy, and the two platforms disagree at a design level about what an app may do when it is not on screen. Push has different delivery guarantees on each side. Secure storage is Keychain with the Secure Enclave on one platform and Keystore with StrongBox on the other, and they are not the same guarantee. Store review and payment rules are not code at all.
Which produces the rule this card exists for: you can share the code you write, and you cannot share the code you must obey. The shared half is authored by you and is therefore the half you could always have refactored. The unshared half is policy — OS policy and store policy — and no framework abstracts a rule that a reviewer enforces by reading your app.
For this project specifically the asymmetry is at its worst. A wallet or a settlement client touches key storage, biometric binding, background delivery of settlement events, deep links returning from a browser flow, and the store rules around crypto and payments. Every item on that list is in the unshared column. A content app might share ninety percent of its work; an app whose whole job is the secure element shares the chrome around it. That is not an argument against cross-platform — it is an argument for choosing based on the ratio rather than on the language.
And it answers the complaint about volume directly, because the volume is not what it looks like. The reading list is a function of the surface you touch, not of the number of platforms you ship to. Adding a second platform to an app that only draws screens and calls an API adds very little. Adding a second platform to an app that holds keys adds a second secure-storage model, a second biometric prompt semantics, and a second review process — regardless of how much code is shared. Bound the study by listing the surface first, which is the same instruction as one-page-not-the-curriculum: pull the page you are stuck on, not the next one in order.
How it works
What gets shared, and what never does
| Layer | Shared by a cross-platform framework | Why |
|---|---|---|
| UI layout and rendering | Yes | It is a drawing problem, and drawing is portable |
| Business logic, networking, state | Yes | Pure code with no OS opinion |
| Navigation | Mostly | Conventions differ, but they are conventions |
| Permissions | No | OS policy, and it moves with each OS release |
| Background execution | No | The two platforms disagree at a design level, not an API level |
| Push delivery | No | Different transports with different guarantees |
| Secure storage and biometrics | No | Secure Enclave and StrongBox are different guarantees, not different names |
| Deep links | No | Each side verifies ownership with its own hosted file |
| Store review and payment rules | No | Not code. A person reads your app |
The top of the table is the part a framework compresses, and it is the part that was already the cheapest to learn. The bottom of the table is the part that generates the study load, and it is unaffected by the choice.
The self-test, before choosing anything
List the features you will actually ship and mark which half of the table each one lands in. The ratio decides:
| If most features are... | Then |
|---|---|
| Screens, lists, forms, API calls | Cross-platform saves most of the work. Take it |
| Keys, background delivery, biometrics, payments | The saving is real but small, and it is not where the risk is |
This is the same move as choosing-a-chain-is-a-lease in a different domain — the question that looks technical is really about which parts you do not control.
An ordering for the study, since the volume is the actual complaint
- One platform's permission and lifecycle model, properly. The other platform maps onto it, so the second one costs a fraction of the first. Learning half of each costs more than learning one and then translating.
- Secure storage and biometrics on both. This is the part that does not map, so it has to be learned twice, and for this project it is the part that matters.
- The framework last. It is a tool, it is the fastest of the three to learn, and it changes fastest — learning it first means learning it again.
The trade the industry actually settled on
Two stable answers exist rather than one, and they correspond to the two halves of the table. Share everything, including UI is the fast option and is right when the bottom of the table is thin. Share the logic and keep the UI native is the conservative option and is right when platform behaviour is load-bearing. Both are mainstream, which is why the question "is one codebase the trend" has a yes answer that does not settle anything — the trend is real and the decision is still per-app.