arduino/Arduino · error · RunnerException

Please select a programmer from Tools->Programmer menu

Error message

Please select a programmer from Tools->Programmer menu

What it means

SerialUploader.uploadUsingProgrammer looks up the currently selected programmer (from Tools > Programmer) in the board's target platform and throws this RunnerException when none is selected or the selection cannot be resolved to a programmers entry.

Source

Thrown at arduino-core/src/cc/arduino/packages/uploaders/SerialUploader.java:297

  private boolean uploadUsingProgrammer(String buildPath, String className) throws Exception {

    TargetPlatform targetPlatform = BaseNoGui.getTargetPlatform();
    String programmer = PreferencesData.get("programmer");
    if (programmer.contains(":")) {
      String[] split = programmer.split(":", 2);
      targetPlatform = BaseNoGui.getCurrentTargetPlatformFromPackage(split[0]);
      programmer = split[1];
    }

    PreferencesMap prefs = PreferencesData.getMap();
    PreferencesMap boardPreferences = BaseNoGui.getBoardPreferences();
    if (boardPreferences != null) {
      prefs.putAll(boardPreferences);
    }
    PreferencesMap programmerPrefs = targetPlatform.getProgrammer(programmer);
    if (programmerPrefs == null)
      throw new RunnerException(
          tr("Please select a programmer from Tools->Programmer menu"));
    prefs.putAll(targetPlatform.getTool(programmerPrefs.getOrExcept("program.tool")));
    prefs.putAll(programmerPrefs);

    prefs.put("build.path", buildPath);
    prefs.put("build.project_name", className);

    if (verbose)
      prefs.put("program.verbose", prefs.getOrExcept("program.params.verbose"));
    else
      prefs.put("program.verbose", prefs.getOrExcept("program.params.quiet"));

    if (verifyUpload)
      prefs.put("program.verify", prefs.get("program.params.verify", ""));
    else
      prefs.put("program.verify", prefs.get("program.params.noverify", ""));

    return runCommand("program.pattern", prefs);

View on GitHub (pinned to a0df6e0e83)

Solutions

  1. Open Tools > Programmer and select the programmer you are actually using
  2. Verify the selected board's platform provides that programmer (programmers.txt present)
  3. Reinstall/update the board's core package if programmers are missing
  4. If editing platforms, ensure the programmer id in the menu matches a programmers.txt entry

Example fix

// before
Tools > Programmer: (empty)
// after
Tools > Programmer: Arduino as ISP
Defensive patterns

Strategy: validation

Validate before calling

String programmer = PreferencesData.get("programmer");
if (programmer == null || programmer.isEmpty()
        || targetPlatform.getProgrammer(programmer) == null) {
    throw new IllegalStateException("Select a programmer under Tools > Programmer first");
}

Try / catch

try {
    uploader.uploadUsingPreferences(src, build, cls, true, warnings);
} catch (RunnerException e) {
    if (e.getMessage().contains("Please select a programmer")) {
        // surface UI prompt to pick Tools > Programmer, then retry
    }
}

Prevention

When it happens

Trigger: Invoking Upload Using Programmer (or Burn Bootloader flows via programmer) when PreferencesData 'programmer' is empty/unset or names a programmer absent from the board's platform programmers.txt.

Common situations: Fresh IDE installs where the programmer menu defaults to none; board definitions lacking the chosen programmer; switching boards so the previous programmer selection no longer exists; corrupted/custom platform packages.

Understand the failure class

Background: "X is required", "must be set", "cannot be empty": the missing-required-config error family, from Vertex AI project/location to WeChat keys — this error's family across 18 libraries.

Related errors


AI-assisted analysis of arduino/Arduino@a0df6e0e83 (2026-09-06). Data as JSON: /api/errors/8282103beb0b6045. Report an issue: GitHub.