Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Expo on Desktop

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for Jamie Birch Jamie Birch
September 16, 2026

Expo on Desktop

The day two keynote talk at App.js Conf 2026 on 29th May 2026.

Video recording on YouTube.

Avatar for Jamie Birch

Jamie Birch

September 16, 2026

More Decks by Jamie Birch

Other Decks in Technology

Transcript

  1. Resource-efficient Electron React Native Electron App size (MB) React Native

    Electron React Native Electron Memory usage (MB) React Native
  2. Trusted Teams Outlook ffi Power Apps Skype Xbox (on Windows)

    Store (on Xbox) O ce Messenger Start Menu
  3. Releases lag behind React Native @latest react-native 0.85.1 react-native-windows 0.82.3

    react-native-macos 0.81.7 As of 19th April 2026 major.minor.patch
  4. It's hard to set up 1 hour Setting up a

    React Native macOS app (monorepo)
  5. • The ecosystem is too small ➡ Expo SDK ➡

    Expo Modules API • It's hard to set up ➡ create-expo-app ➡ expo prebuild • It's complex to deploy ➡ Expo Application Services
  6. • Small community and lagging releases More users Improve React

    Native Desktop (via Expo) More contributors
  7. CLI support ❌ create-expo-app --template blank-typescript-desktop blank-typescript ❌ expo prebuild

    --platform macos ios ❌ expo run run:ios run:macos ❌ eas build --platform macos ios ❌ eas submit --platform macos ios ❌ eas update --platform ios macos
  8. Expo SDK support Over ⅓ (24 out of 69) of

    Expo SDK modules for iOS also support macOS
  9. expo run:macos • A line-by-line port of expo run:ios fingerprint.b5b82da…

    to macOS • Implements Fingerprint, build caching, and everything! My App https://github.com/shirakaba/rnmprebuilds/tree/main/build-cache-provider/src/macos.js https://github.com/shirakaba/rnmprebuilds/blob/main/build-cache-provider/src/cli/ ngerprint.js fi fi https://github.com/shirakaba/expo/tree/@shirakaba/ ngerprint-macos
  10. fi • handles all the ddly setup for creating a

    new app • implements Expo Prebuild • lls in missing parts of the ecosystem fi fi A tool to make React Native Desktop rst-class on Expo.
  11. Config plugins Ports of existing plugins Expo has a "default"

    set of con g plugins. fi fi fi I ported them to macOS. withAssociatedDomains withBitcode withBuildNumber withBundleIdenti er withDeploymentTarget withDeploymentTargetPod leProps withDevelopmentTeam withDisplayName withLocales withPrivacyInfo withProductName withScheme withVersion
  12. Handling side-effects from the entrypoint Expo's app entrypoint triggers a

    few side-e ects. • Poly lls (e.g. WinterCG) • Initialise Expo Asset and Expo Constants… • … which requires NativeModulesProxy… • … which requires ff fi Expo Modules Core. import { registerRootComponent } from "expo"; import App from "./App"; registerRootComponent(App);
  13. Expo Modules Core I implemented a minimumviable Expo Modules Core

    for Windows. Compiled from the same sources as iOS and Android. common/cpp ├── BridgelessJSCallInvoker.h ├── EventEmitter.cpp ├── EventEmitter.h ├── JSIUtils.cpp ├── JSIUtils.h ├── LazyObject.cpp ├── LazyObject.h ├── NativeModule.cpp ├── NativeModule.h ├── ObjectDeallocator.cpp ├── ObjectDeallocator.h ├── SharedObject.cpp ├── SharedObject.h ├── SharedRef.cpp ├── SharedRef.h ├── TestingSyncJSCallInvoker.h ├── TypedArray.cpp └── TypedArray.h