{"record":{"id":"b11f2cfd5aca6065","repo":"tauri-apps/tauri","slug":"couldn-t-find-a-square-icon-to-use-as-appimage-ico","errorCode":null,"errorMessage":"couldn't find a square icon to use as AppImage icon","messagePattern":"couldn't find a square icon to use as AppImage icon","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/tauri-bundler/src/bundle/linux/appimage/linuxdeploy.rs","lineNumber":101,"sourceCode":"    .with_context(|| \"Failed to copy custom files\")?;\n\n  fs::create_dir_all(&output_path)?;\n  let app_dir_path = output_path.join(format!(\"{}.AppDir\", settings.product_name()));\n  let appimage_filename = format!(\n    \"{}_{}_{}.AppImage\",\n    settings.product_name(),\n    settings.version_string(),\n    appimage_arch\n  );\n  let appimage_path = output_path.join(&appimage_filename);\n  fs_utils::create_dir(&app_dir_path, true)?;\n\n  fs::create_dir_all(&tools_path)?;\n  let larger_icon = icons\n    .iter()\n    .filter(|i| i.width == i.height)\n    .max_by_key(|i| i.width)\n    .expect(\"couldn't find a square icon to use as AppImage icon\");\n  let larger_icon_path = larger_icon\n    .path\n    .strip_prefix(package_dir.join(\"data\"))\n    .unwrap()\n    .to_string_lossy()\n    .to_string();\n\n  log::info!(action = \"Bundling\"; \"{} ({})\", appimage_filename, appimage_path.display());\n\n  let app_dir_usr = app_dir_path.join(\"usr/\");\n  let app_dir_usr_bin = app_dir_usr.join(\"bin/\");\n  let app_dir_usr_lib = app_dir_usr.join(\"lib/\");\n\n  fs_utils::copy_dir(&data_dir.join(\"usr/\"), &app_dir_usr)?;\n\n  // Using create_dir_all for a single dir so we don't get errors if the path already exists\n  fs::create_dir_all(&app_dir_usr_bin)?;\n  fs::create_dir_all(app_dir_usr_lib)?;","sourceCodeStart":83,"sourceCodeEnd":119,"githubUrl":"https://github.com/tauri-apps/tauri/blob/460ec35447493200d64290dd7f015d5a91d0fd58/crates/tauri-bundler/src/bundle/linux/appimage/linuxdeploy.rs#L83-L119","documentation":"When building a Linux AppImage, tauri-bundler's linuxdeploy step selects the largest square icon from the provided icon list via `max_by_key` on width among icons where width == height, and expects at least one such icon. An empty or all-non-square icon set makes max_by_key return None and the expect panics. The library requires at least one square icon to register AppImage icons.","triggerScenarios":"Running an AppImage bundle (`tauri build` on Linux targeting appimage) with `bundle.icon` entries containing no square image — all icons rectangular, the list empty, or icon files that failed to load earlier so the filtered set is empty.","commonSituations":"tauri.conf.json icons defaulting to or listing only rectangular PNGs (e.g. 128x64 banners); forgetting to generate the required `32x32.png`/`128x128.png`/`icon.png` square icons; icons in an unsupported format silently excluded.","solutions":["Add a square PNG icon to `bundle.icon` in tauri.conf.json (e.g. `icons/128x128.png` or `icons/icon.png`).","Run `tauri icon path/to/app-icon.png` to generate the full standard square icon set.","Check that listed icon files actually exist and are valid PNG/ICO files, not 404s or misnamed paths.","If using a rectangular logo, pad it to a square before adding it to the icon list."],"exampleFix":"// before\n\"icon\": [\"icons/banner.png\"] // 128x64\n// after\n\"icon\": [\"icons/32x32.png\", \"icons/128x128.png\", \"icons/icon.png\"]","handlingStrategy":"validation","validationCode":"let icons = tauri_utils::config::read_icons(&config)?;\nif !icons.iter().any(|i| i.width == i.height) {\n  panic!(\"bundle.icon must include at least one square PNG (e.g. icons/128x128.png) for AppImage\");\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always run `tauri icon` to generate the standard square icon set.","Include icons/32x32.png, 128x128.png and icon.png in bundle.icon.","Never list only rectangular marketing banners as app icons."],"tags":["linux","appimage","icons","configuration"],"backgroundTag":"empty-required-field","analyzedSha":"460ec35447493200d64290dd7f015d5a91d0fd58","analyzedAt":"2026-09-18T23:55:51.277Z","contentChangedAt":"2026-09-18T23:55:51.277Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}