mrkeyoor.com_
Thu 24 Sept 08:39 UTC
Webevaluationupdated 27 Aug 2026

expo review

Expo is an open-source React framework for building one application that runs on Android, iOS, and the web. It bundles a runtime, device APIs, file-based routing, development tools, templates, and optional hosted services so a web team can reach native platforms without maintaining every integration alone.

+71stars / 7d
Verdict

Our Expo install stopped after 16 seconds because pnpm 11.23.0 missed the repository's required ^10.33.0, so exact tooling is part of the entry cost even before native SDKs. Expo is a sensible default for a React team that truly needs web, iOS, and Android and will test all 3 as separate products. A web-only team should use a browser-first stack and avoid inheriting this 20,714-file platform's native concerns.

We ran it

Lab card: what happened when we ran expoScreenshot of expo (docs.expo.dev)
Install✗ · 16s
Build
Repo20714 files~1,358,960 lines of source · 290.2 MB · 52 CI workflows

Answers from our run

Does expo build from source?

The dependency install failed, and the project has no separate build step. We cloned commit c50938c into a clean Debian container with 3 CPUs and no project-specific setup.

Who should not use expo?

Web-only products with no native roadmap: Expo's iOS, Android, React Native, module, and app-store surface adds work that Vite or another browser-first stack avoids.

What are the alternatives to expo?

Ionic Framework, Capacitor, Flutter. Our Expo install stopped after 16 seconds because pnpm 11.

Setup3/5Easy app starter, but exact tools and native SDKs still matter
Docs5/5Extensive guides, APIs, workflows, examples, and platform notes
Community5/5August 26 push with 276 issues and 472 pull requests open
Maturity5/5Established framework spanning web, native modules, and delivery

Discussed on

  1. hnExpo – Open-source platform for making universal apps for Android, iOS, and web235 points

Who it’s for

React teams building a product for browsers, iPhones, and Android devices from one codebase.
Web developers who need access to native capabilities through documented Expo modules.
Product teams that want file-based routing, browser previews, native development clients, and cloud build options in one workflow.
Organizations prepared to test each supported platform separately rather than treating shared code as identical behavior.

Who it’s NOT for

Web-only products with no native roadmap: Expo's iOS, Android, React Native, module, and app-store surface adds work that Vite or another browser-first stack avoids.
Contributors who cannot match repository tool pins: our install stopped because pnpm 11.23.0 did not satisfy the required ^10.33.0.
Teams expecting one browser test to prove mobile behavior: current reports cover Android maps, iOS App Store metadata, notification behavior, native text fields, and Router transitions.
Developers who need every native dependency to work unchanged in a workspace with static iOS frameworks: issue 44314 reports an empty generated component provider in that configuration.
Apps that cannot tolerate development and production API-route state differences without their own tests: issue 33857 reports exactly that Router behavior.
Maintainers seeking a small library repository: our checkout contained 20,714 files, 52 workflows, and roughly 1.36 million source lines.

Setup reality

In our sandbox at commit c50938c, installation failed after 16 seconds. The pnpm engine check expected version ^10.33.0 but found 11.23.0, then exited with ERR_PNPM_UNSUPPORTED_ENGINE. Because install failed, no build or tests ran.

A new Expo app needs Node, the project package manager, and a browser for web development. Native work adds Android tooling and, for local iOS development, the Xcode workspace and CocoaPods dependencies named in the README. Optional Expo Application Services add hosted build, delivery, and team workflows rather than being required by the open-source framework.

This repository is the Expo project itself, not a starter app: 20,714 files, about 1,358,960 source lines, 290.2 MB checked out, and many linked workspaces. App developers should start from create-expo-app; contributors need exact monorepo tool versions and platform-specific environments.

Expo is useful when web and native share a product plan

Expo lets React developers build for browsers, Android, and iOS from one project. The repository includes the Expo SDK, Modules API, CLI, Router, Expo Go, templates, documentation, and supporting tools. Device capabilities arrive through Expo modules, while Router gives applications a shared navigation structure.

Our checkout at commit c50938c contained 20,714 files, about 1,358,960 source lines, and occupied 290.2 MB. Those figures describe the framework monorepo, not the size of a generated application. A change may cross TypeScript packages, native iOS or Android code, the React Native fork used for Expo Go, templates, and documentation. App teams should start with a generated project rather than cloning this source tree.

Web support is strongest when native delivery also matters

A browser-only developer can use Expo, but the reason to do so is future or current native work. Shared React components and routing reduce duplication when one product must reach app stores and the web. Snack gives newcomers a browser trial. If the product will remain a conventional website, a browser-first stack has fewer platform abstractions, native dependencies, and release paths.

The choice is less about writing code once than deciding what must behave consistently across 3 targets. Layout, navigation, files, media, authentication redirects, permissions, and offline state can differ even when components are shared. A serious acceptance matrix needs browser engines plus real Android and iOS devices. Expo cannot make platform APIs or app-store rules identical.

What happened when we ran it

Our pnpm install failed after 16 seconds in a fresh Debian sandbox with 3 CPUs and 8 GB of RAM. The repository declared pnpm ^10.33.0, while the process had 11.23.0. pnpm stopped with ERR_PNPM_UNSUPPORTED_ENGINE and told the user to install the required package-manager version. The log shows a tooling mismatch, not an application-code failure.

Because installation stopped, the lab did not run a build or tests. The checkout had 52 GitHub Actions workflow files, no Dockerfile, no tests directory, and monorepo workspaces. Those signals provide no passing result from our box. The image was lab-node:22; the failure concerned pnpm, and the log does not identify a Node incompatibility.

Application developers should let a generated Expo project pin compatible tooling and SDK packages. Contributors need the repository's pnpm version before evaluating the monorepo. Our 16-second stop says nothing about web rendering, Expo Go, native compilation, EAS builds, or device behavior because none of those stages ran.

Native bugs can escape a web-centered test plan

One current report says motionUsagePermission: false can produce an iOS binary rejected by the App Store. Issue 49252 reports an Android crash after a user taps a notification, with foreground, background, and killed-app states all listed in the reproduction. Issue 49399 says the Android keyboard can move a text field out of reach inside an Expo UI bottom sheet.

These reports were active on 2026-08-26, the same day the repository was pushed. They do not mean every Expo application hits the bugs. They show why a web team moving into native delivery needs device-specific regression tests and store checks. Shared JavaScript can still depend on native configuration, generated metadata, OS permissions, or an underlying module that differs by platform.

Router behavior needs development and production checks

Expo Router is part of the repository and its package README points to dedicated routing documentation. Pull request 49236 addresses development links escaping an application mounted under a configured base URL, while preserving the default path when no base URL exists. Navigation is product behavior, and a reverse-proxy mount deserves the same round-trip checks as a production export.

Issue 33857 reports API routes preserving state in a serverful production deployment but not during development. The report dates to 2024 and was updated on 2026-08-17, so check it against the exact SDK and deployment mode. Apps using Router server endpoints should test clean starts, repeated requests, and deployed state on their hosting target.

EAS is optional but shapes the easiest delivery path

The README separates Expo's open-source tools from EAS, its hosted service for building, shipping, and iterating on applications. Teams can own more infrastructure or use the integrated service. Decide early because build credentials, signing, team access, and release automation become operational dependencies even while application code stays open source.

GitHub showed 748 open issues and pull requests, split by search into 276 issues and 472 pull requests. The repository was pushed on 2026-08-26, but GitHub's latest-release endpoint returned no published release. Expo publishes SDKs and packages through its own channels, and same-day issue and source activity show current maintenance. Track the app's SDK line, not the monorepo's release badge.

Choose Expo for 3 tested products, not one assumed product

Expo suits React teams that need browser and native applications without building every bridge themselves. The MIT license, documentation, browser trial, device modules, Router, and hosted delivery option offer a credible route to app stores. The cost is a large compatibility matrix, exact tooling, and continuing native verification.

Our run stopped on pnpm after 16 seconds, before those product claims could be exercised. A contributor can address the narrow failure by matching ^10.33.0. If Android, iOS, and web are all real destinations, Expo removes repeated setup. If only the web matters, Vite or another browser-native stack keeps the system smaller.

Alternatives

ProjectWhat it isPick it when
Ionic Framework gh↗A web-component UI toolkit for mobile and progressive web applications.pick this instead when browser technologies and a web-style component model should remain the center of the app.
Capacitor gh↗A native runtime that wraps existing web applications and exposes device plugins.pick this instead when you already have a web app and mainly need native packaging and device bridges.
Flutter gh↗A Dart framework that renders cross-platform applications through its own widget system.pick this instead when shared visual rendering matters more than staying in React and JavaScript.
Vite gh↗A browser-first development and build tool for modern web applications.pick this instead when the product is web-only and native application delivery is outside the plan.

What people are saying

  1. [github-trending] expo/expo

Sources

  1. Expo README
  2. Expo documentation
  3. Expo Router API-state issue
  4. iOS App Store metadata issue
  5. Static framework workspace issue
  6. Android notification tap crash report
  7. Android bottom-sheet keyboard report
  8. Router development base URL pull request

More web reviews

cloudflare-turnstile-examples · react-spring · You-Dont-Need-jQuery · mimik · vapor · univer · the whole board →