Skip to content

ADR 0002: Expo SDK 55 + React Native over Next.js + Capacitor

ADR 0002: Expo SDK 55 + React Native over Next.js + Capacitor

Section titled “ADR 0002: Expo SDK 55 + React Native over Next.js + Capacitor”
  • Status: Accepted
  • Date: 2026-04-14
  • Deciders: Ideony team

Ideony needs iOS, Android, and Web presence from day one. The team evaluated a Next.js-first approach (web + Capacitor wrapper for native) against a React Native-first approach (Expo SDK 55 with Expo web export). App Store and Play Store distribution is required for MVP 0.

Use Expo SDK 55 + React Native + Expo Router 5 as the single app codebase. Web is served via Expo web export, eliminating the need for a separate apps/web package (deleted 2026-04-15). NativeWind 4 provides Tailwind-compatible styling across platforms.

  • Single codebase targets iOS, Android, and Web simultaneously.
  • Expo Router 5 provides file-based routing familiar to Next.js developers.
  • Native push notifications, haptics, camera, and location APIs available without a bridge shim.
  • App Store / Play Store distribution is first-class.
  • Web bundle size is larger than a Next.js app; SSR/SSG not available.
  • Some React Native libraries lack web support, requiring platform guards.
  • Metro bundler does not invalidate on EXPO_PUBLIC_* env changes — must pass --clear on web builds.
  • Next.js + Capacitor — rejected: Capacitor adds a native bridge layer; iOS/Android feel is inferior; SSR is wasted for an app-like product.
  • React Native CLI (without Expo) — rejected: Expo SDK 55 provides managed workflow, EAS Build, and OTA updates with no native project maintenance burden.