commaai/openpilot · error
Unsupported platform: '{m}'. Supported platforms: {supported
Error message
Unsupported platform: '{m}'. Supported platforms: {supported} What it means
Raised by install() in juggle.py when the combination platform.system()-platform.machine() is not one of the prebuilt PlotJuggler bundles: Linux-x86_64, Linux-aarch64, or Darwin-arm64. juggle.py downloads a pinned prebuilt tarball from the releases URL rather than compiling, so any other platform/arch pair has nothing to fetch.
Source
Thrown at openpilot/tools/plotjuggler/juggle.py:47
def print_jotpluggler_banner():
purple = "\033[95m" if sys.stdout.isatty() else ""
reset = "\033[0m" if purple else ""
print(f"{purple}+-------------------------------------------------------------+{reset}")
print(f"{purple}|{reset} JotPluggler is the future! Try it like this: {purple}|{reset}")
print(f"{purple}|{reset} ./openpilot/tools/jotpluggler/jotpluggler --demo --layout tuning {purple}|{reset}")
print(f"{purple}|{reset} {purple}|{reset}")
print(f"{purple}|{reset} PlotJuggler will be deleted soon. {purple}|{reset}")
print(f"{purple}|{reset} Missing a feature? Open an issue or post in #dev-openpilot. {purple}|{reset}")
print(f"{purple}+-------------------------------------------------------------+{reset}")
def install():
m = f"{platform.system()}-{platform.machine()}"
supported = ("Linux-x86_64", "Linux-aarch64", "Darwin-arm64")
if m not in supported:
raise Exception(f"Unsupported platform: '{m}'. Supported platforms: {supported}")
if os.path.exists(INSTALL_DIR):
shutil.rmtree(INSTALL_DIR)
os.mkdir(INSTALL_DIR)
url = os.path.join(RELEASES_URL, m + ".tar.gz")
with requests.get(url, stream=True, timeout=10) as r, tempfile.NamedTemporaryFile() as tmp:
r.raise_for_status()
with open(tmp.name, 'wb') as tmpf:
for chunk in r.iter_content(chunk_size=1024 * 1024):
tmpf.write(chunk)
with tarfile.open(tmp.name) as tar:
tar.extractall(path=INSTALL_DIR, filter="data")
def get_plotjuggler_version():
out = subprocess.check_output([PLOTJUGGLER_BIN, "-v"], encoding="utf-8").strip()View on GitHub (pinned to 516ec1e682)
Solutions
- If on an Intel Mac, run under Rosetta or use a Linux-x86_64 box/container — or build PlotJuggler from source and point juggle.py at it.
- Check what Python reports: python -c "import platform; print(f'{platform.system()}-{platform.machine()}')" to confirm the mismatch (e.g. armv7l vs aarch64 — switch to a 64-bit OS).
- Build PlotJuggler from source for your platform and set it up so juggle skips its installer.
- Try the advertised replacement: openpilot/tools/jotpluggler/jotpluggler, which the banner says is the future tool and may support your platform.
Example fix
# before ./openpilot/tools/plotjuggler/juggle.py route # on Intel Mac -> Unsupported platform 'Darwin-x86_64' # after # use the supported replacement tool ./openpilot/tools/jotpluggler/jotpluggler --demo --layout tuning
Defensive patterns
Strategy: type-guard
Validate before calling
import platform
m = f"{platform.system()}-{platform.machine()}"
if m not in ("Linux-x86_64", "Linux-aarch64", "Darwin-arm64"):
raise SystemExit(f"no PlotJuggler bundle for {m}; use jotpluggler or build from source") Type guard
def juggle_supported() -> bool:
import platform
return f"{platform.system()}-{platform.machine()}" in ("Linux-x86_64", "Linux-aarch64", "Darwin-arm64") Try / catch
try:
import openpilot.tools.plotjuggler.juggle as juggle
juggle.install()
except Exception as e:
if 'Unsupported platform' in str(e):
# fall back to the maintained tool
subprocess.run(['./openpilot/tools/jotpluggler/jotpluggler', route])
else:
raise Prevention
- Check platform before invoking juggle in cross-platform tooling.
- Prefer jotpluggler, the advertised successor, on unusual platforms.
- On 32-bit ARM boards, use a 64-bit userspace so platform.machine() reports aarch64.
When it happens
Trigger: Running openpilot/tools/plotjuggler/juggle.py on e.g. Darwin-x86_64 (Intel Mac), Linux on riscv/armv7 (e.g. 32-bit ARM SBC), or Windows (platform.system() == 'Windows'). The f-string interpolates the detected machine string, e.g. "Unsupported platform: 'Darwin-x86_64'".
Common situations: Intel macOS users (no Darwin-x86_64 build), Raspberry Pi 32-bit OS users (Linux-armv7l), Windows/WSL1 users where platform reports unexpected values, or any exotic container reporting an unusual uname machine.
Related errors
- error: --socketcan is only supported on Linux
- Profile installation failed: no result from eUICC
- bundled firmware is {expected_product!r}, expected version {
- cannot recover from the ROM bootloader without a config back
- invalid config backup: {backup}
AI-assisted analysis of commaai/openpilot@516ec1e682 (2026-08-15).
Data as JSON: /api/errors/2624c2323c21083e.
Report an issue: GitHub.