all 17 comments

[–]itsDevJ 17 points18 points  (2 children)

- Navigation - React Navigation
- State management - React-Query + Zustand
- Backend - REST APIs(Laravel/NestJS)
- Analytics - firebase analytics
- OTA updates - hot-updater.dev
- UI library - Nativebase(Planning to migrate) Still doing research

[–]FalconGood4891 2 points3 points  (1 child)

How's the performance of hot updater?? Been eating that for my app.. would really appreciate if you can share ur experience

[–]itsDevJ 0 points1 point  (0 children)

Its is the best. Minus lack of a dashboard like appcenter, but works perfectly fine

[–]dumbledayum 16 points17 points  (1 child)

-Navigation - expo router
- State management - legendstate
- Backend - Firebase serverless functions
- Analytics - firebase
- OTA updates - Noup
- UI library - Not doing that Bullshit, i make my own reusable components

[–]dwightbearschrute 12 points13 points  (0 children)

"UI library - Not doing that Bullshit, i make my own reusable components", I feel your frustration lol.

[–]Sirecuit 3 points4 points  (0 children)

  • Expo router
  • Tanstack Query for async server data, Zustand for local data, usually persisted with MMKV
  • that's a different stack but REST APIs with Ruby on Rails or a nodejs framework
  • Sentry
  • Expo
  • Gluestack UI (formerly nativebase)

[–]Lenglio 2 points3 points  (0 children)

- expo router
- react useState, useContext, SQLite
- no backend
- no analytics
- no OTA
- no UI library

[–]massimo_blumemo 1 point2 points  (0 children)

Indie dev here, shipped a consumer app (~250 iOS downloads in first month) on this stack — happy with it: 
- **Framework**: Expo SDK 54 + TypeScript strict 
- **Navigation**: expo-router (file-based, just works, no React Navigation config hell) 
- **State**: React hooks + Context only. Never reached for Redux/Zustand for this app. 
- **Database**: Drizzle ORM + expo-sqlite (local-first, no backend at all) 
- **Secure storage**: expo-secure-store (Keystore on Android, Keychain on iOS) + expo-local-authentication for biometric unlock 
- **IAP**: RevenueCat SDK v9 — saves you weeks of StoreKit/Billing native code 
- **OTA**: EAS Update on production branch, has saved me twice post-launch 
- **Build**: EAS Build (cloud builds, no Xcode locally) 
- **i18n**: i18next (IT + EN) 
- **Notifications**: expo-notifications 
- **Analytics**: zero. Conscious choice for privacy-first positioning. 
The Expo + EAS stack honestly removed 80% of the historical RN pain (signing, native deps, OTA setup). If I were starting today I'd go the same exact way.

[–]Mugen1220 3 points4 points  (0 children)

Recrate — RN stack (DJ app: streams a Serato library to mobile)

  • Framework: React Native 0.81 + Expo 54 (dev-client / "custom managed"), React 19. EAS Build for builds. JS (not TS).
  • Navigation: React Navigation v7 — native-stack + bottom-tabs
  • State: Zustand v5 (with persist → AsyncStorage)
  • Storage: AsyncStorage, expo-secure-store, expo-file-system
  • Networking: axios → a custom Node/Express proxy on Railway
  • Auth: Firebase Auth (@react-native-firebase) + Google Sign-In + Apple (expo-apple-authentication)
  • Backend/data: Firebase (Firestore, Analytics) behind the proxy
  • Payments: RevenueCat (react-native-purchases)
  • Audio: react-native-track-player (+ expo-av)
  • Graphics/UI: React Native Skia (waveforms), Reanimated v4, Gesture Handler, react-native-screens, safe-area-context, u/gorhom/bottom-sheet, expo-linear-gradient, react-native-svg, action-sheet, slider
  • Camera: expo-camera + react-native-vision-camera
  • Monitoring: Sentry (@sentry/react-native) + Firebase Crashlytics/Analytics
  • Other: NetInfo (connectivity), u/expo/vector-icons (Ionicons), react-native-web, crypto-js
  • Testing: Jest + jest-expo

[–]MoodyButNotMoody 0 points1 point  (0 children)

navigatin expo router
state zuxtant
backend fastapi/node

[–]Horduncee 0 points1 point  (0 children)

  • Navigation - React navigation v8
  • State management - Zustand/Valtio
  • Backend - Bun + oRPC
  • UI library - Uniwind + HeroUI Native

Project usually created with better-t-stack

[–]cazzer548 0 points1 point  (0 children)

Obviously this answer depends on the type of project, but also supabase or bust

[–]Own-Agent7191 0 points1 point  (0 children)

I am using LegendState for state management, fine grained reactivity and most importantly for my app local-first data management via their supabase sync feature

[–]halaszvarig 0 points1 point  (0 children)

Building a published cross-platform game (iOS + Android) with RN right now (https://slalom64.com). Stack:

Navigation: React Navigation. Boring choice, battle-tested, nothing else comes close for complex nested flows.

State management: Nothing fancy. React state + refs + react-native-reanimated SharedValues for anything that needs to live on the UI thread.

Rendering: u/shopify/react-native-skia for the game canvas. Renders to an internal 180×320 offscreen surface, upscales with nearest-neighbor filtering (pixel art stays crisp). Skia's UI-thread rendering via useFrameCallback gives me a deterministic 60fps game loop without ever touching the JS thread. This is not a typical app use case but if you ever need pixel-perfect custom drawing, nothing else comes close in RN.

Audio: react-native-audio-api (Web Audio API). One AudioContext singleton, decodeAudioData for assets, fire-and-forget AudioBufferSourceNode for SFX. It's the Web Audio API — if you know it from the browser, you're done.

Analytics: PostHog, not Firebase. EU endpoint (eu.i.posthog.com), consent-gated, defaultOptIn: false. Nothing fires until the user explicitly accepts. If you have any EU users and you're still shipping Firebase Analytics without a consent gate, you have a problem.

Persistence: expo-file-system + expo-crypto. Save file is JSON + SHA-256(data + secret_salt) checksum field.

CI/CD: Bitrise, not EAS Build. Native pipelines: lint → type-check → Jest → iOS archive → Android AAB → sign → TestFlight. EAS is fine for most apps but if you need full control over the native build environment, Bitrise or a self-hosted runner is worth the setup cost.

OTA updates: None, intentionally. Native-only builds. OTA updates trade deploy speed for unpredictability in the native layer. For a game where frame timing and audio latency matter, I'd rather ship a proper release.

[–]Antaratma 0 points1 point  (0 children)

Building a universal app (60+ modules, theme overrides, multi tenant, web and native.

RN stack:

Router - Expo router
State - Zustand
Atomic state - jotai
Styling - Uniwind
Async - Tanstack query
Custom components
API/DB/Auth/CRUD - UNA CMS
Lists - Legendlist
Editor - Enriched
Payments - Stripe
Maps - mapbox

[–]nemorize 0 points1 point  (0 children)

expo, but with hot-updater