UberEats React Native Transition
Article Summary
UberEats needed a Restaurant Dashboard for 3-party logistics. Their web app couldn't cut it, so they bet on React Native before it was proven at scale.
Uber Engineering rebuilt their Restaurant Dashboard from a React/Flux web app into a React Native mobile app to support their expanding food delivery marketplace. The team needed native device access for critical features like sound notifications and direct printer integration that browsers couldn't provide.
Key Takeaways
- Migrated piece-by-piece using WebView wrapper to maintain feature parity during transition
- Built automatic JavaScript bundle updates with rollback, avoiding multi-week mobile releases
- Switched from Redux Thunks to Sagas for complex async patterns and coordination
- Used Flow type checking to catch bugs before production in interpreted environment
- Kept 90% of logic in JavaScript layer for Android portability
React Native enabled UberEats to ship a production-critical restaurant app with web-speed iteration while gaining native capabilities like printer SDKs and background updates.
About This Article
The Restaurant Dashboard's web app showed modal dialogs on every page load to enable sound notifications in noisy restaurant environments. This hurt user experience and was the only workaround available given browser permission constraints.
Chris Lewis's team built native wrappers around printer SDKs to support non-AirPrint printers directly. They also implemented native code to disable sleep mode, which was a one-line fix that couldn't be done from the web layer.
Within one year, nearly every restaurant on UberEATS adopted the revamped Restaurant Dashboard as their standard tool. Feature releases could ship in days instead of weeks because automatic JavaScript bundle updates with semantic versioning rollback protection made deployments faster.