Put the whole domain — session, repositories, use cases, networking — in Rust, and let SwiftUI and Compose sit on top. The bridge is auto-generated and gitignored. This walks through the idea, the generated bindings, what you lose in Swift and Kotlin at the call site, and whether it scales to hundreds of feature modules.
I built one React Native markets app with six data layers — Relay, TanStack Query, RTK Query, Zustand, Jotai, and hand-rolled vanilla — and measured the JS-thread CPU each one burns on a low-end Samsung. The full-fledged server-state libraries buy you real features, but on every cache write (including every live-price tick) you pay for them. Here's the bill.
I benchmarked Animated (native driver), Reanimated 4, and react-native-ease across four animation types on Android — measuring UI + JS frame drops, per-thread CPU, and memory. The winner depends on whether a gesture is involved — plus what Worklets Bundle Mode does to Reanimated's memory.
A bare RN app vs a blank Expo app — the fixed cost of adopting Expo is ~36 ms and ~13 MB RAM. Then what each extra Expo module adds, and why the Hermes profiler over-attributes 100–240 ms to @expo.
Press → paint measured across four libraries on a trivial screen and a heavy 24-row list. JS call stacks reveal each library's architecture — and why 'first frame' means very different things when the destination actually has work to do.
Why Expo Router costs 3× cold start and RAM, what React Navigation adds on top of rn-navigation, the Hermes hot-function breakdown for each library, and a controlled experiment isolating Reanimated.
Four navigation libraries, one identical app, benchmarked on Android with Perfetto Systrace and the Hermes CPU profiler. Cold start, RAM, press-to-paint — and what's actually behind the numbers.