{"record":{"id":"f2467c9ca6f9f856","repo":"arduino/Arduino","slug":"network-upload-using-programmer-not-supported","errorCode":null,"errorMessage":"Network upload using programmer not supported","messagePattern":"Network upload using programmer not supported","errorType":"exception","errorClass":"RunnerException","httpStatus":null,"severity":"error","filePath":"arduino-core/src/cc/arduino/packages/uploaders/SSHUploader.java","lineNumber":84,"sourceCode":"\n  public SSHUploader(BoardPort port) {\n    this.port = port;\n  }\n\n  @Override\n  public boolean requiresAuthorization() {\n    return true;\n  }\n\n  @Override\n  public String getAuthorizationKey() {\n    return \"runtime.pwd.\" + port.getAddress();\n  }\n\n  @Override\n  public boolean uploadUsingPreferences(File sourcePath, String buildPath, String className, boolean usingProgrammer, List<String> warningsAccumulator) throws RunnerException, PreferencesMapException {\n    if (usingProgrammer) {\n      throw new RunnerException(tr(\"Network upload using programmer not supported\"));\n    }\n\n    TargetPlatform targetPlatform = BaseNoGui.getTargetPlatform();\n    PreferencesMap prefs = PreferencesData.getMap();\n    PreferencesMap boardPreferences = BaseNoGui.getBoardPreferences();\n    if (boardPreferences != null) {\n      prefs.putAll(boardPreferences);\n    }\n    String tool = prefs.getOrExcept(\"upload.tool\");\n    if (tool.contains(\":\")) {\n      String[] split = tool.split(\":\", 2);\n      targetPlatform = BaseNoGui.getCurrentTargetPlatformFromPackage(split[0]);\n      tool = split[1];\n    }\n    prefs.putAll(targetPlatform.getTool(tool));\n\n    boolean coreMissesRemoteUploadTool = targetPlatform.getTool(tool + \"_remote\").isEmpty();\n","sourceCodeStart":66,"sourceCodeEnd":102,"githubUrl":"https://github.com/arduino/Arduino/blob/a0df6e0e83b652c72bc78b0a1376c54d6ebc3bee/arduino-core/src/cc/arduino/packages/uploaders/SSHUploader.java#L66-L102","documentation":"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.","triggerScenarios":"Invoking Sketch > Upload Using Programmer while a network board/port (SSH-based uploader) is selected — i.e. usingProgrammer=true on SSHUploader.","commonSituations":"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.","solutions":["Use a normal (non-programmer) upload over the network connection","Connect via USB and select the serial port before using Upload Using Programmer","Attach the programmer locally and select it under Tools > Programmer"],"exampleFix":"// before\nide.menu: Sketch > Upload Using Programmer (network port selected)\n// after\nide.menu: Sketch > Upload (network port) OR Upload Using Programmer with USB serial port selected","handlingStrategy":"try-catch","validationCode":"// Guard: programmer upload requires non-network port\nboolean networkPort = port.getAddress().contains(\"@\");\nif (usingProgrammer && networkPort) {\n    throw new IllegalStateException(\"Upload Using Programmer needs a USB serial port\");\n}","typeGuard":null,"tryCatchPattern":"try {\n    uploader.uploadUsingPreferences(src, build, cls, usingProgrammer, warnings);\n} catch (RunnerException e) {\n    if (e.getMessage().contains(\"using programmer not supported\")) {\n        // retry without usingProgrammer or switch to serial port\n    }\n}","preventionTips":["Use plain Upload for network boards","Select a USB port before Upload Using Programmer","Attach programmers locally, not via network boards"],"tags":["upload","programmer","network","unsupported"],"backgroundTag":"unsupported-operation","analyzedSha":"a0df6e0e83b652c72bc78b0a1376c54d6ebc3bee","analyzedAt":"2026-09-06T10:13:38.901Z","contentChangedAt":"2026-09-06T10:13:38.901Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}