I think it is extremely important. You do not want an iOS app on Android and an Android app on iOS. Users would absolutely hate that.

Reply to this note

Please Login to reply.

Discussion

Why is there so little discussion about how to do this in the RN community then? Are RN devs just lazy, or is cross-platform UI prohibitively expensive? Is there a competing school of thought that values UI consistency cross-platform? It seems like this is one of the selling points of e.g. gluestack

Because no serious app uses either RN or Flutter, and when they do, they basically have two apps in one code base.

Some RN and Flutter developers do a lot of work to mimic the UI on Android and iOS separatedly. They manually recreate.. say.. the new glass effect from iOS, on RN and Flutter. Same happens with Android's design. But it is never the same. Any user (because they use their platform everyday) is an experienced pixel picker and can easily notice that "something is wrong" with the UI in this app.

RN and flutter are great for simple apps that don't need a lot of UI work. They are usually how companies prototype things before they are big enough to move to a native approach, with separate teams, for each OS.

Multiplatform has been a dream for decades now. But it still doesn't deliver. It's similar to how Augmented Reality headsets exist but are really never good enough to catch on.

What accounts for companies like Facebook, Amazon, and Microsoft leaning into RN? Cost cutting and enshittification?

I agree with you that it seems like the only way to get a full-native UX would be to use the platform... but you also probably need to memorize the platform's design guidelines in order to not undermine the framework you're working with. Coupled with the need to maintain 2 codebases (3 if you want web or desktop) seems like enough complexity to warrant specialist developers, making high-quality multi-platform apps categorically impossible for a solo dev or small team.

That's why Primal has at least one dev for each OS. It's a lot of money just to get 3 codebases out.

Your best bet for serious RN use is to create a UI that is so different to the base OS that it breaks the user's expectations that things should match the OS.

Basically, the design needs to be better than the OS's design. Which only big tech has the money to do.

Sheesh. Maybe I'll go back to web and forget I ever looked into this tarpit.

One other question though — would KMP be a better option than Flutter/RN for cross-platform core logic? You could then limit your separate codebases to UI

1. KMP isn't ready (iOS is slow, web build is abysmal, desktop is ugly as fuck).

2. They might become just another RN or Flutter. They are trying to avoid it, but this is not easy.

3. They are an Android-based framework being applied to iOS and Desktop. And it carries most of the Android style of doing things to the other OSs.

But if Google keeps throwing money at them, they do have a better chance of working.

I will make Quartz (our lib that Amethyst uses) a KMP ready. But I don't expect a lot of production KMP apps anytime soon.

Thanks, I appreciate the expert insights. What a mess, no wonder you haven't done Amethyst iOS

Or ask me instead 😉

Give me your most contrarian takes

Vitor is right when he says you don't want an iOS-looking app on Android and viceversa.

Flutter goes a long way to give you base themes for Android (Material) and Cupertino (iOS) both of which are very customizable. I do not know whether RN has an equivalent but he put both in the same basket so I'm clarifying.

As long as you respect basic HIG for each you are fine, navigation and inputs in particular. The latest iOS glass effect? Who cares. We got bigger fish to fry.

The world is going to the shitter and we need more apps out there faster.

There's also purplestack (early days but pretty decent). I'm not sure if you like AI-assisted coding though

Not really, but I'll use whatever tool works. Maybe I'll give purplestack a try. It would require abandoning my state management library

I get it. It's probably better than purplebase which doesn't support outbox right now.

You could try other tools to vibe some React Native app. It might just be good enough.

I received hundreds of complaints, requests and bug reports for Zapstore over the last 18 months. Not a single one had to do with Flutter not looking native.

Zapstore does look nice. I feel like iOS has a more distinctive look though

Looking through the massive amount of HIG documentation I can't help but feel that a lot of this stuff is busywork which only hurts UX long-term by diverting effort away from stability and small projects, and toward fashion and large, well-funded projects. But that's nothing new.

You can use Flutter and be creative enough to avoid the platform specific idioms, with better UX/UI solutions.

The whole ◀️ back button thing is a great example.

In Zaplab Design I have :zeroPercent: back buttons. And, since everything is swipe down, that's not an issue on iOS.

just pick one?

I have no idea about React Native. Flutter is very solid for most apps.

It has nothing to do with being "serious" and everything to do with performance requirements and nitpicking.

Not everybody needs a feed refreshing at 240hz

they are js devs

they want things that look like web

not really. the X app doesn't even use material design. damus android looks pretty similar to X so I'm not worried about it.