File: building-for-tv.md | Updated: 11/15/2025
Hide navigation
Search
Ctrl K
Home Guides EAS Reference Learn
Archive Expo Snack Discord and Forums Newsletter
Copy page
A guide for building an Expo app for an Android TV or Apple TV target.
Copy page
Not all Expo features and SDK libraries are available on TV. For more details, check the See which libraries are supported .
React Native is supported on Android TV and Apple TV through the React Native TV project . This technology extends beyond TV, offering a comprehensive core repo fork with support for phone and TV targets, including Hermes and Fabric.
Using the React Native TV library as the react-native dependency in an Expo project, it becomes capable of targeting both mobile (Android, iOS) and TV (Android TV, Apple TV) devices.
The necessary changes to the native Android and iOS files are minimal and can be automated with a config plugin if you use prebuild . Below is a list of changes made by the config plugins, which you can alternatively apply manually:
System requirements for TV development
xcodebuild -downloadAllPlatforms).The fastest way to generate a new project is described in the TV example within the Expo examples repository:
Terminal
Copy
- npx create-expo-app MyTVProject -e with-tv
You can start with the TV Router example :
Terminal
Copy
- npx create-expo-app MyTVProject -e with-router-tv
This creates a new project that uses Expo Router for file-based navigation, modeled after the create-expo-app default template .
See which libraries are supported
At this time, TV applications work with the following libraries and APIs listed below:
TV also works with React Navigation , React Native Skia , and many other commonly used third-party React Native libraries. See React Native directory to learn more about supported third-party libraries.
Integration with an existing Expo project
The following walkthrough describes the steps required to modify an Expo project for TV.
1
In package.json, modify the react-native dependency to use the TV repo, and exclude this dependency from npx expo install version validation
.
The
react-native-tvosversion should match the Expo SDK you are using. For example, Expo SDK 54 uses React Native 0.81, so you should usereact-native-tvos@0.81-stable(the latest 0.81 version) as shown below. See the SDK compatibility table for the correct version to use for older SDKs.
package.json
Copy
{ %%placeholder-start%%... %%placeholder-end%% "dependencies": { %%placeholder-start%%... %%placeholder-end%% "react-native": "npm:react-native-tvos@0.81-stable", %%placeholder-start%%... %%placeholder-end%% }, "expo": { "install": { "exclude": [ "react-native" ] } } }
2
Terminal
Copy
- npx expo install @react-native-tvos/config-tv -- --dev
When installed, the plugin will modify the project for TV when either:
EXPO_TV is set to 1isTV is set to trueVerify that this plugin appears in app.json:
app.json
Copy
{ "plugins": ["@react-native-tvos/config-tv"] }
To see additional information on the plugin's actions during prebuild, you can set debug environment variables before running prebuild. (See also our documentation on Expo CLI environment variables .)
Terminal
# See all Expo CLI and config plugin debug information
- export DEBUG=expo:*
# See only debug information for the TV plugin
- export DEBUG=expo:react-native-tvos:config-tv
3
Set the EXPO_TV environment variable, and run prebuild to make the TV modifications to the project.
Terminal
- export EXPO_TV=1
- npx expo prebuild --clean
Note: The
--cleanargument is recommended, and is required if you have existing Android and iOS directories in the project.
4
Start an Android TV emulator and use the following command to start the app on the emulator:
Terminal
Copy
- npx expo run:android
5
Run the following command to build and run the app on an Apple TV simulator:
Terminal
Copy
- npx expo run:ios
6
You can revert the changes for TV and go back to phone development by unsetting EXPO_TV and running prebuild again:
Terminal
- unset EXPO_TV
- npx expo prebuild --clean
7
Since the TV build can be driven by the value of an environment variable, it is easy to set up EAS Build profiles that build from the same source but target TV instead of phone.
The following example eas.json shows how to extend existing profiles (development and preview) to create TV profiles (development_tv and preview_tv).
eas.json
Copy
{ "cli": { "version": ">= 5.2.0" }, "build": { "base": { "distribution": "internal", "ios": { "simulator": true }, "android": { "buildType": "apk", "withoutCredentials": true }, "channel": "base" }, "development": { "extends": "base", "android": { "gradleCommand": ":app:assembleDebug" }, "ios": { "buildConfiguration": "Debug" }, "channel": "development" }, "development_tv": { "extends": "development", "env": { "EXPO_TV": "1" }, "channel": "development" }, "preview": { "extends": "base", "channel": "preview" }, "preview_tv": { "extends": "preview", "env": { "EXPO_TV": "1" }, "channel": "preview" } }, "submit": {} }
Show More
Examples and demonstration projects
IgniteTV
A project generated with the Ignite CLI that can be built for mobile or TV.
SkiaMultiplatform
Demonstrates React Native Skia on mobile, TV, and web.
NativewindMultiplatform
Demonstrates using TailwindCSS styling on mobile, TV, and web.