Skip to content

0001. Expo Router ​

Date: December 2024

Author: Samantha Greenham

Stakeholders: Emma Schul, Eugene Nagorny

Status: Accepted

Context ​

The app needed deep linking support, which was difficult to achieve cleanly with React Navigation. We also wanted to align the mobile app's routing model with the frontend web app, which uses Next.js file-based routing, to make it easier for engineers to move between the two codebases.

Decision ​

Migrate from React Navigation to Expo Router for file-based routing with built-in deep linking support. The migration was carried out over the Christmas 2024 break to minimise disruption, as the changes touched a large portion of the codebase.

Alternatives Considered ​

React Navigation with manual deep linking configuration — discounted as it required manually wiring up each deep link, meaning new links couldn't be added without an app update. In practice, this advantage hasn't been realised as we still tightly lock down deep links and the feature has not been widely used.

Consequences ​

  • Steep learning curve for the team initially, with a number of issues caught by QA after the migration
  • Once settled, the file-based routing model feels intuitive and the team has embraced it
  • Familiar pattern for engineers who also work on the Next.js frontend
  • Aligns with the direction Expo is heading — Expo Router is now the default in their project templates

Relevant Jira Tickets ​