cjpais/Handy · critical
error while building tauri application
Error message
error while building tauri application
What it means
Panic when tauri::Builder::build(generate_context!()) returns Err. Build validates the compiled-in context from tauri.conf.json plus registered plugins and setup state — failures include missing/invalid configuration (window definitions, bundle identifier), missing frontend dist assets referenced by the context, missing icons/capabilities files, or plugin/state setup that fails validation (e.g. state double-managed, capabilities referencing unknown windows).
Solutions
- Run with RUST_BACKTRACE=1 — the underlying io::Error names the failing file/config; read it before changing anything
- Rebuild through the documented pipeline: bun install, bun run build, then bun run tauri dev|build from the repo root so dist/ and resources exist
- After a Tauri upgrade, run the migration steps for tauri.conf.json and re-verify icons and capabilities files exist
- Validate that every capability file references existing windows and every configured asset path exists
Example fix
// before
.build(tauri::generate_context!())
.expect("error while building tauri application")
// after — surface the underlying cause instead of a bare message
.build(tauri::generate_context!())
.unwrap_or_else(|e| panic!("error while building tauri application: {e}")) Defensive patterns
Strategy: validation
Validate before calling
# CI pre-flight: everything the generated context embeds must exist test -d dist || (echo "frontend dist missing" && exit 1) python3 -m json.tool src-tauri/tauri.conf.json > /dev/null || exit 1 ls src-tauri/icons/* > /dev/null || exit 1 ls src-tauri/capabilities/* > /dev/null || exit 1
Prevention
- Always build through the documented pipeline (bun run build before tauri build/dev) so dist/ exists
- Add CI checks that fail the release when icons, capabilities, or config validation are missing/invalid
- Pin the Tauri version and run its config migration immediately on upgrade instead of deferring
When it happens
Trigger: Application launch (run()) whenever context validation or plugin setup fails: frontendDist assets absent, tauri.conf.json schema drift after a Tauri upgrade, deleted icons or capability files still referenced, or misconfigured window/capability wiring.
Common situations: Building/bundling without the frontend build output present; upgrading Tauri without migrating tauri.conf.json; deleting icons/ or capabilities/ after they were referenced; dev scripts running from the wrong working directory so relative resource paths resolve incorrectly.
Related errors
- Failed to initialize history manager
- Failed to initialize model manager
- Failed to initialize recording manager
- Failed to initialize transcription manager
- Device index ( ) cannot host a model
AI-assisted analysis of cjpais/Handy@ba10ce1943 (2026-08-17).
Data as JSON: /api/errors/a6a8fd14c1249ca1.
Report an issue: GitHub.
Appendix: source
Thrown at src-tauri/src/lib.rs:1077
#[cfg(target_os = "macos")]
{
let settings = get_settings(window.app_handle());
let tray_visible =
settings.show_tray_icon && !window.app_handle().state::<CliArgs>().no_tray;
if tray_visible {
// Tray is available: hide the dock icon, app lives in the tray
let res = window
.app_handle()
.set_activation_policy(tauri::ActivationPolicy::Accessory);
if let Err(e) = res {
log::error!("Failed to set activation policy: {}", e);
}
}
// No tray: keep the dock icon visible so the user can reopen
}
}
tauri::WindowEvent::ThemeChanged(theme) => {
log::info!("Theme changed to: {:?}", theme);
// Re-apply the current tray state with the new theme's icon set
utils::refresh_tray_icon(window.app_handle());
}
_ => {}
})
.invoke_handler(invoke_handler)
.build(tauri::generate_context!())
.expect("error while building tauri application");
// Must sit between build() and run(): see the doc comment.
#[cfg(target_os = "macos")]
apply_startup_activation_policy(&mut app, headless_mode);
app.run(|app, event| match &event {
#[cfg(target_os = "macos")]
tauri::RunEvent::Reopen { .. } => {
// Fired when the already-running bundle is launched again fromView on GitHub (pinned to ba10ce1943)