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

  1. 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.
  2. 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).
  3. Build PlotJuggler from source for your platform and set it up so juggle skips its installer.
  4. 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

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


AI-assisted analysis of commaai/openpilot@516ec1e682 (2026-08-15). Data as JSON: /api/errors/2624c2323c21083e. Report an issue: GitHub.