Skip to main content

Frameworks

Now you might be wondering why in an intro to React Native course we've just created an "Expo app" and installed "Expo Go". In short, Expo is React Native framework (just like Next.js, Remix and Redwood JS are React frameworks). As of React Conf 2024, Meta recommends using a React Native Framework for newly created apps.

Framework

Meta recommends using a React Native Framework - Expo - for newly created apps.

Why is "Vanilla React Native" not enough?

What React Native gives us out of the box is the ability to run React code on native iOS and Android platforms. We also get some core building blocks: components to render text, views, scrollable lists etc.

But many things React Native doesn't do of the box:

  • navigation
  • sending push notifications
  • storing data across app launches
  • using the phone camera
  • etc...

There's also plenty of things you can do with React Native, but it's tedious:

  • changing the app icon / splash screen
  • adding custom native code
  • building app bundles for install on physical device
  • etc...

This is by design as adding all of these things in to the core React Native package would make the project unmaintainable to the small React team at Meta.

But adding these additional functionalities is not trivial unless you're already an experienced iOS and Android developer, as they require understanding of the native platforms in order to bridge the native code to the React side.

From the very beginning (and React Native has been around for 9+ years) React Native developers have always had rely on community libraries. Problem is, it is difficult to know which libraries are fit for purpose, well-maintained and work well together. Especially at the start of the project and when you're new to mobile development. Ideally we'd like a set of well-maintained compatible libraries that cover all the usual functionality needed for building modern apps, as well as better guidance and workflows for things like adding custom native code or building your app for production.

This is where a React Native Framework comes in.

What is a React Native Framework?

The role of a React Native Framework is defined in the RFC: as a cohesive framework built on top of React Native consisting of tools & libraries that are not provided by default as part of React Native.

The RFC also lists the many requirements for becoming a recognized Framework. Some of the more important conditions are that a framework needs to be open source, popular and free. Companies may provide paid services on top of the Open Source framework, but these services should not be a requirement to use the framework and should not have vendor lock-in.

Expo is an Open Source React Native framework and we'll be using it throughout this course.

Expo Go

Sandbox

Expo Go IS NOT Expo.

Expo Go is only one small part of the Expo framework. It is a sandbox environment meant for learning, prototyping, getting started quickly. It is not recommended to build your production apps with Expo Go.

Expo Go is a sandbox app designed for learning and prototyping React Native apps. It is not intended for building production apps due to the inherent limitations of it being a sandbox: you can't customize any native code so you can only work with have what is bundled within the native app.

We are using Expo Go for this course because this is is exactly its intended use: it's the easiest and quickest way to get started building apps without spending ages setting up your native development environment. All you need is a computer, a phone and Node.js.

Development Builds

If you're wondering how you're meant to build production apps, the answer is: Development Builds. It basically means you create your own custom version of Expo Go with just the native code you need, leaving you free from the limitations of Expo Go. To create a development build, you do need to either set up your local dev environment or build in the cloud with EAS.

Check out the Intermediate React Native v2 course where we do exactly that.