# IDF Component Manager¶

The IDF Component manager is a tool that downloads dependencies for any ESP-IDF CMake project. The download happens automatically during a run of CMake. It can source components either from the component registry or from a git repository.

A list of components can be found on https://components.espressif.com/

## Activating the Component Manager¶

If CMake is started using idf.py or ESP-IDF VSCode Extension then the component manager will be activated by default.

If CMake is used directly or with some CMake-based IDE like CLion, it’s necessary to set the IDF_COMPONENT_MANAGER environment variable to 1 to enable the component manager integration with the build system.

## Using with a project¶

Dependencies for each component in the project are defined in a separate manifest file named idf_component.yml placed in the root of the component. The manifest file template can be created for a component by running idf.py create-manifest --component=my_component. When a new manifest is added to one of the components in the project it’s necessary to reconfigure it manually by running idf.py reconfigure. Then build will track changes in idf_component.yml manifests and automatically triggers CMake when necessary.

There is an example application: example:build_system/cmake/component_manager that uses components installed by the component manager.

It’s not necessary to have a manifest for components that don’t need any managed dependencies.

When CMake configures the project (e.g. idf.py reconfigure) component manager does a few things:

• Processes idf_component.yml manifests for every component in the project and recursively solves dependencies

• Creates a dependencies.lock file in the root of the project with a full list of dependencies

• Downloads all dependencies to the managed_components directory

The lock-file dependencies.lock and content of managed_components directory is not supposed to be modified by a user. When the component manager runs it always make sure they are up to date. If these files were accidentally modified it’s possible to re-run the component manager by triggering CMake with idf.py reconfigure

## Defining dependencies in the manifest¶

dependencies:
# Required IDF version
idf: ">=4.1"
# Defining a dependency from the registry:
# https://components.espressif.com/component/example/cmp
example/cmp: ">=1.0.0"

# # Other ways to define dependencies
#
# # For components maintained by Espressif only name can be used.
# # Same as espressif/cmp
# component: "~1.0.0"
#
# # Or in a longer form with extra parameters
# component2:
#   version: ">=2.0.0"
#
#   # For transient dependencies public flag can be set.
#   # public flag doesn't affect the main component.
#   # All dependencies of main are public by default.
#   public: true
#
#   # For components hosted on non-default registry:
#   service_url: "https://componentregistry.company.com"
#
# # For components in git repository:
# test_component:
#   path: test_component
#   git: ssh://git@gitlab.com/user/components.git
#
# # For test projects during component development
# # components can be used from a local directory
# # with relative or absolute path
# some_local_component:
#   path: ../../projects/component