Inkplate 10 upload fails on M5 Mac with esptool Bad CPU type error

Customer:

I followed the Inkplate 10 quick start guide at Inkplate 10 - Quick start guide | Soldered Documentation but uploading the sample code fails with this error:

bash: /Users/user/Library/Arduino15/packages/Inkplate_Boards/tools/esptool_py/4.5.1/esptool: Bad CPU type in executable
exit status 126

Compilation error: exit status 126

I believe this is a CPU architecture incompatibility with the M5 CPU. What are my options to fix this, preferably without installing Rosetta? I couldn’t find anything in the FAQ.

Originally submitted via email support on 21 February 2026. Migrated to the forum for community visibility.

Soldered Support:

The official fix for ESP32 is to install Rosetta. The board packages come from ESP32 officially, and while we add convenient features to make the Inkplate library easy to use, the ESP32 tools haven’t been ported for the new Macs.

However, there is an alternative solution that wraps the esptool.py script to run it natively:

Step 1: Install esptool via Python

Open your terminal and install the exact version of esptool used by the board package:

pip3 install esptool==4.5.1

(If pip3 is not found, try pip or ensure Python is installed via Homebrew.)

Step 2: Create a Native Wrapper Script

Replace the binary with a script that calls your native Python installation.

Navigate to the tool directory:

cd /Users/user/Library/Arduino15/packages/Inkplate_Boards/tools/esptool_py/4.5.1/

Note: Double-check this path. If you are using a newer version of the board definitions, the 4.5.1 folder name might be different.

Rename the incompatible binary (backup):

mv esptool esptool.old

Create a new replacement script. Use a text editor (like nano) to create a new file named esptool:

nano esptool

Paste the following content:

#!/bin/sh
python3 -m esptool "$@"

Save and exit (in nano: Ctrl+O, Enter, Ctrl+X).

Make it executable:

chmod +x esptool

Now, when Arduino IDE tries to run esptool, it will execute your script, which passes all commands to the native Python module. This bypasses the need for Rosetta entirely.