{"record":{"id":"4f8046097eaf5f5f","repo":"tonhowtf/omniget","slug":"error-while-building-tauri-application","errorCode":null,"errorMessage":"error while building tauri application","messagePattern":"error while building tauri application","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"critical","filePath":"src-tauri/src/lib.rs","lineNumber":1449,"sourceCode":"            commands::tools::images::tool_img_stitch,\n            commands::tools::images::tool_img_sprite,\n            commands::tools::bilibili::tool_bili_danmaku_export,\n            commands::tools::bilibili::tool_bili_danmaku_burn,\n            commands::tools::games::tool_switch_album,\n            commands::tools::games::tool_clip_organizer,\n            commands::tools::games::tool_protondb,\n            commands::tools::system::tool_hosts_read,\n            commands::tools::system::tool_hosts_apply,\n            commands::tools::system::tool_hosts_restore,\n            commands::tools::video::tool_sticker,\n            commands::tools::pdf::tool_pdf_markdown,\n            commands::tools::linkedin::tool_li_overview,\n            commands::tools::linkedin::tool_li_connections,\n            commands::tools::linkedin::tool_li_messages,\n            commands::tools::linkedin::tool_li_checklist,\n        ])\n        .build(tauri::generate_context!())\n        .expect(\"error while building tauri application\")\n        .run(|app_handle, event| {\n            if let tauri::RunEvent::ExitRequested { .. } = &event {\n                let state = app_handle.state::<AppState>();\n                let session_mutex = state.torrent_session.clone();\n                tauri::async_runtime::block_on(async move {\n                    let session_guard = session_mutex.lock().await;\n                    let session = session_guard.as_ref().cloned();\n                    drop(session_guard);\n                    if let Some(session) = session {\n                        match tokio::time::timeout(\n                            std::time::Duration::from_secs(5),\n                            session.stop(),\n                        )\n                        .await\n                        {\n                            Ok(()) => tracing::info!(\"torrent session stopped cleanly\"),\n                            Err(_) => tracing::warn!(\n                                \"torrent session stop timed out after 5s; exiting anyway\"","sourceCodeStart":1431,"sourceCodeEnd":1467,"githubUrl":"https://github.com/tonhowtf/omniget/blob/8600b91f4246848bac346874daa9e61c1fc5677a/src-tauri/src/lib.rs#L1431-L1467","documentation":"At the end of run(), the Tauri application is assembled (.build(tauri::generate_context!())) and any Err panics with \"error while building tauri application\". tauri::Builder::build fails for configuration, resource, or plugin initialization problems — e.g. invalid tauri.conf.json, missing window icons referenced in the context, or a plugin's setup returning an error.","triggerScenarios":"tauri::Builder::build returns Err because tauri.conf.json is invalid (bad schema/fields), generate_context! cannot embed referenced assets/icons, the default window icon is missing/malformed, or a registered plugin fails initialization.","commonSituations":"Editing tauri.conf.json with a typo or unsupported field for the Tauri version; deleting/renaming files under src-tauri/icons referenced by config; frontend dist dir missing at build/run; version mismatch between tauri crate and CLI.","solutions":["Check stderr — Tauri logs the underlying reason before the panic; fix that specific cause.","Validate tauri.conf.json against your Tauri version's schema (tauri CLI or schema validation).","Ensure all icons referenced in config exist under src-tauri/icons and are valid PNG/ICO.","Confirm frontendDist/devUrl paths in config point to an existing build output, and align @tauri-apps/cli and tauri crate versions."],"exampleFix":"// before\n.build(tauri::generate_context!())\n.expect(\"error while building tauri application\")\n.run(...);\n\n// after\nmatch app_builder.build(tauri::generate_context!()) {\n    Ok(app) => app.run(|app_handle, event| { ... }),\n    Err(e) => {\n        eprintln!(\"failed to build tauri application: {e}\");\n        std::process::exit(1);\n    }\n}","handlingStrategy":"try-catch","validationCode":"// validate config before launch\nconst conf = JSON.parse(fs.readFileSync('src-tauri/tauri.conf.json'));\nfor (const icon of conf.bundle?.icon ?? []) if (!fs.existsSync(path.resolve('src-tauri', icon))) throw new Error(`missing icon: ${icon}`);","typeGuard":null,"tryCatchPattern":"match builder.build(tauri::generate_context!()) {\n    Ok(app) => app.run(handle_events),\n    Err(e) => { eprintln!(\"tauri build failed: {e:#}\"); std::process::exit(1); }\n}","preventionTips":["Validate tauri.conf.json against your Tauri version schema on every edit","Never delete files under src-tauri/icons without regenerating them (tauri icon)","Pin tauri crate and @tauri-apps/cli to matching versions","Build the frontend before cargo/tauri run"],"tags":["tauri","configuration","startup","rust"],"backgroundTag":"invalid-config-value","analyzedSha":"8600b91f4246848bac346874daa9e61c1fc5677a","analyzedAt":"2026-09-12T14:29:19.317Z","contentChangedAt":"2026-09-12T14:29:19.317Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}