{"id":13163,"library":"expo-build-properties","title":"Expo Build Properties","description":"expo-build-properties is an Expo config plugin that allows developers to customize native build properties for iOS and Android directly from their `app.json` or `app.config.js` files. This eliminates the need for manual edits to native project files (e.g., `build.gradle`, `Info.plist`) or custom scripts, streamlining the prebuild process within the Expo managed workflow. The package is currently stable at version `55.0.13` and is released as part of the broader Expo SDK, with major versions typically aligning with new SDK releases every 3-4 months. Its primary differentiator is deep integration into the Expo ecosystem, providing a declarative and cross-platform way to configure native build settings without requiring an ejected workflow or bare React Native setup.","status":"active","version":"55.0.13","language":"javascript","source_language":"en","source_url":"https://github.com/expo/expo","tags":["javascript","react-native","expo","build","build-properties","typescript"],"install":[{"cmd":"npm install expo-build-properties","lang":"bash","label":"npm"},{"cmd":"yarn add expo-build-properties","lang":"bash","label":"yarn"},{"cmd":"pnpm add expo-build-properties","lang":"bash","label":"pnpm"}],"dependencies":[{"reason":"Peer dependency, required for Expo-related configuration and build processes.","package":"expo","optional":false}],"imports":[{"note":"Primarily used by advanced users or plugin authors to compose custom config plugins programmatically. Most users configure this plugin declaratively in `app.json` or `app.config.js` by listing its package name in the `plugins` array.","symbol":"withBuildProperties","correct":"import { withBuildProperties } from 'expo-build-properties';"},{"note":"TypeScript type definition for the configuration object passed to the plugin, useful for type-checking when creating custom configuration logic.","symbol":"BuildPropertiesOptions","correct":"import { BuildPropertiesOptions } from 'expo-build-properties';"}],"quickstart":{"code":"{\n  \"expo\": {\n    \"name\": \"MyAwesomeApp\",\n    \"slug\": \"my-awesome-app\",\n    \"version\": \"1.0.0\",\n    \"sdkVersion\": \"55.0.0\",\n    \"platforms\": [\n      \"ios\",\n      \"android\"\n    ],\n    \"plugins\": [\n      [\n        \"expo-build-properties\",\n        {\n          \"android\": {\n            \"minSdkVersion\": 23,\n            \"compileSdkVersion\": 34,\n            \"targetSdkVersion\": 34,\n            \"buildToolsVersion\": \"34.0.0\",\n            \"frescoImagePipeline\": \"auto\"\n          },\n          \"ios\": {\n            \"deploymentTarget\": \"13.4\",\n            \"flipper\": true,\n            \"targetDisplayName\": \"MyApp\",\n            \"appStoreConnectTeamId\": \"ABCDEF123\"\n          }\n        }\n      ]\n    ]\n  }\n}","lang":"javascript","description":"This quickstart demonstrates how to configure `expo-build-properties` within your `app.json` to customize Android and iOS native build settings, such as SDK versions, Flipper enablement, and team IDs."},"warnings":[{"fix":"Centralize native build property configuration within your `app.json` or `app.config.js` to ensure a single source of truth and avoid conflicts.","message":"Properties configured via `expo-build-properties` override settings found in your native project files (`android/build.gradle`, `ios/*.pbxproj`, `ios/*/Info.plist`). Be aware of potential conflicts or unexpected behavior if properties are also manually managed in native code.","severity":"gotcha","affected_versions":">=1.0.0"},{"fix":"Refer to the official Expo SDK documentation for your current SDK version to understand default and recommended native build property values. Adjust custom settings cautiously.","message":"Ensuring specific `minSdkVersion`, `targetSdkVersion`, `compileSdkVersion`, or `deploymentTarget` can sometimes conflict with other Expo modules' requirements. Always consult the Expo SDK documentation for recommended values.","severity":"gotcha","affected_versions":">=1.0.0"},{"fix":"Migrate any top-level `android.buildToolsVersion` or `ios.targetDisplayName` settings from `app.json` directly into the `expo-build-properties` plugin configuration under their respective platform keys (`android` or `ios`).","message":"With Expo SDK 49+, the `expo.android.buildToolsVersion` and `expo.ios.targetDisplayName` properties moved from top-level `expo` configuration to `expo-build-properties`. Older projects might need adjustment.","severity":"breaking","affected_versions":">=49.0.0"},{"fix":"If experiencing build issues with `frescoImagePipeline: 'auto'`, verify that `expo-image-picker` is installed. If not using `expo-image-picker`, set `frescoImagePipeline: false` or explicitly define another value if Fresco is needed independently.","message":"When using `frescoImagePipeline: 'auto'` on Android, ensure you have the `expo-image-picker` package installed and configured correctly, as it enables Fresco. Incorrect setup can lead to build errors related to missing dependencies.","severity":"gotcha","affected_versions":">=55.0.0"}],"env_vars":null,"last_verified":"2026-04-19T00:00:00.000Z","next_check":"2026-07-18T00:00:00.000Z","problems":[{"fix":"Ensure your `app.json` or `app.config.js` has an `expo.plugins` array and that `expo-build-properties` is correctly listed within it.","cause":"The `plugins` array is missing or incorrectly structured in your `app.json` or `app.config.js` file, preventing the Expo build system from finding the plugin.","error":"Cannot read properties of undefined (reading 'plugins')"},{"fix":"If you don't explicitly need Fresco, set `android.frescoImagePipeline: false` in your `expo-build-properties` configuration. If you do need it, ensure your project setup (especially related to `expo-image-picker`) is correct and try cleaning the build cache (`expo prebuild --clean`).","cause":"This typically indicates that the Fresco image pipeline is enabled in your `expo-build-properties` (e.g., `frescoImagePipeline: true` or `'auto'`), but the necessary Fresco dependencies are not being resolved or are conflicting.","error":"error: cannot find symbol import com.facebook.fresco.middleware.Middleware; symbol: class Middleware location: package com.facebook.fresco.middleware"},{"fix":"Consult the official `expo-build-properties` documentation for a list of supported build properties for Android and iOS. Remove or correct any unrecognized keys.","cause":"You are attempting to set a build property that is not recognized or supported by `expo-build-properties` for the specified platform.","error":"Property 'someInvalidKey' does not exist on type 'BuildPropertiesOptions'"}],"ecosystem":"npm","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null,"pypi_latest":null,"cli_name":""}