{"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,"search_vec":"'-4':87 '3':86 '55.0.13':65 'align':80 'allow':14 'android':24 'app.config.js':30 'app.json':28 'bare':118 'broader':73 'build':2,6,19,110,127,129 'build-properti':128 'build.gradle':44 'config':11 'configur':108 'cross':104 'cross-platform':103 'current':61 'custom':17,47 'declar':101 'deep':93 'develop':15 'differenti':91 'direct':25 'e.g':43 'ecosystem':98 'edit':38 'eject':115 'elimin':33 'everi':85 'expo':1,5,10,55,74,97,126 'expo-build-properti':4 'file':31,42 'info.plist':45 'integr':94 'io':22 'javascript':122 'major':77 'manag':56 'manual':37 'month':88 'nativ':18,40,109,120,125 'need':35 'new':82 'packag':59 'part':70 'platform':105 'plugin':12 'prebuild':51 'primari':90 'process':52 'project':41 'properti':3,7,20,130 'provid':99 'react':119,124 'react-nat':123 'releas':68,84 'requir':113 'script':48 'sdk':75,83 'set':111 'setup':121 'stabl':62 'streamlin':49 'typescript':131 'typic':79 'version':64,78 'way':106 'within':53 'without':112 'workflow':57,116","created_at":"2026-04-20T01:53:03.940703+00:00","updated_at":"2026-04-20T01:53:03.940703+00:00","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,"quickstart_score":null,"quickstart_tag":null,"pypi_latest":null,"cli_name":"","cli_version":null,"type":"library","homepage":"https://docs.expo.dev/versions/latest/sdk/build-properties","github":"https://github.com/expo/expo","docs":null,"changelog":null,"pypi":null,"npm":"https://www.npmjs.com/package/expo-build-properties","openapi_spec":null,"status_page":null,"smithery":null,"categories":["devops","aws","http-networking","serialization","testing"],"base_url":null,"auth_type":null,"provenance":{"verified_status":null,"verified_at":null,"last_verified":"2026-06-17","next_check":"2026-07-18","install_tag":null}}