RSS

Archive for March, 2026

Espressif Installation Manager (EIM)

Sunday, March 29th, 2026

EIM Banner

Espressif has recently released a cross-platform installation manager for the SDK used with ESP32 boards.
ESP-IDF Installation Manager (EIM)
is available for macOS, Linux, and Windows. The aim of the tool is to simplify the installation of ESP-IDF and its associated tools.

EIM also allows multiple copies of the framework to be installed on the same machine, allowing developers to switch between versions. This is ideal for testing different IDF versions against a code base.

Various IDF archives can be found on the
EIM Offline Installer downloads page.

First Impressions

So far, the tool has delivered on the promise of providing an easy, switchable way to install the various tools and SDKs. Installation of the tool is straightforward, and the SDKs are downloaded as archives and then loaded into the system using EIM. The same tool is used to switch from one IDF version to another.

Aside from one caveat, which will be covered later, the tool does exactly what it says on the tin, offering a simple way to install and switch between IDF versions.

Installing an IDF Version

Installation of the tool itself went smoothly; only two brew commands were needed.

brew tap espressif/eim
brew install eim

It is then necessary to download and install the archives for the IDF versions of interest. This is simply a case of navigating to the
EIM Offline Installer downloads page,
selecting the desired IDF version or versions, and downloading them locally. These archives can be large, with some coming in at 2.5 GB.

Once downloaded, an archive can be installed into the EIM system with a command such as the following:

eim install --use-local-archive archive_vv6.0_macos-aarch64.zst

The downloaded archive file can be deleted once an IDF version has been installed. The full list of installed versions can be obtained using the command:

$ eim list
2026-03-29 09:00:12 -  9 - 03 - INFO - Listing installed versions...
Installed versions:
- v5.5.3 (selected) [/Users/username/.espressif/v5.5.3/esp-idf]
- v6.0 [/Users/username/.espressif/v6.0/esp-idf]

An installed version can be activated with the command:

source /Users/username/.espressif/tools/activate_idf_v5.5.3.sh

This command registers the various environment variables, Python environments, and related settings:

Added environment variable ESP_IDF_VERSION = 5.5
Added environment variable IDF_TOOLS_PATH = /Users/username/.espressif/tools
Added environment variable IDF_COMPONENT_LOCAL_STORAGE_URL = file:///Users/username/.espressif/tools
Added environment variable IDF_PATH = /Users/username/.espressif/v5.5.3/esp-idf
Added environment variable ESP_ROM_ELF_DIR = /Users/username/.espressif/tools/esp-rom-elfs/20241011
Added environment variable OPENOCD_SCRIPTS = /Users/username/.espressif/tools/openocd-esp32/v0.12.0-esp32-20251215/openocd-esp32/share/openocd/scripts
Added environment variable IDF_PYTHON_ENV_PATH = /Users/username/.espressif/tools/python/v5.5.3/venv
Added proper directory to PATH
Activated virtual environment at /Users/username/.espressif/tools/python/v5.5.3/venv
Environment setup complete for the current shell session.
These changes will be lost when you close this terminal.
You are now using IDF version 5.5.
eim select v5.5.3

Once complete, the selected IDF version is ready to use.

Scripting

Now to the caveat mentioned earlier.

Using idf.py from the command line works fine, as do all the other tools. Things are a little different when it comes to scripting.

On macOS, EIM exposes idf.py via a shell alias. In practice, it looks something like this:

alias idf.py='/Users/username/.espressif/tools/python/v5.5.3/venv/bin/python /Users/username/.espressif/v5.5.3/esp-idf/tools/idf.py'

As mentioned, this works on the command line. However, it does not work in a bash script, as aliases are not normally expanded in non-interactive bash scripts. The solution is to define a variable in the bash script that points to the idf.py Python script file:

IDF=$IDF_PATH/tools/idf.py

It then becomes a simple case of replacing idf.py with $IDF within the script. So far, this solution has worked both locally and in a GitHub Action.

EIM GUI

Espressif also offers a GUI version of the installation manager. This was installed briefly but removed after Malwarebytes detected an attempt to access a website that it identified as potentially serving a Trojan.

This was did not seem to be a problem with the command line version of EIM.

Conclusion

EIM provides a simple way to install ESP-IDF versions and switch between them. It should make the setup process more straightforward, particularly for users on platforms where ESP-IDF installation has traditionally been less convenient.