Skip to content

馃悰 After upgrading an Expo app to SDK 56, Expo config evaluation fails when using the react-native-ble-plx config plugin.聽#1339

Open

Description

@jaka-kralj

Prerequisites

  • I checked the documentation and FAQ without finding a solution
  • I checked to make sure that this issue has not already been filed

Expected Behavior

  • We upgrade to Expo SDK 56 and successfully run npx expo-doctor with no errors.
  • App builds successfully

Current Behavior

During Expo SDK 56 upgrade I discovered an issue with an import of expo/config-plugins.
While running expo-doctor command I receive an error:
node_modules/expo/bin/cli config --json --full exited with non-zero code: 1

Investigating further I found an error:

Skipping config plugin check: Cannot find module '@expo/config-plugins'
Require stack:
- node_modules/react-native-ble-plx/plugin/build/withBLE.js
- node_modules/react-native-ble-plx/app.plugin.js

The plugin currently imports:
from '@expo/config-plugins'

Expo SDK 56 recommends using the Expo sub-export instead:
from("expo/config-plugins")

Adding @expo/config-plugins directly to the app (devDependencies) works around the crash, but expo-doctor warns that this package should not be installed directly.

Library version

3.5.1

Device

N/A

Environment info

N/A

Steps to reproduce

  1. Upgrade to latest expo SDK with npx expo install expo@^56.0.0 --fix
  2. Run npx expo-doctor
  3. You are presented with an error described in the "Current Behavior" section.

Formatted code sample or link to a repository

N/A

Relevant log output

N/A

Additional information

No response

Activity

  1. huytdps13400 commented on Aug 26, 2026

    @huytdps13400

    /claim

    I confirmed the package imports @expo/config-plugins without declaring it, which makes published plugin resolution depend on hoisting. Expo now explicitly recommends importing third-party library plugins through expo/config-plugins so the app Expo version supplies the compatible implementation and pnpm/Yarn PnP can resolve it.

    I will add an isolated plugin-load regression with no direct @expo/config-plugins package, switch all plugin/runtime test imports to the Expo re-export, declare Expo as an optional peer, and verify the plugin against SDK 56 plus the existing package gates.

  2. huytdps13400 commented on Aug 26, 2026

    @huytdps13400

    Implemented in #1341. All config-plugin imports now go through expo/config-plugins, Expo is declared as an optional peer, and the new resolution regression is part of CI.

    I verified the packed package in a Node 20 / pnpm 10 strict consumer with expo@56.0.20 and no direct app dependency on @expo/config-plugins. The exact expo config --json --full path from the report exits successfully and the plugin emits BLUETOOTH, BLUETOOTH_ADMIN, and BLUETOOTH_CONNECT permissions. Repository plugin tests, lint, typecheck, plugin build, and Bob prepack also pass.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions