Zackriya-Solutions/meetily · error · anyhow::Error

Failed to access onboarding store: {}

Error message

Failed to access onboarding store: {}

What it means

app.store("onboarding-status.json") returned an error while getting/creating the Tauri store in save_onboarding_status. In Tauri 2 this fails when the store plugin is not registered on the builder, or when the store file cannot be created/opened (permissions, disk, corrupt JSON).

Source

Thrown at frontend/src-tauri/src/onboarding.rs:89

    } else {
        info!("No stored onboarding status found, using defaults");
        OnboardingStatus::default()
    };

    Ok(status)
}

/// Save onboarding status to store
pub async fn save_onboarding_status<R: Runtime>(
    app: &AppHandle<R>,
    status: &OnboardingStatus,
) -> Result<()> {
    info!("Saving onboarding status: step={}, completed={}",
          status.current_step, status.completed);

    // Get or create store
    let store = app.store("onboarding-status.json")
        .map_err(|e| anyhow::anyhow!("Failed to access onboarding store: {}", e))?;

    // Update last_updated timestamp
    let mut status = status.clone();
    status.last_updated = chrono::Utc::now().to_rfc3339();

    // Serialize status to JSON value
    let status_value = serde_json::to_value(&status)
        .map_err(|e| anyhow::anyhow!("Failed to serialize onboarding status: {}", e))?;

    // Save to store
    store.set("status", status_value);

    // Persist to disk
    store.save()
        .map_err(|e| anyhow::anyhow!("Failed to save onboarding store to disk: {}", e))?;

    info!("Successfully persisted onboarding status to disk");
    Ok(())

View on GitHub (pinned to 0281737d87)

Solutions

  1. Register the store plugin in the Tauri builder: .plugin(tauri_plugin_store::Builder::new().build())
  2. Check the app config dir is writable and has space
  3. Delete/rename a corrupted onboarding-status.json so it is recreated
  4. Ensure a single app instance (or accept last-writer-wins) for store files
Defensive patterns

Strategy: try-catch

Try / catch

match app.store("onboarding-status.json") {
    Ok(store) => { /* set + save */ }
    Err(e) => {
        error!("Onboarding store unavailable: {e}");
        // keep onboarding state in memory; persist on next successful open
    }
}

Prevention

When it happens

Trigger: Calling save_onboarding_status in a build where tauri_plugin_store was never registered via .plugin(...); the app config directory is read-only or full; onboarding-status.json exists but is corrupted so opening it fails.

Common situations: Adding onboarding code without wiring the store plugin; packaged app writing to a sandboxed/protected dir; two instances racing on the same store file.

Related errors


AI-assisted analysis of Zackriya-Solutions/meetily@0281737d87 (2026-08-16). Data as JSON: /api/errors/93a6a4f6bceaeb10. Report an issue: GitHub.