WhoBuilt

Multiplatform App Development With React Native

Feb 15, 2024· 1 h 9 min· 1.2K views·Watch on YouTube

Speakers

Mo Jaat, head of mobile at Theodo UK and React Native London organizer, joins Callstack host Lukasz to discuss React Native multiplatform development and a streaming platform built for mobile and web.

Why teams share code

Mo frames multiplatform development as a way to balance scope, cost, and time: building separate apps for each platform takes more effort or forces teams to reduce features. React Native brought declarative UI development to native apps, while earlier projects explored sharing visual components across web and mobile. On an e-commerce project in 2018, Mo’s team shared business logic, API calls, styling primitives, and design tokens, but kept the visual components separate because they had concerns about SEO and server-side rendering.

Choose what to share

Mo describes a range of approaches, from separate native apps to sharing business logic, selected UI components, or nearly the whole application. What makes sense depends on the product: sharing navigation and components can work, while web and mobile layouts may need to differ. Even with a universal app, platform-specific libraries and behaviors may require separate implementations behind shared APIs.

Building a streaming platform quickly

Mo’s team had three months to deliver mobile and web for a streaming service, with TV planned for later. About 12 or 13 developers worked in a monorepo that included frontend and backend code, shared types, and packages for independent development. The team chose Tamagui for cross-platform styling and shared layouts to meet the deadline, while noting that the library’s documentation slowed them down.

Plan for dependencies and delivery

The team checked video player support early, including DRM, accessibility, and HLS or DASH protocols. A library described as supporting web and mobile might not support a required feature on every platform, so they used abstraction layers where needed. For a project spanning web, mobile, and three TV platforms, they tailored tests by development stage and ran Flashlight performance checks nightly.

Metro for web: a deadline trade-off

The team chose Metro across platforms to reduce setup overhead and meet the deadline, keeping packages isolated so they could move web to Next.js later. Web bundle size became a challenge: it reached 10 or 11 MB uncompressed, then fell to around 4 MB, below 1 MB compressed, after manual optimizations. Mo recommends monitoring bundle size and sees Metro as a fit for mobile-first projects with tight timelines, while SEO and web performance may favor Next.js.

Takeaways

  • Decide what to share based on product needs; shared business logic can help even when each platform has its own UI.
  • Check critical dependencies against each platform’s actual requirements, especially video protocols, DRM, and accessibility.
  • A monorepo can help teams work independently, but requires investment in CI, caching, configuration, and package boundaries.
  • Match testing depth to the development stage: keep pull request checks focused and run broader release checks.
  • Metro for web can reduce delivery overhead for a mobile-first project, but track bundle size and account for SEO needs.

Mentioned in this talk

Search inside this talk

What was claimed 10

Related talks