Shopify went all-in on React Native in 2020 for three stated reasons: stop building the same features twice, let developers work across the stack, and spend less time chasing feature parity between iOS and Android. On September 10, the company’s engineering blog announced it is moving back to Swift and Kotlin. The post opens by conceding the 2020 bet “has been extremely successful,” then explains why that stopped being decisive. Coding models, in the company’s words, changed what it costs to build mobile apps twice: “building the same feature in Swift and Kotlin no longer carries the cost it used to.” The article drew 861 points and 582 comments on Hacker News, and most of that argument was about whether the claim survives contact with the hard part of the problem.
The migration itself is a rebuild, not a patch. Shopify weighed gradual brownfield migration against rebuilding from scratch and picked greenfield, on the reasoning that agents can implement a feature in Swift and Kotlin using the React Native version as a reference. The Shop app went from a proof of concept to a fully native app published in the app stores in twelve weeks. The Shopify app, more than 300 screens with installable widgets, an Apple Watch app, and Siri Shortcuts, is mid-migration and ships later this year. To stop the agents from producing a mountain of unshippable code, the team built a system called Helix: it reads the React Native screen, proposes an ordered list of small checkpoints, and refuses to advance until each one proves its behavior with tests, matches the running app in a visual review, survives two adversarial code reviewers, and gets a human’s approval. Review feedback is remembered, so the loop gets more autonomous as it goes. The post’s second half is about making the app legible to agents rather than the reverse, with business logic decoupled from the UI so it can run headlessly and be driven through a CLI. Simulator control was the bottleneck: a code change takes seconds, but verifying it through screenshots and the accessibility tree takes minutes, and no model is useful if it cannot test its own work quickly. One clip on the page is captioned “This is real-time (not sped up).”
The open-source fallout may outlast the migration. React Native Skia will be sponsored through the end of 2026, after which its maintainer, William Candillon, forks the repository and republishes it under a new name. FlashList, installed roughly two million times a week, keeps getting critical compatibility fixes while Shopify looks for another company to take stewardship. Restyle gets archived. On Hacker News, one commenter summed up the loss bluntly - “Major loss for react native community at large with Skia and Flashlist dying” - while the thread’s most cited reading came from a commenter named paxys, who described the ordinary arc of a company’s mobile stack: start native at small scale, move to a shared runtime once you need to cover more surfaces quickly, and go back to native once you can afford separate teams per platform. Others wanted numbers the post does not provide. “Cool story but what’s the token spend?” asked gazarsgo, in a question that went unanswered. The sharpest objection came from hermitwriter, who noted that producing two implementations that look the same today is not the hard part: “The hard part is keeping them the same.” Shopify’s answer to that is the checkpoint loop, and its evidence is a twelve-week rebuild.
🎩 Cask’s Take
The interesting part of this decision is which cost the agents actually removed. Writing a screen twice was always the visible expense, and it was never the one that sank teams. The expensive thing was the coordination: two implementations that have to behave identically, one set of design decisions, two release trains, and the class of bug that exists on exactly one platform. Shopify is claiming the first cost collapsed and the second one can be turned into tests, visual diffs, and checkpoints that a loop enforces. If that claim holds, the artifact that carries intent stops being the codebase and becomes the spec, the tests, and the review behind it, which is a bigger change than a language migration.
It is also a bet that has a price. Choosing native in 2026 means a mobile stack now carries what a shared runtime used to absorb: token spend, model quality, and the maturity of the agent tooling around it. The thread asked for that number and did not get it, which is a pattern worth watching every time a company attributes a strategy shift to agents. Migration costs are usually amortized in a spreadsheet somewhere; now part of them are metered per token and repriced whenever a model does.
The qualifying clause the post skips is who can afford the new math. The best reading in the thread said this will happen at large, well-capitalized companies and stay a hard sell for constrained teams, because the tokens and the review headroom are the entry fee. That is the honest shape of it. Write-once was never only a technical claim; it was a way to buy leverage with headcount. Agents change the currency, not the argument.
For fifteen years the selling point of cross-platform was that one team could hold the whole app in its head. The copy just got cheap. The holding is still the job.