Uber Mar 1, 2017

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

Critical Insight

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.

Their custom bundle update system with automatic rollback detection solved a problem most React Native teams still struggle with today.

About This Article

Problem

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.

Solution

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.

Impact

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.