Loading video...

Video Failed to Load

Go Home

We built this onboarding flow in React Native that feels better than most native apps Here’s how we did it: ① Patched react-native-screens for a custom transition ② Button and stepper are rendered on top of the stack ③ Synced button state across screens via context The button and...

230,420 views • 11 months ago •via X (Twitter)

35 Comments

Marc's profile picture
Marc11 months ago

why not a single screen, with step body components?

Ludwig Vaan's profile picture
Ludwig Vaan11 months ago

Did you try to achieve this result using a pager view? Switching screens isn’t mandatory

Gabriele Scotto di Vettimo's profile picture
Gabriele Scotto di Vettimo11 months ago

Super impressive! Do you mind if I share it with the react native community?

Yehia's profile picture
Yehia11 months ago

Could do it with a flatlist with pagingEnabled

Ant Setiadi's profile picture
Ant Setiadi11 months ago

Impressive! It is really smooth. Are you guys using expo-router or react-navigation?

MT⚡️'s profile picture
MT⚡️11 months ago

09:41 🧐

Mick's profile picture
Mick11 months ago

Beautiful! Is there a chance to open source this?

Conor's profile picture
Conor11 months ago

Beautiful attention to detail. Worked on an identical flow but couldn't figure out how to keep keyboard open. Thanks for the tip!

Constantin 🔥's profile picture
Constantin 🔥11 months ago

I've recently tried to build a good onboarding, but this is just next-level.

Ryan O'Hara's profile picture
Ryan O'Hara11 months ago

Damn that’s smooth! Nice work

Kyle's profile picture
Kyle10 months ago

Looks great

Billel Boudchicha's profile picture
Billel Boudchicha10 months ago

Built a similar multi-step wizard but kept everything in one screen. Used Reanimated for smooth left↔️right transitions and XState FSM to drive the whole flow. Header & button are absolutely positioned too. Your keyboard-surfing trick is 🔥 — super fluid work 👏

Ivan Ry's profile picture
Ivan Ry10 months ago

That's my exact problem with React Native after trying it for one month. Brother could write this flow in 2 hours in native code instead of spending time on all this React Native dancing...

pedro's profile picture
pedro10 months ago

code plzzz ?

Shreya Mishra's profile picture
Shreya Mishra11 months ago

How exactly did you patch react-native-screens to implement the custom transition? Can you share key code snippets or explain the approach?

JGF's profile picture
JGF10 months ago

clean

Abhijeet Sharan's profile picture
Abhijeet Sharan11 months ago

Looks smooth

Mayor's profile picture
Mayor11 months ago

Love it

ª's profile picture
ª11 months ago

@datboychapo

Davide Espertini's profile picture
Davide Espertini11 months ago

wow! really impressive work!

Max Hoffmann's profile picture
Max Hoffmann10 months ago

Damn this looks clean, I love it. Is there any chance you will open-source this?

Melvyn's profile picture
Melvyn10 months ago

Keeping the keyboard open is really cool, love it !

Ice Bridge's profile picture
Ice Bridge11 months ago

Looks clean! Love it!

Tyler Coffman's profile picture
Tyler Coffman11 months ago

Just use a horizontal flat list with paging

dany's profile picture
dany11 months ago

smooth

EJ Campbell's profile picture
EJ Campbell10 months ago

Does it interact properly with auto-fill passwords?

Marlon Johnson's profile picture
Marlon Johnson11 months ago

Im trying to achieve something similar

voj's profile picture
voj10 months ago

this goes hard

julian's profile picture
julian10 months ago

Very cool approach

Youss's profile picture
Youss11 months ago

Nice work 👌🏽Seems a little bit over engineered though

Smoking Chimp's profile picture
Smoking Chimp11 months ago

Sooo buttery. Great work on this.

0xRay's profile picture
0xRay11 months ago

@StreamviDL

Emmanuel Andy Eze 🇳🇬's profile picture
Emmanuel Andy Eze 🇳🇬10 months ago

Amazing 🤩

Taylor Symonds's profile picture
Taylor Symonds11 months ago

Ayo, very few will actually appreciate this. Looks sick g, well done

Ale's profile picture
Ale10 months ago

Each step is a different screen??. It looks great.

Related Videos

Build uncompromising high-performance, high-fidelity apps with React. What you see is not the Apple Messages app, nor is it meant to be 1:1. Rather it serves as an aspirational and real example of UI/UX that is possible. Every detail from the bubble animations to keyboard gestures to scroll view insets and safe areas to parallax timestamps required care and attention. Quality UIs come from caring hard. The little chat bubble tails that morph away when the next message animates in. Timestamps that scroll at a different rate than the bubbles. Peek gestures powered by UIKit that lift a chat bubble, tail and all, with a gentle haptic pulse. The subtle shadow of the text composer and responsively sliding down the keyboard in pixel-perfect concert. The composer shrinking its width to fit iPhone’s rounded bezel. The beautiful Liquid Glass refractions have the level of glassiness chosen by the user (new in iOS 27). Scroll view insets that adjust to fit the home bar and keyboard dynamically, creating a sense of depth as the chat bubbles are slightly visible as they scroll under the keyboard. Keeping the keyboard on screen if the prior screen already presented it. Sliding the keyboard and composer with the screen when the user drags to navigate back. I am excited to explore using the new iPhone Duo view controllers natively with React when the time comes. There is always room for innovation and improvement. This chat demo runs at 120 FPS on iOS 27 even on my phone that’s four versions old now. There are several approaches to high-performance lists. I explored a new Expo scroll view that uses the native gesture systems along with react-native’s VirtualView (codenamed “Fling” to reflect the speed of flinging a scroll view), which Meta’s React team designed to prioritize scroll momentum with React’s scheduler. There are tradeoffs with other scroll strategies for how the scroll views gracefully degrade, and they can be swapped out based on what’s best for your app’s use case. And, by virtue of using modern React, high-priority events like user gestures can preempt lower-priority ones like a network response. Let us dispel any myth that using React requires compromising on beautiful, smooth, user-friendly UI/UX that Uses the Platform. Let us dispel any myth frame-perfect UI coordination is not achievable. The Hermes thread and the UI thread can coordinate when needed, like for controlled text inputs. Let us dispel any myth that React Native’s performance is impacted by a bridge, let alone has a bridge. Bridgeless JSI and the Fabric renderer are here for apps that use the New Architecture. What about Android? The app runs and I’ll share a screenshot from my cloud agent’s emulator. With some attention to detail dedicated to Android I’m confident crafted UX is attainable. I’ve spent my tokens once and have a structural head start everywhere. One more thing! Most of this chat’s application code is written with , , , and other familiar elements. The styling is mostly CSS, including linear-gradient(), background-attachment: fixed, and semantic platform colors that adapt to dark mode. Not just appearance - CSS Animations and CSS Transitions run entirely natively. There are a handful of custom native components written in Swift and Kotlin, like the chat bubbles and a custom CAShapeLayer and UIBezierPath for the tails. Native coding is a first-class feature. The way to think about building beautiful apps this way is React and Native, not React vs. Native. Aspire high and raise your ambitions for what is possible!

James Ide

131,262 views • 2 days ago