arduino/Arduino · error · RunnerException

Network upload using programmer not supported

Error message

Network upload using programmer not supported

What it means

SSHUploader.uploadUsingPreferences rejects uploads made with 'Upload Using Programmer' because programming over the SSH/network path is not implemented. Uploading via a programmer requires direct hardware (serial/ISP) access.

Source

Thrown at arduino-core/src/cc/arduino/packages/uploaders/SSHUploader.java:84

  public SSHUploader(BoardPort port) {
    this.port = port;
  }

  @Override
  public boolean requiresAuthorization() {
    return true;
  }

  @Override
  public String getAuthorizationKey() {
    return "runtime.pwd." + port.getAddress();
  }

  @Override
  public boolean uploadUsingPreferences(File sourcePath, String buildPath, String className, boolean usingProgrammer, List<String> warningsAccumulator) throws RunnerException, PreferencesMapException {
    if (usingProgrammer) {
      throw new RunnerException(tr("Network upload using programmer not supported"));
    }

    TargetPlatform targetPlatform = BaseNoGui.getTargetPlatform();
    PreferencesMap prefs = PreferencesData.getMap();
    PreferencesMap boardPreferences = BaseNoGui.getBoardPreferences();
    if (boardPreferences != null) {
      prefs.putAll(boardPreferences);
    }
    String tool = prefs.getOrExcept("upload.tool");
    if (tool.contains(":")) {
      String[] split = tool.split(":", 2);
      targetPlatform = BaseNoGui.getCurrentTargetPlatformFromPackage(split[0]);
      tool = split[1];
    }
    prefs.putAll(targetPlatform.getTool(tool));

    boolean coreMissesRemoteUploadTool = targetPlatform.getTool(tool + "_remote").isEmpty();

View on GitHub (pinned to a0df6e0e83)

Solutions

  1. Use a normal (non-programmer) upload over the network connection
  2. Connect via USB and select the serial port before using Upload Using Programmer
  3. Attach the programmer locally and select it under Tools > Programmer

Example fix

// before
ide.menu: Sketch > Upload Using Programmer (network port selected)
// after
ide.menu: Sketch > Upload (network port) OR Upload Using Programmer with USB serial port selected
Defensive patterns

Strategy: try-catch

Validate before calling

// Guard: programmer upload requires non-network port
boolean networkPort = port.getAddress().contains("@");
if (usingProgrammer && networkPort) {
    throw new IllegalStateException("Upload Using Programmer needs a USB serial port");
}

Try / catch

try {
    uploader.uploadUsingPreferences(src, build, cls, usingProgrammer, warnings);
} catch (RunnerException e) {
    if (e.getMessage().contains("using programmer not supported")) {
        // retry without usingProgrammer or switch to serial port
    }
}

Prevention

When it happens

Trigger: Invoking Sketch > Upload Using Programmer while a network board/port (SSH-based uploader) is selected — i.e. usingProgrammer=true on SSHUploader.

Common situations: Users trying to push a sketch through an ISP programmer routed via a network-connected board; confusing the network upload with programmer-based upload workflows.

Understand the failure class

Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.

Related errors


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