platformio/platformio-core

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

Open

#5 261 ouverte le 20 sept. 2025

Voir sur GitHub
 (2 commentaires) (0 réactions) (0 assignés)Python (791 forks)batch import
LDFhelp wanted

Métriques du dépôt

Stars
 (7 329 stars)
Métriques de merge PR
 (Aucune PR mergée en 30 j)

Description

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).

Guide contributeur