t8y2/dbx · critical
Failed to resolve app data dir
Error message
Failed to resolve app data dir
What it means
On Tauri startup the app resolves the platform-specific per-user application data directory via app.path().app_data_dir(). This fails when the underlying directory resolver cannot determine a valid path (e.g. missing XDG/HOME environment or OS API failure). The code converts the error to a string and panics with this message.
Source
Thrown at src-tauri/src/lib.rs:1494
}
})
.setup(move |app| {
let setup_start = Instant::now();
eprintln!("[STARTUP] plugins registered in {:?}", startup_begin.elapsed());
append_startup_probe(format!("setup entered after {:?}", startup_begin.elapsed()));
if should_show_main_window_before_setup_tasks() {
prepare_main_window_for_display(app.handle());
show_main_window(app.handle());
append_startup_probe(format!(
"early main window show requested; {}",
main_window_probe_state(app.handle())
));
}
append_startup_probe("resolving app data dir");
let default_data_dir =
app.path().app_data_dir().map_err(|e| e.to_string()).expect("Failed to resolve app data dir");
let data_dir_resolution = data_dir::resolve_data_dir_with_mode(default_data_dir);
let data_dir = data_dir_resolution.data_dir.clone();
std::fs::create_dir_all(&data_dir).expect("Failed to create data dir");
let data_dir_mode = startup_data_dir_mode(&data_dir_resolution.mode);
append_startup_probe(format!("data dir ready mode={data_dir_mode}"));
let alternative_data_dir = data_dir::alternative_data_dir(&data_dir_resolution);
match maybe_import_user_data_db(&data_dir, alternative_data_dir.as_deref()) {
Ok(result) => eprintln!("[STARTUP] data db fallback import: {result:?}"),
Err(err) => eprintln!("[STARTUP] data db fallback import failed: {err}"),
}
let db_path = data_dir.join("dbx.db");
let t = Instant::now();
append_startup_probe(format!("opening storage file=dbx.db data_dir_mode={data_dir_mode}"));
let storage = tauri::async_runtime::block_on(async {
let s = Storage::open(&db_path).await.expect("Failed to open storage");
eprintln!("[STARTUP] Storage::open in {:?}", t.elapsed());
append_startup_probe(format!("storage opened in {:?}", t.elapsed()));View on GitHub (pinned to c0390bff16)
Solutions
- Ensure the process runs as a user with a valid home directory (set HOME=/path on Linux/macOS when running headless).
- Handle the Result from app_data_dir() instead of expect(): fall back to a configurable or temp directory.
- Verify platform config-dir APIs are accessible (XDG_CONFIG_HOME, Windows %APPDATA%) and not blocked by sandbox policies.
Example fix
// before
let default_data_dir = app.path().app_data_dir().map_err(|e| e.to_string()).expect("Failed to resolve app data dir");
// after
let default_data_dir = app.path().app_data_dir().unwrap_or_else(|_| std::env::temp_dir().join("dbx")); Defensive patterns
Strategy: fallback
Validate before calling
// Rust: sanity-check the environment before startup
fn has_home() -> bool {
std::env::var("HOME").map(|h| !h.is_empty()).unwrap_or(false)
} Try / catch
let dir = app.path().app_data_dir().unwrap_or_else(|e| {
eprintln!("app_data_dir failed: {e}");
std::env::temp_dir().join("dbx")
}); Prevention
- Verify HOME/XDG env vars exist when launching headless (services, CI, containers).
- Never expect() on path resolution; always provide a fallback directory.
- Document the env requirements for sandboxed/Flatpak deployments.
When it happens
Trigger: Calling app.path().app_data_dir() in the Tauri setup hook (lib.rs:1494) when the OS returns an error: HOME unset or invalid on Linux/macOS, corrupted user profile on Windows, or running in a sandbox/container without a user home.
Common situations: Launching the app from a systemd service or CI runner with no HOME; running inside a container as a user with no home directory; corrupted registry/profile data on Windows; AppArmor/Flatpak restrictions on config dirs.
Related errors
- error while building tauri application: {error}
- Failed to create data directory
- Failed to create data dir
- DBX_PUBLIC_BASE_PATH contains invalid characters
- Failed to install rustls crypto provider
AI-assisted analysis of t8y2/dbx@c0390bff16 (2026-09-05).
Data as JSON: /api/errors/4aa4ec5d36b381de.
Report an issue: GitHub.