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
Context
Section titled “Context”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.
Decision
Section titled “Decision”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.
Consequences
Section titled “Consequences”- 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--clearon web builds.
Alternatives considered
Section titled “Alternatives considered”- 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.