Six years. Four apps, millions of merchants on them daily. Two open-source libraries that became the default in their categories. On Wednesday Mustafa Ali announced that Shopify is moving its mobile apps from React Native back to Swift and Kotlin, and the stated reason fits in a sentence: coding agents made building the same feature twice cheap enough that sharing one implementation stopped being worth its layers.
That is the headline, and it is the least interesting thing in the post. The 2020 bet on React Native was a labor hedge. Write once, let web developers ship mobile, stop chasing parity. Every cross-platform abstraction is the same bet, priced against what a second implementation costs. When that price collapses, the abstraction is left holding only its costs, and Shopify names them: framework updates, dependency layers, performance work that native does not need. Nothing about that is specific to React Native. It is what happens to any write-once tool when writing gets cheap.
The part worth reading twice is further down, where the post stops talking about the model and starts talking about the test loop.
Agents can make code changes in seconds, but it takes them several minutes to test the output. This makes iterating extremely slow and manual. It doesn't matter how good the model is if it can't test its work quickly, which is especially difficult on mobile.Shopify Engineering
Shopify's answer is not a better simulator harness. It is an architecture change. Business logic gets fully decoupled from the UI and runs headless on a desktop, exposed through a CLI, so an agent can inspect state, navigate, and act in milliseconds without touching a screen. The apps are being rebuilt, in their own words, so both humans and agents can understand, test, and change them. That is a different design constraint from anything the 2020 decision optimized for. The old question was who can write the code. The new one is who can verify it, and how fast.
The old question was who can write the code. The new one is who can verify it, and how fast.
The migration process says the same thing from the other side. Pointing a model at the React Native codebase and asking for a native one-shot produced, per the post, a huge amount of unmaintainable code. What worked was Helix: a loop of small checkpoints, each of which has to prove its behavior with tests, match the running app visually, survive two adversarial reviewers, and get a human sign-off before the next one starts. The Shop app went from proof of concept to a rebuilt native app in the stores in 12 weeks that way. Generation was never the bottleneck in that loop. Checking was.
The honest objection is that this is one company's story about its own success, told while the hard part is still in progress. React Native apps can be fast, and Shopify says theirs are. The Shop app was the first migration, and the biggest one, the 300-plus-screen Shopify app with widgets, a Watch app, and Siri shortcuts, is still underway and ships later this year. The 12-week figure could be survivorship. Grant all of it. The architecture decision pays regardless of whether the rewrite hits its date, because a headless core with a CLI is a better surface for agents whether the UI on top of it is SwiftUI or React. Shopify would have wanted that layer even if it had stayed.
There is a cost the post handles gracefully and the ecosystem will feel anyway. FlashList does around 2 million downloads a week and Shopify is looking for someone to take long-term stewardship. React Native Skia gets sponsored through the end of the year and then forks under a new name. Restyle is archived. A framework's best libraries were funded as a side effect of one large company's stack choice, and stack choices now get re-litigated on a model release cadence. Two days after Tailwind found a home inside Shopify, three of Shopify's own libraries are looking for one.
The framework was never the asset. The loop is. Shopify just rebuilt four apps to make that true.