We're adding an AI Usage Policy to the React Navigation repo.
AI helps us move fast, but we believe humans should still have understanding of systems they are working on. It also must not replace human interaction.
Open Source is about collaboration. Let's keep it that way.
github.com/react-navigati…
Here's how I'd start a React Native app today if I want it to be native: USE THE PLATFORM, don't reinvent the wheel. My must-haves:
- react-native-screens from @swmansion, together with @reactnavigation. Native stack, native tabs, formSheet for bottom sheets, native modals, SF Symbols, Material Symbols, etc. Keep an eye on v5.
- expo-ui from @expo for SwiftUI and Jetpack Compose components in JSX. Missing one? Have AI write it and contribute it back.
- Nitro Modules from @margelo_io for low-level, fast native code (Swift, Kotlin, C++). Some good examples: react-native-mmkv for key-value storage (a must), react-native-healthkit, react-native-nitro-fetch.
- expo-sqlite + drizzle-orm from @DrizzleORM if you need a local database.
- Legend State from @jmeistrich. Write proper selectors, watch your re-renders, and close subscriptions on unfocused screens (think Android onResume/onPause). Be methodical. This is not the web, and React Compiler won't do it for you.
- Do not block your app startup with anything. You should not need a splash screen if you don't want one.
Use whatever tools you want. But React Native does not mean your app isn't native under the hood. Your iOS and Android builds end up very, very different, on purpose. You're just using abstractions that smart people built and keep curating for you.
Do this and when something like the iPhone Duo comes out, your app just works on it. You were already using native navigation, sheets and components, so the platform adapts them for you.
react-native-screen-choreography 0.5.0 is out 🚀
Smoother shared transitions, zero rerenders during animations, and 60 FPS on Android and iOS.
Works with Expo Router and React Navigation.
Free and open-source.
While others imagine what life will be like after iPhone Duo drops (there won’t be any way to test it until Xcode 27.1), we’re focusing on what’s here and now. There are lots of cool improvements Apple is bringing with iOS 27:
👉 header minimization and restoration behavior
👉 prominent tab (no need for workarounds with search)
👉 header item visibility priority
👉 placing tabs in the sidebar (larger iPhones only), and more
We’ll support all of it in upcoming versions of react-native-screens. Oh, and iPhone Duo will be supported as well 🫡
I researched React Native navigation libraries performance 3 months ago and thought I was going to make this into a book, but whatever, here it is:
andrei-calazans.com/posts/2026-06-…
Spotted in the wild: React Navigation + GTK on Linux 👀
Happy to see the platform-agnostic core of React Navigation finally get some usage 😊
gtkx.dev/blog/gtkx-1-4
React Navigation 8 has one of the richest grammars* for URL patterns.
This means you get more flexibility for your app's URLs, for deep links, and for browsers.
Plus custom parse functions and standard schema for params mean they are type-safe in static config.
*Not all features map cleanly.
If the screen component itself is lazy loaded, you can do it in `screenLayout`.
The core idea is to render a placeholder instead of screen content, and keep the same placeholder rendered until your screen's data is ready.
For something that works with suspense, something like this should work - use a never ending promise to keep showing suspense fallback and switch to screen content on focus, which might also suspend keeping the fallback visible. And you'd placeholder content in suspense fallback.
Though I'm not sure about the best way to provide a built-in option that'd work similarly yet.
Unfortunately, enabling `lazy` results in a flicker when you tap a tab for the first time. The native component switches to the selected tab before React receives the event. So you can see a blank screen for a split second before the tab navigator re-renders with the screen content.
So it's not possible to provide a proper solution in React Navigation at this time.
An alternative is to render a placeholder component on the screen and keep it until data is loaded, then render the actual screen content.
I discussed it with @kafara_kacper, and we need to experiment if there is a viable approach to avoid the flicker.
We'll also explore how we can provide a built-in option for a placeholder component in React Navigation that works as I described.
iOS 27 scrolls content to the top when you tap the navigation bar. If you have a Pressable in the header, that's probably not what you want.
react-native-screens now has an experimental <ScrollToTopGuard>. Wrap your custom view in it and the tap won't scroll to the top.
35K Followers 4K FollowingCoding since 1992. Founder/CEO @infinite_red (US-based expert mobile/desktop/web dev), game dev @jammingames, hockey goalie, Lutheran, dad x4, gpa x1.
90K Followers 2K Following𝝠 Expo is everything you need to build apps.
⭐️ Star the repo: https://t.co/lqFx3kh5nW
🤗 Signup for free!: https://t.co/NFVyuqBtvc
17K Followers 393 FollowingWe ship cross-platform products at AI speed. Training LLMs (Apex). React Native Core Contributors & React Foundation Members. Bringing you @AgentConf.
4K Followers 17 FollowingReact Native Paper is an open source UI component library implementing Material Design Guidelines for developing @ReactNative apps. Powered by @callstackio 🚀
3 Followers 70 FollowingMobile dev (iOS/Android) → indie SaaS founder
Building useful apps in public | Raw lessons, code & metrics | First SaaS coming soon
DM open for mobil
90K Followers 2K Following𝝠 Expo is everything you need to build apps.
⭐️ Star the repo: https://t.co/lqFx3kh5nW
🤗 Signup for free!: https://t.co/NFVyuqBtvc