platformio/platformio-core

Library Name Collision: External Registry Libraries Override Built-in Framework Libraries

Open

#5261 aperta il 20 set 2025

Vedi su GitHub
 (2 commenti) (0 reazioni) (0 assegnatari)Python (791 fork)batch import
LDFhelp wanted

Metriche repository

Star
 (7329 star)
Metriche merge PR
 (Nessuna PR mergiata in 30 g)

Descrizione

Problem

When using lib_ldf_mode = off and explicitly declaring dependencies, PlatformIO resolves library names to external registry libraries instead of built-in framework libraries, even when the intent is to use the framework's native implementation.

Example

User specifies ESP32's built-in Preferences library:

{
  "dependencies": {
    "Preferences": "*"
  }
}

PlatformIO incorrectly resolves this to vshymanskyy/Preferences from the registry instead of the native ESP32 framework library.

Impact

  • Project Breakage: Working projects can suddenly break when someone registers a library with a conflicting name (e.g., Wire, SPI, Preferences)
  • Unpredictable Builds: Library resolution depends on external registry state rather than framework specifications

Workaround

Specify exact versions that don't exist in external registry:

{
  "dependencies": {
    "Preferences": "3.3.1"
  }
}

This is fragile and not a long-term solution: it will break if someone registers a library with the same name and with that version

Possible Solutions

  1. Explicit Framework Syntax: Add syntax to explicitly reference framework libraries:

    • "framework:Preferences": "*"
    • "builtin:Preferences": "*"
  2. Priority-based Resolution: Built-in framework libraries should take precedence over registry libraries when names conflict

References

Original discussion: https://community.platformio.org/t/how-to-explicitly-include-a-built-in-framework-library/52570

----------- EDIT: it seems the problem only occurs in a library.json file ("dependencies" clause), not in platformio.ini ("lib_deps" clause).

Guida contributor