Agents Rebuilt Shopify's App in 12 Weeks. React Native Is Out.
TL;DR
On September 10, Shopify Engineering published "Native is now the future of mobile at Shopify," which is its January 2020 post "React Native is the Future of Mobile at Shopify" with one word swapped. The company is moving its mobile apps off React Native and back to separate Swift and Kotlin codebases. The stated reason is not that React Native got worse. It is that coding agents made building the same feature twice cheap enough that the shared-codebase discount stopped deciding anything. Six engineers rebuilt the Shop app natively in 12 weeks, cut Android cold start in half, and cut crashing sessions by a factor of ten.
A six-year bet, reversed
In January 2020, Farhan Thawar, then VP of Engineering for Channels and Mobile at Shopify, gave three reasons for the React Native pivot: the Tictail acquisition had shown how far the framework had come, Shopify's web engineers already knew React, and the performance curve was bending upward. It worked. Shopify shipped Shop, Point of Sale, and Inbox on it and became one of the largest React Native users outside Meta.
Mustafa Ali's September 2026 post does not argue that any of that was wrong. It argues the arithmetic changed:
Native still means building twice, that cost has not disappeared. What changed is that agents can now do enough of the implementation, translation, testing, and review work that it's no longer the deciding factor.
That is the whole thesis. A cross-platform framework sells one thing: amortizing human implementation effort across two targets. If a machine does most of the translation, the discount shrinks, and what is left is a framework tax paid for a benefit you no longer need as badly.
The numbers Shopify put on the table
The companion post, "Migrating Shop app from React Native to native" by Max Da Silva, Jason Kim, and Quique Fagoaga, is where the receipts are. Cold start is the headline.
The rest of the scoreboard, all measured against the previous React Native build:
- Crash-free sessions went from above 99.5% to above 99.95%, which Shopify describes as a 10x reduction in sessions that crash.
- Android app size fell 109 MB, or 37.2%. iOS gained 1 MB, or 1.5%. Roughly a third of what Android users were downloading was framework and its luggage.
- Android release build time dropped about 75%. iOS build time came out roughly the same.
- Scrolling the Android feed now runs at 120 FPS.
One caveat is worth holding onto: every one of these figures is Shopify measuring Shopify, and nobody outside the company has benchmarked the two builds. A rewrite by a motivated team also fixes years of accumulated sins that had nothing to do with the framework. The 37% size cut is hard to explain away. A 23% iOS startup win is exactly the size of number that a general cleanup could have produced on its own.
Six engineers and a stack of subagents
The interesting part for anyone running agents in anger is not the decision, it is the harness. A core team of six built the foundations and the main user journeys, with feature teams joining midway to validate their areas and handle edge cases. Their migration workflow shipped as an extension for the Pi coding agent, split across specialized subagents: one to inspect the React Native source, one to write down the behavior it found, one to plan the platform-specific implementation, one to write the native code, and one to review the result for parity.
Tardis is the part you should steal
Reading source code tells an agent what a screen is supposed to do. It does not tell it what the shipped app actually does. So the team built Tardis, a debugging tool that gave agents structured access to live native app events, logs, and state, plus the ability to send commands back into the running app.
For parity checking, Tardis captured screenshots and event windows from both the React Native app and the native app at named checkpoints. Agents then compared event names, counts, and payload fields, discounting values like timestamps that are supposed to differ. Picture two cars running the same track with identical telemetry loggers bolted on, then diffing the traces while agreeing not to care that the clocks disagree.
That idea generalizes far past mobile. An agent rewriting anything against an existing implementation is grading its own homework unless you give it a way to observe both systems under the same inputs. Named checkpoints plus an event diff turn "looks right" into something closer to a test.
Where the agents still needed adults
Shopify is unusually direct about the limits:
Native expertise remained essential. Generated code could satisfy feature requirements while still introducing duplication, architectural drift, or performance problems.
Read that as the current shape of the tool. Agents closed the translation gap, the mechanical work of expressing a known behavior in a second language. They did not close the judgment gap, which is the part where a human notices that the fifth screen has quietly invented its own networking layer. A 12-week rebuild with six engineers is not six engineers watching a progress bar.
The open-source bill comes due
Shopify maintained three of the more widely used React Native libraries, and all three now have an end state.
- React Native Skia: Shopify sponsors the work through the end of 2026. William Candillon will fork it and publish under a new name, and the original repo gets archived.
- FlashList: Shopify will keep fixing critical compatibility breaks and says it is in discussions to transfer long-term stewardship to other companies.
- Restyle: maintained through the end of 2026, then archived. Smallest adoption, shortest runway.
Shopify's post puts FlashList at around two million weekly downloads. The npm registry downloads API recorded 1,082,601 for the week ending September 9, with Skia at 776,214 and Restyle at 80,101. Either count says the same thing: a real slice of the React Native ecosystem learned that its dependencies are now somebody else's roadmap, in the same post that explained why Shopify no longer needs them.
What this actually means for you
Do not read this as "go native." Read it as a repricing.
Shopify had 300 or more screens in its flagship app, a design system, an analytics event corpus dense enough to diff against, and engineers who can tell good Swift from merely compiling Swift. Those are the inputs that made a 12-week agent-assisted rewrite survivable. A two-person team with none of them gets a rewrite that builds and a backlog of architectural drift nobody can see yet.
The transferable lessons are narrower and more useful:
- Cross-platform's core value proposition was human labor amortization. If agents handle translation well in your stack, re-run the build-versus-share decision with current numbers instead of 2020 ones.
- Build the observation layer before you point agents at a rewrite. Tardis came before the parity claims, not after them.
- Narrow subagents with one job each beat a single agent with a large prompt, especially when one of those jobs is checking the others.
- Framework choice is now also a maintenance-risk choice for everyone downstream of the maintainer.
The Shopify app itself, the one with 300-plus screens, home and lockscreen widgets, an Apple Watch app, complications, and Siri Shortcuts, is mid-migration and ships later this year. That is the real test. Shop is a shopping app. The Shopify app is a decade of surface area.
Key Takeaways
- Shopify is moving its mobile apps from React Native back to native Swift and Kotlin, six years after declaring React Native the future, and names coding agents as the reason the cost of building twice stopped being decisive.
- A core team of six rebuilt the Shop app from proof of concept to app store in 12 weeks, reporting Android cold start down from 4,433 ms to 2,233 ms, iOS from 3,200 ms to 2,466 ms, crash-free sessions above 99.95%, and 109 MB off the Android binary.
- The workflow ran as a Pi coding agent extension with five specialized subagents, plus Tardis, a custom tool that let agents diff live events and screenshots between the old and new apps at named checkpoints.
- Shopify states plainly that native expertise stayed essential because generated code can meet requirements while introducing duplication, architectural drift, and performance problems.
- React Native Skia gets forked under a new name, FlashList is looking for a new steward, and Restyle is archived after 2026, which is roughly 1.9 million weekly npm installs changing hands.
- All performance numbers come from Shopify's own measurements of its own builds, with no independent benchmark yet.
Sources: Shopify Engineering: Native is now the future of mobile at Shopify, Shopify Engineering: Migrating Shop app from React Native to native, Shopify Engineering (2020): React Native is the Future of Mobile at Shopify, npm registry downloads API, Pi coding agent, Simon Willison