logoalt Hacker News

Shopify is moving from React Native back to Swift and Kotlin

1086 pointsby fnthawar2yesterday at 2:09 PM777 commentsview on HN

Comments

madroxtoday at 4:14 AM

I made this argument at my previous company a year ago and was shouted down by most of the mobile engineers. I have since departed, but knowing how much Shopify's engineering blog is worshipped there they will now say this is the future.

uncle_kostyayesterday at 3:48 PM

An Android developer since 2010 here.

I've always been wary of React Native, because my impression is that it hides nuances of the underlying framework. You may be fine implementing 90% of your app but then need that last 10% and may get stuck.

But then I'm also wary of the recent trend by Google to create higher level frameworks on top of native Android APIs. It seems that these days for every Android API family, there is a Google framework that gives you a higher level API. I don't really understand it - is Google admitting that the quality of native Android APIs has eroded? Do they think developers are too inexperienced to deal with native Android APIs?

I'm also not sure I understand the how reasonably large companies consider two native apps to be too expensive. A startup may have a hard time funding both and may need to choose, but an established business should consider not only costs but also the better quality of user experience that native apps provide - that has to count for something.

show 1 reply
jadaryesterday at 11:28 PM

I forsook RN years ago. I am not a huge fan of the JavaScript ecosystem in the first place, and the UX of RN apps is not the best. Instead, I adopted Kotlin Multiplatform (shortly after their memory management overhaul). I haven't been disappointed. As coding agents have come along, they are really good at writing both Swift and Kotlin, and I get to write all the business logic once. UI can either be shared with CMP, which is quite good, or platform-specific.

faangguyindiayesterday at 2:42 PM

React Native is slow.

Hermes VM doesn't even have JIT.

If the majority of your app is native code and only a few places are stitched together via JS code that runs in the Hermes VM, then React Native is suitable for you.

Look at V8 vs. Hermes performance.

We use Flutter; we rarely need to write native code. We have three apps: Symbiote workout app, CalorieCodex, an AI calorie tracker app, and MacroCodex with 17,000+ users, all of them completely free

show 1 reply
petegleesonyesterday at 11:32 PM

Surely the decision comes down to whether they have the expertise to build native apps.

I know JS and I know models still write a lot of garbage JS. I don’t know Swift so a model writing Swift all LTGM. Garbage is still there, I just can’t see it.

The solve isn’t another agentic harness. I need to learn more.

Lots of faster/cheaper justifications. I believe that part. If the quality bar is “web devs prompt models” then that’s a worry.

bsaultoday at 9:14 AM

is there still no way to compile / execute ios apps on a linux machine ?

karmasimidatoday at 3:16 AM

I think in the end, we should just be writing some prototyping language, then let AI translate into target/native development language of the said platform.

Code and optimization is going to be a niche moving forward

alanningtoday at 2:55 AM

I think the most interesting part of this story is actually the Playwright-style “driver” that they built into their new apps to support faster verification by the agents.

Hopefully they will write more about that in the future.

dev_l1x_beyesterday at 4:52 PM

Native is the new React?! I could never drink the React Native cool aid due to background in performance optimization. Agents gave us the way to go native with less effort. Compilation is a good feedback loop for the agentic workflow as well.

ecshaferyesterday at 3:09 PM

They don't say anything in the post. But hotwire native supports pushing ui elements to ios and android. I imagine that might be part of the reason. I haven't built anything substantial with hotwire native though so I am not sure on all of the edge cases.

voidashtoday at 4:24 AM

If they play this right, they can do much more than just ecom and move into agentic templates and start selling slack and jira templates

timzaaktoday at 6:18 AM

Maybe cross platform devkits would not be choosed only becauseof development cost.

bearjawsyesterday at 3:10 PM

We made the same change for our patient app last month, took 2 months to rewrite from react-native to two mobile apps, but we had the PoC in under a week.

Interestingly Apple approved it very quickly, which I was afraid of given such a huge rewrite.

m_sharmayesterday at 3:24 PM

As things get more complicated and you need to worry about performance, where every millisecond counts, it makes sense to go to native: React Native and Flutter. These kinds of technologies are really good in terms of building faster and building one app which can work across. Where that deep performance might not be of a bigger concern, or you need to go build components natively and then expose them through React Native. I think, with AI, now building even a native app is faster, so moving back to native can make sense if you have a team which can understand how things work.

crossroadsguyyesterday at 3:29 PM

Few of the biggest reasons for "migration" to the likes of React Native, and web-views et cetera, were "lack of talent", and not getting that talent fast, and for cheap, et cetera, while of course terming that as innovation, embracing the future, and "that's where the game is at" et cetera. Now with the LLMs that is mostly sorted. So if anything I'd be able to see the eradication of the Electron infestation in my lifetime. But then I see the very tools these LLMs are accessed with i.e harnesses (and of course mostly made by the LLM houses) are made of Electron or similar things (sometimes a Frankenstein like mix). And even today Claude Code shows up as `2.x.yyy` for process name ffs! So if anything, this is getting worse.

Then they say:

> We decided to switch from native to React Native in 2020 for three reasons:

> Stop building the same features twice

> Allow developers to work across the stack

> Spend less time chasing feature parity and more time shipping value

Totally!

Is there some kind of shame in just saying:

- we didn't want to hire more people

- we didn't want to pay those salaries

- we fired a lot of engineers with move to react native/hybrid in mind

- we could reuse the frontend devs (aka "full stack" folks) with or without some extra whippings ensuring they grok the bare minimum they'd need to build for mobile and test in on mobile.

keithnzyesterday at 10:31 PM

This is exactly the decision we have made (though we didn't start with native). It just makes a lot more sense to make native apps and customize to take advantage of different native capabilities. AI essentially makes this a lot easier, and the end result just feels a lot nicer.

nsheliayesterday at 3:32 PM

The rendering layer and APIs differ significantly between iOS and Android. Agents currently do not know how to test the UI, at least in my experience. I would be scared to do that migration right now.

ramshankertoday at 2:51 AM

Yea, I have started using c++ for some of the stuffs previously used python for. When agents is doing the grunt work, better to go even closer to machine.

LelouBilyesterday at 5:50 PM

There's Kotlin Multiplatform too, you can either have the UI for IOS also done in Kotlin, or just have the logic shared in Kotlin and make the IOS UI in Swift.

inopinatustoday at 1:41 AM

Technology historians will pin 2026 as the year frameworks died.

show 1 reply
muddi900yesterday at 5:01 PM

It is the "why use python" for mobile.

The native apps will definitely be better in terms of performance and UX. However, having 2 codebases means twice the tokens.

show 2 replies
nielsbotyesterday at 3:31 PM

When companies can afford to build a native app but instead use a WOSE (write once suck everywhere) toolkit, it’s because they don’t care about the user experience.

tzoneyesterday at 3:57 PM

With latest AI models, we will most likely see shift back to just fully Native apps even for smaller teams. This is type of stuff that AI models do really well, if you get a particular feature or even a bigger app change done in one platform, you can just tell Opus or Fable to replicate to the other platforms and in almost all cases it will just do it as well as most human teams would have done it.

iamgopalyesterday at 2:45 PM

when you are large enough to allocate sufficient resource, you should go native, if not, go flutter/react native etc. Its very simple decisions I guess.

show 1 reply
trencedampyesterday at 6:12 PM

In my limited experience, in h2 this year, LLMs were kind of shit at building Mobile apps. I had to switch TO react native because the flutter app it built me was a horrible buggy mess and I couldn't debug it myself because I don't speak dart. At least with react native I can kind of get in the weeds if needed

epolanskitoday at 9:35 AM

> Shopify has been using LLMs to build software since 2021

Odd banter. So did anybody using GitHub copilot which was in technical preview back then?

Krissotoday at 8:02 AM

I'm still laughing.

parenthesesyesterday at 4:17 PM

The underlying problem is that it's difficult to make a principled decision. So, it's ripe for SEO mining and such fuzzy takes happen.

The meta point of the article, I agree with though. The line is moving and AI makes having multiple platforms with code specific to them faster. Getting them right is still difficult.

jnwatsonyesterday at 4:40 PM

In the history books, this'll be the post indicating the end of writing code as a professional occupation.

trynotsoberyesterday at 5:36 PM

The shared specs and tests seem like a big part of making this work. I'd be interested in a follow-up after a few months of shipping new features on both platforms. Does keeping behaviour consistent still take much coordination, or have the agents reduced that work too?

ergocoderyesterday at 4:32 PM

A companies with thousands of engineers should simply go native.

Write once, deploy everywhere like React Native mainly benefits small teams and startups who are okay with building 90/10 solutions.

At the shopify's scale, they would want to go advance for every corner of the apps and use cases, and only native allows that.

show 1 reply
polloRebozadoyesterday at 3:59 PM

I have not coded any mobile apps, I understand the downsides of using react native/electron due to them being web apps but what about things like Kotlin multi platform or flutter? Aren't this frameworks supposed to allow your to have 1 codebase and the apps be truly native instead of web apps?

show 2 replies
aurareturnyesterday at 2:57 PM

How long until LLMs just write machine code?

show 1 reply
fhubyesterday at 11:34 PM

I had one feature in RN and the rest properly native. The day I realized agents were good, I ported that RN to native. Monkey-off-back moment.

synergy20yesterday at 5:02 PM

wow, what about electron.js the bloated cross-desktop GUI, can LLM either totally modernize wxWidgets(to avoid Qt's license mess), or create some light-weight cross platform GUI widgets to make GUI easy on windows/macos/linux that is not resource heavy?

show 1 reply
bilateryesterday at 4:36 PM

This is obvious in hindsight. I expect most companies that move fast and care about performance to abandon React Native. Code is cheap now, and the tradeoff of having a single codebase and only hiring React devs basically isn't there anymore.

giebischyesterday at 2:30 PM

Their reasoning makes sense. I'd love to read a follow-up and their thoughts in half a year.

show 1 reply
rramonyesterday at 3:40 PM

Missing out on flawless App Intents integration could be business risk for Shopify once people get used to doing everything from a central chat interface, including shopping. I guess it's the real reason for the switch.

gargsyesterday at 3:59 PM

What I want to know is if the agents are so good that they can convert React Native code to native with amazing efficiencies along the way, what's stopping them from improving React Native itself?

show 1 reply
running101yesterday at 3:04 PM

I suspected we would start seeing these types of blog posts. Code is becoming low level, where people do not care what language, it is written in anymore. The cost of moving from one to another is becoming low.

robofanaticyesterday at 4:02 PM

this motivates me to rewrite my Flutter app in Swift. I gave up on deploying the app to Android because of their 20 testers requirement at that time (not sure if its still true).

quotemstryesterday at 2:27 PM

The wheel of fashion turns once more.

show 3 replies
simonhampyesterday at 5:30 PM

As the builder of a post-AI, cross-platform native app building framework like React Native, I 100% believe this to be a backwards move.

I've written up a load of thoughts about that here[1], but in summary for the Shopify case, they're basically going to be spending a ton more than they have to by switching back to multiple apps and I'd predict another swing back to better cross-platform tooling in the coming years.

[1]: https://nativephp.com/blog/why-not-write-it-twice

show 1 reply
cdnsteveyesterday at 9:45 PM

I've been out of FE dev from awhile, is React still leading? I feel like Vue might be taking over?

show 1 reply
tower-shieldyesterday at 5:08 PM

Finally some common sense. Time to put electron to rest.

1saadcodesyesterday at 3:16 PM

What I find interesting is how AI has changed the cost of maintaining two native apps enough that a decision that made no sense a few years ago is worth revisiting now

timedudeyesterday at 4:09 PM

This is what happens when you have too much cash on hand. You start wasting it and doing dumb things. Like rewriting entire apps in two different languages.

evilfredyesterday at 2:29 PM

using React Native you end up having to drop into native code to do anything interesting or optimized, so it feels kind of pointless to not just use the platforms directly

show 1 reply

🔗 View 50 more comments