Skip to main content
r/reactnative icon

r/reactnative

members
online

We built a faster alternative to Maestro that works on real iPhones We built a faster alternative to Maestro that works on real iPhones

We built a faster alternative to Maestro that works on real iPhones

We've been running device labs for 12+ years — on-prem setups for teams like Disney+Hotstar, Swiggy, Airtel. So we see what breaks for people daily.

The one thing that kept coming up with React Native teams: E2E testing sucks.

Maestro is the closest thing to a good answer. The YAML syntax is great, the DX is solid. But three things kill it:

It doesn't work on real iOS devices. Apple gates all automation through WebDriverAgent, which needs per-device code signing, drops sessions randomly, and was never designed for external tools to control a phone. Maestro's answer is "use simulators." Fine for CI, terrible for anything else.

It's slow. A JVM process sits in the background eating 350 MB doing nothing. Every command goes through multiple hops before it actually touches the UI.

The React Native view hierarchy problem. You write tapOn: "Login" and nothing happens. Because the text lives inside a <Text> nested in a non-clickable <View>. You end up debugging accessibility trees instead of writing tests.

We spent the last few months building a runner that fixes all three.

Real iOS devices — we got WebDriverAgent stable on actual hardware. Code signing, session persistence, the whole mess. It works now.

Speed — no JVM. Same test, 34s → 14s. We wrote our own element resolution instead of going through Appium's chain.

View hierarchy — we walk up the tree automatically to find the nearest tappable ancestor. tapOn: "Login" just works whether you're using text matching or testID.

The syntax is the same YAML you already know from Maestro. We didn't reinvent that — it's good. We just made the engine behind it faster and got it running where it couldn't before.

Works with cloud providers too — BrowserStack, Sauce Labs, LambdaTest. Any Appium grid. But with our own element logic sitting on top, so you skip the usual Appium tax on speed.

Open source: github.com/devicelab-dev/maestro-runner

Happy to answer questions about the iOS real device stuff especially — that rabbit hole was deep.



DraggableFlatList inside FlatList blocks parent scroll DraggableFlatList inside FlatList blocks parent scroll

Describe the bug
I am unable to properly use a DraggableFlatList inside a parent FlatList.
The child DraggableFlatList captures the vertical gesture, which prevents the parent FlatList from scrolling correctly.

I need:

The parent FlatList to handle vertical scrolling

The child DraggableFlatList to handle drag & drop inside each section

Currently, I cannot find any configuration that allows both drag and scroll to work properly.

To Reproduce
FlatList (vertical scroll)
└── renderItem()
└── DraggableFlatList (scrollEnabled={false})

Even with:
scrollEnabled={false}
activationDistance
simultaneousHandlers
nestedScrollEnabled
Long press only drag activation

The child still captures the gesture and blocks the parent scroll.

Platform & Dependencies
react: 19.1.0
react-native: 0.81.5
expo54
react-native-draggable-flatlist: ^4.0.3
react-native-gesture-handler: ~2.28.0
react-native-reanimated: ~4.1.6