// the find
EvanBacon/expo-ai
AI chat app built with Expo Router
A demo app from Evan Bacon's React Conf talk showing universal React Server Components in Expo Router — AI chat that streams native UI components (maps, weather, movie cards) down from the server as tool call results. It runs on iOS, Android, and web from a single codebase. This is a proof-of-concept, not a production template.
The core idea is genuinely interesting: instead of streaming text and rendering UI client-side, tool calls return actual RSC payloads — so a 'show me the weather' response streams a real native weather component. The file-based routing with `.native.tsx` / `.web.tsx` platform splits is clean and idiomatic Expo Router. Fixtures for weather, movies, and locations mean you can poke at the UI without burning API quota. Coming from Evan Bacon (Expo core team) means the Expo-specific patterns here are authoritative, not cargo-culted.
This is explicitly developer preview with multiple known broken edges: deterministic module IDs differ across machines so local publishes break EAS builds, Hermes doesn't handle promises correctly so `react-server-dom-webpack` needs a patch, and the `ai` package requires a manual `package.json` patch for SSR. Six API keys are required just to run it fully (OpenAI, Weather, TMDB x2, Google Maps, Apple Maps), which is a steep setup tax for a demo. No persistence — chat history lives in memory, gone on refresh. The last push was December 2025 against an experimental RSC API that's still moving, so there's a real chance the main branch already requires a bleeding-edge Expo CLI build to work at all.