<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Frontend on Trevor's Blog</title><link>http://mings.in/en/tags/frontend/</link><description>Recent content in Frontend on Trevor's Blog</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Tue, 15 Sep 2026 15:07:44 +0800</lastBuildDate><atom:link href="http://mings.in/en/tags/frontend/index.xml" rel="self" type="application/rss+xml"/><item><title>Shopify Went From React Native Back to Native: Is Cross-Platform Still Worth It in the AI Coding Era?</title><link>http://mings.in/en/posts/shopify-rn-native/</link><pubDate>Tue, 15 Sep 2026 15:07:44 +0800</pubDate><guid>http://mings.in/en/posts/shopify-rn-native/</guid><description>One number first: 12 weeks.</description><content:encoded><![CDATA[<h2 id="a-12-week-about-face">A 12-week about-face</h2>
<p>One number first: <strong>12 weeks.</strong></p>
<p>Shopify&rsquo;s consumer app, Shop, went from proof of concept to a fully native production release in 12 weeks.</p>
<p>Before that, Shopify had put five years into React Native.</p>
<p>This is not a &ldquo;the framework blew up&rdquo; story. Shopify itself says it plainly: <strong>React Native did nothing wrong, it did its job well for years.</strong> As recently as January 2025, the company was still publicly discussing React Native&rsquo;s roadmap.</p>
<p>So why tear it up?</p>
<p>Shopify&rsquo;s director of engineering, Mustafa Ali, gave one line that I think is the thing worth chewing on:</p>
<blockquote>
<p><strong>&ldquo;LLMs changed one of the core assumptions behind our 2020 decision.&rdquo;</strong></p>
</blockquote>
<h2 id="lets-get-the-facts-straight">Let&rsquo;s get the facts straight</h2>
<p>What Shopify is doing:</p>
<ul>
<li><strong>Dropping cross-platform and going fully native</strong> (Swift + Kotlin)</li>
<li>Consumer app Shop: native rewrite done and shipped in 12 weeks</li>
<li><strong>Next is the merchant app</strong> — 300+ screens, deeply dependent on iOS platform capabilities. That&rsquo;s the genuinely hard one</li>
</ul>
<p>What&rsquo;s interesting is that Shopify is not renouncing anything. They say React Native was the right call at the time, and that under the new conditions the math no longer works.</p>
<p><strong>So what changed in the conditions?</strong></p>
<h2 id="the-core-change-ai-flattened-the-cost-of-building-it-twice">The core change: AI flattened the cost of building it twice</h2>
<p>The whole case for a cross-platform framework is one sentence: <strong>write once, run in two places.</strong></p>
<p>That value rests on an assumption: <strong>implementing the same thing separately on iOS and Android costs too much to be worth it.</strong></p>
<p>Shopify chose React Native in 2020 on exactly that assumption.</p>
<p>By late 2025 they found the situation had changed:</p>
<blockquote>
<p>An agent can look at how a feature is implemented on iOS and just write the Android version — and the other way around.</p>
<p>Engineers can also work on platforms they&rsquo;re not familiar with, because the agent carries most of the platform-specific work.</p>
</blockquote>
<p><strong>See it? The cost of writing it twice on two platforms has been beaten down by AI.</strong></p>
<p>When duplicate implementation gets cheap, the value saved by sharing one codebase shrinks on its own.</p>
<p>And once saving headcount is no longer a crushing advantage, the benefits of native come back into view: <strong>performance, full access to platform capabilities, no bridge layer detours, new system features on day one.</strong></p>
<p>300+ screens deeply tied to iOS platform integration — that kind of work was always a better fit for native than for a layer of abstraction.</p>
<p><strong>Native used to be avoided because it was expensive. It&rsquo;s not that expensive anymore.</strong></p>
<h2 id="dont-applaud-yet-ai-rewrites-are-far-from-one-click">Don&rsquo;t applaud yet: AI rewrites are far from one-click</h2>
<p>If you think Shopify threw code at an AI and picked up a native app 12 weeks later, you&rsquo;ve skipped the most important part of the story.</p>
<p><strong>Their first attempt failed.</strong></p>
<p>The first approach was direct: hand the existing React Native code to an LLM and have it rewrite in native.</p>
<p>The result — Mustafa Ali&rsquo;s word was <strong>&ldquo;slop&rdquo;</strong>. Adding more steps didn&rsquo;t fix it. Even having the model write specs and task lists before touching code produced so much code that engineers simply didn&rsquo;t want to maintain it.</p>
<p><strong>This is the biggest misread people make about AI coding: assuming &ldquo;AI can write it&rdquo; means &ldquo;AI can deliver it&rdquo;.</strong></p>
<p>What actually got the project through was a system they built for it, called <strong>Helix</strong>:</p>
<ul>
<li><strong>Screen-by-screen migration</strong>: don&rsquo;t try to rebuild everything at once, break each screen into smaller chunks</li>
<li><strong>Continuous comparison</strong>: while migrating, compare behavior against the existing app</li>
<li><strong>Independent review</strong>: a separate agent scans the code first, then a human signs off</li>
<li><strong>Feedback loop</strong>: keep the review findings so earlier problems guide later migrations</li>
</ul>
<p>The thinking matches what Shopify CEO Tobi Lütke put on X — he said he was &ldquo;considering banning Claude Code at Shopify&rdquo; because engineers were submitting agent-generated code with insufficient review.</p>
<p><strong>Even Lütke, one of the most aggressive AI boosters, holds the same line: agent output has to prove itself before anyone relies on it.</strong></p>
<h2 id="a-new-bottleneck-nobody-predicted">A new bottleneck nobody predicted</h2>
<p>There&rsquo;s one detail that feels very real, and everyone doing mobile should look at it:</p>
<blockquote>
<p>An agent can rewrite the code in seconds, then spend twice as long testing it in a mobile simulator.</p>
</blockquote>
<p><strong>Writing code got faster. Verification got slower.</strong></p>
<p>This is the mismatch of the AI coding era that&rsquo;s easiest to miss — <strong>your development speed went up, your verification bandwidth didn&rsquo;t.</strong> However fast your hands are, the test environment doesn&rsquo;t speed up with them.</p>
<p>Shopify&rsquo;s fix is clever, I think: <strong>peel the business logic out of the UI</strong> so agents can talk to the app directly through a CLI running on the desktop.</p>
<p>The result: some checks that took minutes now finish in milliseconds, and the same interface can drive the simulator when needed.</p>
<p><strong>Note the fix itself — it&rsquo;s another proof that clear architecture beats better tools.</strong> If your business logic and UI are fused together, no agent will save your test speed.</p>
<h2 id="meanwhile-a-wilder-case">Meanwhile, a wilder case</h2>
<p>The same story mentions something else, and I think it&rsquo;s more interesting side by side.</p>
<p>Bun&rsquo;s creator Jarred Sumner, now at Anthropic, did a language port: <strong>64 parallel Claude instances</strong> moving the JavaScript runtime from Zig to Rust.</p>
<p>Scale: about <strong>1 million lines of code</strong>.</p>
<p>Time: <strong>11 days</strong>, supervised by one person.</p>
<p>API cost: about <strong>$165,000</strong>.</p>
<p>Before merging, the existing test suite passed on all six supported platforms.</p>
<p>The line in the story that lands: <strong>a year ago this took a small team several quarters; now it&rsquo;s one person&rsquo;s 11-day sprint.</strong></p>
<h2 id="but-some-companies-went-the-other-way">But some companies went the other way</h2>
<p>Don&rsquo;t rush to &ldquo;cross-platform is finished&rdquo;. This is not a one-way street.</p>
<p>In May this year, developer Simon Willison wrote up an encounter — he met an engineer whose company <strong>used coding agents to merge two separate iPhone and Android apps into a single React Native app.</strong></p>
<p>Willison found it odd at the time: if agents make maintaining two codebases easy, why go to the trouble of merging?</p>
<p>The engineer&rsquo;s answer was practical: <strong>not wanting to be locked in.</strong> React Native did what they needed, and if things change later they can always migrate back to native.</p>
<p>And what Shopify is doing now is exactly that migrate-back move.</p>
<p><strong>So what actually changed is not &ldquo;which direction is right&rdquo;. It&rsquo;s that migration got cheaper, and both directions became viable.</strong></p>
<p>A tech choice used to be a five-year bet, because reversing it was too expensive. Now you can flip in 12 weeks, and the choice goes from lifetime commitment to phase-by-phase decision.</p>
<p>Is that good for engineers, or just more tiring? I lean good — <strong>but it demands a cleaner architecture, or you can&rsquo;t even migrate.</strong></p>
<h2 id="if-youre-torn-ask-yourself-four-questions">If you&rsquo;re torn, ask yourself four questions</h2>
<p><strong>1. Is your pain &ldquo;writing it twice&rdquo; or &ldquo;the two sides disagree&rdquo;?</strong></p>
<p>AI can relieve the first. The second still needs architecture. If your pain is really the second, the value of cross-platform is going up — consistency is an architecture problem, and AI doesn&rsquo;t solve it for you.</p>
<p><strong>2. How deep is your dependence on platform capabilities?</strong></p>
<p>Like Shopify&rsquo;s merchant app — 300+ screens, deeply tied to iOS platform integration — native pays off for real. But if your app is mostly forms, lists and chat, the cost of shared UI is entirely acceptable.</p>
<p><strong>3. Are your business logic and UI cleanly separated?</strong></p>
<p>Shopify&rsquo;s &ldquo;testing got slower&rdquo; trap is worth everyone&rsquo;s attention: <strong>if logic and UI are tangled together, AI can write as fast as it likes and verification still won&rsquo;t speed up.</strong> Cut the boundary clean first, then talk about whether to use AI.</p>
<p><strong>4. Can you actually govern what the agent produces?</strong></p>
<p>Shopify only got through after building Helix. The first attempt produced slop. If you don&rsquo;t have a review process and verification tooling to match, &ldquo;let AI rewrite it&rdquo; is most likely a hole you&rsquo;re digging for yourself.</p>
<p><strong>The answers to these questions matter far more than which framework is more popular.</strong></p>
<h2 id="so-back-to-the-question-is-cross-platform-still-worth-it">So back to the question: is cross-platform still worth it?</h2>
<p>My read: <strong>the definition of &ldquo;worth it&rdquo; is changing.</strong></p>
<p><strong>First, frameworks that live on saving headcount are under the most pressure.</strong></p>
<p>If your framework&rsquo;s core pitch is one codebase, two platforms, one team saved, AI is eating that pitch directly. Shopify is the live sample.</p>
<p><strong>Second, but cross-platform value was never only about saving headcount.</strong></p>
<p>There&rsquo;s also: consistent behavior across platforms, one release cadence, lower cognitive load for the team, business logic that doesn&rsquo;t need writing twice and then kept from drifting apart.</p>
<p><strong>AI made writing code cheap. It did not make guaranteeing that both sides behave the same cheap.</strong> That&rsquo;s an architecture problem, not a typing speed problem.</p>
<p><strong>Third, and this is the point I most want to make: the KMP route may be sitting right on top of this shift.</strong></p>
<p>Lay out today&rsquo;s cross-platform options and there are really two camps:</p>
<ul>
<li><strong>Shared UI camp</strong> (React Native, Flutter): the interface crosses too, saves the most, and gets hit hardest by &ldquo;AI made native cheap&rdquo;</li>
<li><strong>Shared logic camp</strong> (Kotlin Multiplatform): shares only business logic, each side writes its own native UI</li>
</ul>
<p>What Shopify migrated to is <strong>Swift + Kotlin</strong> — note, <strong>two native languages, and one of them is Kotlin</strong>.</p>
<p>If AI really has crushed the cost of platform-specific implementation, then the camp that benefits least is shared UI. Whereas shared logic plus native UI keeps the single-point maintenance win for business logic and collects the native UI dividend.</p>
<p><strong>In other words: in the AI era, what you share matters more than how much you share.</strong></p>
<h2 id="my-conclusion">My conclusion</h2>
<p>This Shopify case gets misread in two ways:</p>
<ul>
<li>Misreading one: <strong>&ldquo;React Native is finished&rdquo;</strong> — no, Shopify itself denies that</li>
<li>Misreading two: <strong>&ldquo;AI can do anything, it can rewrite everything&rdquo;</strong> — also no, their first attempt produced a pile of slop</li>
</ul>
<p><strong>What&rsquo;s really happening is closer to: AI lowered implementation cost, not decision cost.</strong></p>
<p>What to share, what to keep native, how to slice the architecture, how to verify — none of those judgments got cheaper. Shopify shipping in 12 weeks wasn&rsquo;t because the model was that strong. It was because they built Helix to keep the model in line.</p>
<p><strong>So is cross-platform still worth it?</strong></p>
<p>Yes. But the reason is shifting from saving headcount to architectural governance.</p>
<p>And the answer to which framework is shifting from which one saves more code to — <strong>which one is easier for both AI and humans to maintain well.</strong></p>
<p>Those two sentences sound similar. In practice they&rsquo;re far apart.</p>
<hr>
<p>What do you make of Shopify&rsquo;s decision? Does the cross-platform versus native math work out on your project?</p>
<p>Comments welcome.</p>
<hr>
<p><em>References: <a href="https://thenewstack.io/shopify-native-ai-agents/">Shopify spent years on React Native — then rebuilt everything in 12 weeks (The New Stack, 2026-09-10)</a> · <a href="https://thenewstack.io/shopify-claude-code-agentsmd/">Shopify&rsquo;s CEO threatened to ban Claude Code (The New Stack)</a></em></p>
]]></content:encoded></item></channel></rss>