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
- Open Tools > Programmer and select the programmer you are actually using
- Verify the selected board's platform provides that programmer (programmers.txt present)
- Reinstall/update the board's core package if programmers are missing
- 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
- Always choose Tools > Programmer before Upload Using Programmer
- Re-check programmer selection after switching boards
- Keep board platform packages installed and current
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
- Network upload using programmer not supported
- serial.port
- Board is not selected
- Unable to understand proxy settings
- SCP error:
AI-assisted analysis of arduino/Arduino@a0df6e0e83 (2026-09-06).
Data as JSON: /api/errors/8282103beb0b6045.
Report an issue: GitHub.