arduino/Arduino · error · RunnerException
Could not find tool {0} from package {1}
Error message
Could not find tool {0} from package {1} What it means
When the burn-bootloader tool preference specifies a tool qualified with a package name ('package:tool'), burnBootloader resolves it against that package's target platform. If the platform defines no tool with that name (platform.getTool returns an empty PreferencesMap), this RunnerException is thrown. It means the referenced tool does not exist in the named package.
Source
Thrown at arduino-core/src/cc/arduino/packages/uploaders/SerialUploader.java:354
// Build configuration for the current programmer
PreferencesMap prefs = PreferencesData.getMap();
PreferencesMap boardPreferences = BaseNoGui.getBoardPreferences();
if (boardPreferences != null) {
prefs.putAll(boardPreferences);
}
prefs.putAll(programmerPrefs);
// Create configuration for bootloader tool
PreferencesMap toolPrefs = new PreferencesMap();
String tool = prefs.getOrExcept("bootloader.tool");
if (tool.contains(":")) {
String[] split = tool.split(":", 2);
TargetPlatform platform = BaseNoGui.getCurrentTargetPlatformFromPackage(split[0]);
tool = split[1];
toolPrefs.putAll(platform.getTool(tool));
if (toolPrefs.size() == 0)
throw new RunnerException(I18n.format(tr("Could not find tool {0} from package {1}"), tool, split[0]));
}
toolPrefs.putAll(targetPlatform.getTool(tool));
if (toolPrefs.size() == 0)
throw new RunnerException(I18n.format(tr("Could not find tool {0}"), tool));
// Merge tool with global configuration
prefs.putAll(toolPrefs);
if (verbose) {
prefs.put("erase.verbose", prefs.getOrExcept("erase.params.verbose"));
prefs.put("bootloader.verbose", prefs.getOrExcept("bootloader.params.verbose"));
} else {
prefs.put("erase.verbose", prefs.getOrExcept("erase.params.quiet"));
prefs.put("bootloader.verbose", prefs.getOrExcept("bootloader.params.quiet"));
}
new LoadVIDPIDSpecificPreferences().load(prefs);
if (!runCommand("erase.pattern", prefs))View on GitHub (pinned to a0df6e0e83)
Solutions
- Install the missing tool/package via Boards Manager (or place the tool under the package's tools/ directory) so platform.getTool finds it
- Fix the tool reference in boards.txt/platform.txt so 'package:tool' matches a tool actually defined in that package's platform.txt (check exact tool name and version)
- Fall back to an unqualified tool name present in the current target platform
Example fix
// boards.txt before tool=arduino:avrdud // after tool=arduino:avrdude
Defensive patterns
Strategy: validation
Validate before calling
String toolPref = prefs.get("bootloader.tool");
if (toolPref != null && toolPref.contains(":")) {
String pkg = toolPref.split(":", 2)[0];
if (BaseNoGui.getCurrentTargetPlatformFromPackage(pkg) == null) throw new IllegalStateException("Package " + pkg + " not installed; install it via Boards Manager");
} Try / catch
try { uploader.burnBootloader(); } catch (RunnerException e) { if (e.getMessage().startsWith("Could not find tool")) { logMissingToolAndSuggestBoardsManager(e); } else { throw e; } } Prevention
- Verify 'package:tool' references in boards.txt match tools defined in that package's platform.txt
- Install all tool dependencies of third-party board packages
- After IDE/core upgrades, re-check tool names for renames
When it happens
Trigger: The bootloader/tool preference in boards.txt or platform.txt uses a 'package:tool' reference (e.g. 'arduino:avrdude') whose package's platform does not define that tool, typically because the package is not installed or the tool name is misspelled.
Common situations: Third-party board definitions referencing an 'arduino:avrdude'-style tool while only a differently named tool version exists; board package installed without its required tool dependency; renaming of tools across IDE/core versions.
Understand the failure class
Background: "Not found" and "does not exist" errors: why "Task not found", "No such folder", and "Can't find" fire when a lookup comes back empty — this error's family across 14 libraries.
Related errors
- Could not find tool {0}
- Board is not selected
- Tool {0} is not available for your operating system.
- Unable to understand proxy settings
- No valid hardware definitions found in folder {0}.
AI-assisted analysis of arduino/Arduino@a0df6e0e83 (2026-09-06).
Data as JSON: /api/errors/d7955cd5ca653174.
Report an issue: GitHub.