1---
2title: Runtime Versions
3description: Learn how to set the runtime version for an app.
4---
5
6import { DiffBlock } from '~/ui/components/Snippet';
7
8Every update targets one compatible runtime. Each time you build a binary for your app it includes the native code present at the time of the build and only that code, and this unique combination and configuration of the build is what is represented by the runtime version.
9
10By default, the runtime version is determined by the Expo SDK version, but this will not adequately describe the different runtime versions of your app if you build more than once per SDK release. In this case, you will need to specify a `runtimeVersion` to ensure your updates are delivered only to compatible builds. This `runtimeVersion` should be updated whenever you update your project's native modules and change the JS–native interface.
11
12The runtime version string must conform to [this format](/versions/latest/config/app.mdx#runtimeversion).
13
14## Setting the runtime version for an update
15
16Updates published with the runtime version set in **app.json** will be delivered to builds running the same runtime version, and only to those builds.
17
18```json app.json
19{
20  "expo": {
21    "runtimeVersion": "1.0.0"
22  }
23}
24```
25
26## Setting the runtime version for a build
27
28### Configuration for the managed workflow
29
30If you are using the [managed workflow](/archive/managed-vs-bare/#managed-workflow), `runtimeVersion` is specified in **app.json**:
31
32```json app.json
33{
34  "expo": {
35    "runtimeVersion": "1.0.0"
36  }
37}
38```
39
40### Configuration for the bare workflow
41
42If you are using the [bare workflow](/archive/managed-vs-bare/#bare-workflow), set the runtime version in **AndroidManifest.xml** on Android **Expo.plist** on iOS.
43
44For an iOS build, add an entry to the **Expo.plist** with the key `EXUpdatesRuntimeVersion`. The value is a string that represents the runtime version.
45
46```diff
47+ <key>EXUpdatesRuntimeVersion</key>
48+ <string>1.0.0</string>
49```
50
51For an Android build, add an entry to **android/app/src/main/res/values/strings.xml** with the name `expo_runtime_version`. The value is a string that represents the runtime version.
52
53<DiffBlock source="/static/diffs/expo-update-strings-xml.diff" />
54
55Then add a `<meta-data>` element to the **AndroidManifest.xml** whose `android:name` attribute is `expo.modules.updates.EXPO_RUNTIME_VERSION` and `android:value` attribute is a reference to the runtime version in `strings.xml`.
56
57```diff
58+ <meta-data android:name="expo.modules.updates.EXPO_RUNTIME_VERSION" android:value="@string/expo_runtime_version"/>
59```
60
61## FAQ
62
63### Can I have a different runtime version on Android and iOS?
64
65Yes, if you want to be able to control the runtime version on a platform level, you can:
66
671. Have platform-specific channels: `android-production`, `ios-production`.
682. Have platform-specific runtime versions: `android-1.0.0`, `ios-1.0.0`.
69
70However, you cannot set a platform-specific configuration field such as `android.runtimeVersion` or `ios.runtimeVersion`
71
72### Can I test updates with a custom runtime version on Expo Go?
73
74Expo Go is meant for updates targeting an Expo SDK. If you want to test an update targeting a custom runtime version, you should use a [development build](/develop/development-builds/introduction/).
75