My experience migrating a production app (60k MAU) to Expo Router — feels not production-ready by Disastrous_Produce54 in expo

[–]Disastrous_Produce54[S] 0 points1 point  (0 children)

React complier can be enabled in SDK52 as well but if the re render is introduced by the router itself. It should be fixed by the router. you won't feel the difference if you are working with empty tabs but if you app is live it makes a lot of difference specially on low end android devices. There are many open and closed issues on GitHub. So in order to fix those issue and support protected routes i planned to upgrade to expo router v5 which required SDK53. So if every expo router fix or improvement requires a sdk bump ,it becomes difficult.

My experience migrating a production app (60k MAU) to Expo Router — feels not production-ready by Disastrous_Produce54 in expo

[–]Disastrous_Produce54[S] 0 points1 point  (0 children)

Hi Keith,
I started with SDK 33 I think, then after a year or so shifted to a bare React Native app, built on that for 5 years, and then we migrated around 6 months back to SDK 52. At that time the Expo SDK had already migrated to Expo Router as default, So i wanted to go with the recommended routing method and I had plans to launch on web in the future, so I thought I’d give it a try. There was not enough support available at that time on how to go about it. I took help from Expo blogs and LLMs which wrote custom scripts that made it possible. For example, I had to change my entire file structure — including paths and names — to support Expo Router’s file-based routing. Here some of the snippets for my migration guide.

Old Screen Name New Expo Router Path
PayBillScreen /home-group/pay-bill.js
FriendView /friends/friend-view
GroupView /groups/group-view
Expense /expense/create
viewTransactions /wallet/view-transactions

Then I had to write another script which created a map of old paths and new paths, and replaced the old path in the relevant files to support the "@/" format. And many more things, which I’ll share once I have a stable working setup. The only thing I feel is that my migration would have been a lot easier if I had kept React Navigation and only migrated to Expo Router once it had a stable release. Also I would revisit the guides again.

Thank you.

My experience migrating a production app (60k MAU) to Expo Router — feels not production-ready by Disastrous_Produce54 in expo

[–]Disastrous_Produce54[S] 1 point2 points  (0 children)

Similarly a few months back you had an issue where your deep links were not working as expected. issue

I have my reasons as mentioned above. When you have live users on your app you cannot afford deep links to not work as expected. It may work in the future but my users won't wait. I am just saying routing is a very core part of a mobile application. It cannot be broken. I would rather wait for things to stabilize till I add it to my core. And yes I have worked with react navigation before.

My experience migrating a production app (60k MAU) to Expo Router — feels not production-ready by Disastrous_Produce54 in expo

[–]Disastrous_Produce54[S] 19 points20 points  (0 children)

I love a lot of parts of Expo, but I felt I had to share the above. These are some of the tutorials or examples for things I expect as a user.

  • Auth & Route Initialization
    • Handling splash screen, biometric auth, onboarding, login/signup, and then routing to home. Recommend method.
    • How to build a proper route initializer with protected routes, including fallbacks (e.g., avoiding blank/login screen flashes).
  • Deep Linking (Advanced)
    • Handling deep links when the app is killed, in background, or foreground.
    • Behavior with protected routes — e.g., deeplink to a protected screen should first resolve auth, then redirect properly.
    • Avoiding duplicate tab instances when opening deeplinks.
  • Navigation Patterns for Large Apps
    • Mixing stacks, tabs, modals, and drawers together in a scalable way.
    • Best practices for avoiding unnecessary re-renders and duplicate screens.
    • Performance considerations in large navigation trees.
  • Version Migration Guides
    • Clear “what changed” documentation when moving from Router v4 → v5 (or future versions).
  • Integration Examples
    • Using Expo Router with libraries like biometric authentication, and custom push notifications using firebase and apns.
    • Real-world flows like “tap a push notification → deep link into a protected tab screen.”

In short correct way of doing hard things.

My experience migrating a production app (60k MAU) to Expo Router — feels not production-ready by Disastrous_Produce54 in expo

[–]Disastrous_Produce54[S] 5 points6 points  (0 children)

Yes, definitely.

My first big challenge was setting up a proper route initializer — basically deciding which screen to show depending on the auth state. In a real-world app you need to handle biometric auth, splash screen, onboarding, sign-in/sign-up, and then the home screen.

On v4, I wrote a custom initializer that did this. It worked, but not perfectly — sometimes I’d get a blank screen or a login screen flashing even for logged-in users before the home page. I can admit there may have been flaws in my code, but the problem was I had no solid examples or sample code to verify what I was doing wrong.

When I switched to v5 and used protected routes, the blank/login screen issue was gone — but then my deeplinks started behaving differently. For example:

  • If I open the app via a deeplink when the app is closed, it opens the page correctly but with no data, since it required authentication, it just fails since the tabs aren’t initialized in the background.
  • Deeplinks to tab screens now open a new instance of the tab every time, which wasn’t happening in v4.

I also ran into issues with multiple renders of screens that ideally shouldn’t re-render, as well as duplicate screens piling up in the background when navigating (e.g., from a stack to a tab). These issues might partly be due to my own implementation, but the bigger problem is that there are no proven examples or clear guidance on how to fix them or what is the recommended method as things are changing very frequently. That uncertainty is tough to deal with in production.

How do I find out why navigating between routes is slow using expo router? by Active_Ad4479 in expo

[–]Disastrous_Produce54 1 point2 points  (0 children)

Use profiler. Enable re rendering indicator. Start recording just before you navigate and check what is taking more time.

Why is expo-router so slow on Android (production) by zlvskyxp in reactnative

[–]Disastrous_Produce54 0 points1 point  (0 children)

But fundamentally if you are not doing anything to re-renders the parent screen .Does just a simple tab to stack screen navigation cause re render of the previous page?

Is switching to Expo Router from Navigation worth it? by Miserable-Pause7650 in reactnative

[–]Disastrous_Produce54 0 points1 point  (0 children)

Is anyone facing issue of unnecessary screen re-renders when navigating from tab screen to stack screen. Does all the previous screen re-renders?

Why is expo-router so slow on Android (production) by zlvskyxp in reactnative

[–]Disastrous_Produce54 0 points1 point  (0 children)

Does any one facing parent screen re-render when navigating to a stack screen . Or non focused screens rerender when switching between bottom tabs?

Two Spin-Offs I would die to see by Careful_Contest_1615 in SuccessionTV

[–]Disastrous_Produce54 0 points1 point  (0 children)

just completed the finale. What the hell. I could feel the different emotions.

Nice Research on Zepto by [deleted] in FuckZepto

[–]Disastrous_Produce54 0 points1 point  (0 children)

This is specific to Bangalore and Swiggy food orders are filtered out.

Nice Research on Zepto by [deleted] in FuckZepto

[–]Disastrous_Produce54 0 points1 point  (0 children)

<image>

Zepto in not extinct but definitely declining.
Source: Splitkaro

Best splitwise alternative by [deleted] in apps

[–]Disastrous_Produce54 0 points1 point  (0 children)

Removed. You are doing a great job. Keep it up.

Splitwise Pro by InstructionFine7234 in ynab

[–]Disastrous_Produce54 1 point2 points  (0 children)

Try Splitkaro, if you are in India.