HomeGuidesReferenceLearn

Develop for Web

Learn how to develop your app for the web so you can build a universal app.


If you build your native app with the Expo SDK, then you can also run it directly in the browser with Expo CLI. On web, your app is rendered with React Native for web which powers massive websites and progressive web apps like Twitter, and Major League Soccer. The Expo SDK also utilizes native browser functionality like Video, Camera, and Gestures without the need for a custom native browser.

Getting started

Install web dependencies

Terminal
npx expo install react-dom react-native-web @expo/webpack-config
Not using the 'expo' package in your app yet?

If you have a bare React Native app that doesn't use Expo modules, you can either install Expo modules (recommended) or just install the expo package and configure the app entry file. This will allow you to target web, but it will not include support for Expo modules.

  1. Install the expo package which contains the Expo CLI used for starting the dev server:
Terminal
npm install expo
  1. Modify the entry file to use registerRootComponent instead of AppRegistry.registerComponent:
+ import {registerRootComponent} from 'expo';

import App from './App';
- import {AppRegistry} from 'react-native';
- import {name as appName} from './app.json';

- AppRegistry.registerComponent(appName, () => App);
+ registerRootComponent(App);

Learn more about registerRootComponent.

Start the dev server

Finally you can start the webpack dev server with:

Terminal
npx expo start --web

You can test secure web APIs like the camera and user location by adding the --https flag to npx expo start. This will host your app from a secure origin like https://localhost:19006.

You can try experimental Metro web support instead of webpack.

Alternative rendering patterns

Example: The website beatgig.com uses Expo web + Next.js to achieve SSR in the browser.

By default, Expo renders your web app as a single page application (SPA). This rendering pattern is the closest to how native rendering works. If you'd like to render your Expo web using server-side rendering (SSR) or static site generation (SSG), then you should try using the Expo SDK with another tool like Gatsby, Next.js, Remix, and so on. One caveat is that these tools are less universal and require a bit more effort to share code across platforms.

The ability to use Expo web with these other React frameworks is what makes it the most powerful way to build a universal app. The possibilities are endless and you won't hit a theoretic performance wall in the future.

Alternative framework implementations are maintained by the Expo community.

Next

Publish websites

Export your website and upload to any web host.

Progressive web app

Learn how to make your website run offline.

Responsive design

Make your website work across different screens.