News

Shopify Abandons React Native to Return to Native Swift and Kotlin Development

According to GIGAZINE, the e-commerce giant is migrating from React Native back to Swift and Kotlin for its mobile app, and the proximate cause is not aesthetic — it's their coding AI.

Shopify Abandons React Native to Return to Native Swift and Kotlin Development

For years the cross-platform pitch has been the same seductive sentence: one codebase, two stores, half the team. It is, in my experience, the architectural equivalent of a beautifully dressed house built on a shallow foundation — until something real loads on it, and then you discover every seam. Shopify just publicly admitted the foundation cracked, and they're walking back to native.

Internal tooling improved enough that maintaining two native codebases stopped being the punishing proposition it once was. The company rebuilt the core of its main app with the AI assisting, then re-evaluated its mobile stack. The reported conclusion: features that lived exclusively on iOS or Android could now exist on both, and the cross-platform compatibility tax shrank significantly. Shopify plans to rebuild its native apps from scratch as part of the migration.

The seams were always there

React Native is not a bad framework. It is, however, a layered framework — and layers in a mobile app are not the kind of abstraction you want between your code and the silicon. Every bridge hop between JavaScript and native, every dependency you cannot fully inspect, every platform-specific quirk that surfaces only in production: that is technical debt with interest, and it compounds quietly until the day it doesn't.

What Shopify reportedly found when they peeled those layers back is the classic list. Native gives first-party integration with iOS and Android features, fewer frameworks standing between the code and the runtime, and a far more direct line of sight when something breaks on a real device. The historical trade-off was headcount — two apps, two teams, duplicated effort. AI-assisted coding changes that equation, and Shopify is the largest public case study I've seen where the change is decisive enough to justify a from-scratch rebuild.

What this means for custom app projects

For teams picking a stack for a custom business app — whether you're assembling something in a visual environment, hiring engineers, or living somewhere in between — the lesson is not "native wins." The lesson is that the framework is a means, not the goal. The goal is shipping features that perform correctly on the target platform without a maintenance burden that outpaces your feature roadmap.

If a vendor or partner pitches you a single-codebase-everywhere story, push on three points. How does the bridge layer affect debugging when something breaks on a real device? How are platform-specific regressions handled when the framework itself updates? And what is the actual cost — in dollars and in attention — of staying current with the framework's own churn? Shopify had more engineering resources than most organizations will ever assemble, and they still concluded the math no longer works for them. Take the hint.

The mandate, and what to watch

The interesting follow-up will be whether other large React Native shops follow. Shopify's bet is that AI-assisted native development has crossed an economic threshold. If true, the cross-platform mobile story — and by extension, parts of the visual app-builder pitch that lean on cross-platform runtimes under the hood — has a harder row to hoe than its proponents want to admit. Watch whether the from-scratch rebuild actually ships on the timeline Shopify is implying, and whether the claimed feature parity holds up in production rather than in a controlled demo.

For now, the verdict from the trenches is this: elegant native code with serious AI assistance is, today, a more honest answer than bloated cross-platform abstractions pretending to be simple. That is not a victory for hand-rolled everything; it is a victory for architectural honesty. Pick the stack that lets you debug the bug, not the framework.

Fresh on this