{"record":{"id":"6d6bfb2e2560eacd","repo":"arduino/Arduino","slug":"arch-folder-is-no-longer-supported-see-http-g","errorCode":null,"errorMessage":"'arch' folder is no longer supported! See http://goo.gl/gfFJzU for more information","messagePattern":"'arch' folder is no longer supported! See http://goo\\.gl/gfFJzU for more information","errorType":"exception","errorClass":"IOException","httpStatus":null,"severity":"error","filePath":"arduino-core/src/processing/app/packages/UserLibrary.java","lineNumber":92,"sourceCode":"    // Parse metadata\n    File propertiesFile = new File(libFolder, \"library.properties\");\n    PreferencesMap properties = new PreferencesMap();\n    properties.load(propertiesFile);\n\n    // Library sanity checks\n    // ---------------------\n\n    // Compatibility with 1.5 rev.1 libraries:\n    // \"email\" field changed to \"maintainer\"\n    if (!properties.containsKey(\"maintainer\") && properties.containsKey(\"email\")) {\n      properties.put(\"maintainer\", properties.get(\"email\"));\n    }\n\n    // Compatibility with 1.5 rev.1 libraries:\n    // \"arch\" folder no longer supported\n    File archFolder = new File(libFolder, \"arch\");\n    if (archFolder.isDirectory())\n      throw new IOException(\"'arch' folder is no longer supported! See http://goo.gl/gfFJzU for more information\");\n\n    // Check mandatory properties\n    for (String p : Constants.LIBRARY_MANDATORY_PROPERTIES)\n      if (!properties.containsKey(p))\n        throw new IOException(\"Missing '\" + p + \"' from library\");\n\n    // Check layout\n    LibraryLayout layout;\n    File srcFolder = new File(libFolder, \"src\");\n\n    if (srcFolder.exists() && srcFolder.isDirectory()) {\n      // Layout with a single \"src\" folder and recursive compilation\n      layout = LibraryLayout.RECURSIVE;\n    } else {\n      // Layout with source code on library's root and \"utility\" folders\n      layout = LibraryLayout.FLAT;\n    }\n","sourceCodeStart":74,"sourceCodeEnd":110,"githubUrl":"https://github.com/arduino/Arduino/blob/a0df6e0e83b652c72bc78b0a1376c54d6ebc3bee/arduino-core/src/processing/app/packages/UserLibrary.java#L74-L110","documentation":"UserLibrary.create() validates the folder layout of an Arduino 1.5-format library. Arduino IDE 1.5 rev.1 libraries placed source code inside an 'arch' subfolder; this layout was abandoned and the loader now hard-fails when libFolder/arch is a directory. It exists to force migration to the recursive 'src' layout.","triggerScenarios":"Calling UserLibrary.create(libFolder) on a library directory that contains an 'arch' subdirectory (File(libFolder, \"arch\").isDirectory() == true).","commonSituations":"Installing an old 1.5 rev.1-era third-party library into the Arduino libraries folder (e.g. under sketchbook/libraries) and compiling or importing it with a modern IDE; unzipping an ancient library release.","solutions":["Migrate the library to the recursive layout: move the platform-specific sources from arch/<platform>/ into src/ (optionally qualifying filenames or using src/<platform> folders)","Upgrade the library to a newer release that no longer uses the 'arch' folder","If you maintain the library, restructure its folders per the 1.5 library spec linked in the message and re-release","If the library is abandoned, rewrite or vendor the needed sources in a src/ folder yourself"],"exampleFix":"// before (1.5 rev.1 layout)\nMyLib/\n  arch/\n    avr/MyLib.cpp\n// after (recursive layout)\nMyLib/\n  src/\n    MyLib.cpp","handlingStrategy":"validation","validationCode":"File arch = new File(libFolder, \"arch\");\nif (arch.isDirectory()) { /* migrate arch/ contents into src/ before loading */ }","typeGuard":"boolean isLegacyArchLayout(File dir) {\n  return dir != null && dir.isDirectory() && new File(dir, \"arch\").isDirectory();\n}","tryCatchPattern":"try {\n  UserLibrary lib = UserLibrary.create(libFolder);\n} catch (IOException e) {\n  if (e.getMessage().contains(\"arch\")) { /* migrate or flag legacy library */ }\n}","preventionTips":["Check library layout against the current 1.5+ spec before installing","Prefer libraries with recent releases over 1.5 rev.1 era downloads","Automate a scan of sketchbook/libraries for 'arch' folders in CI"],"tags":["arduino","library","deprecated-layout","filesystem"],"backgroundTag":"deprecated-api-usage","analyzedSha":"a0df6e0e83b652c72bc78b0a1376c54d6ebc3bee","analyzedAt":"2026-09-06T10:13:38.901Z","contentChangedAt":"2026-09-06T10:13:38.901Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}