t8y2/dbx · critical

Failed to install rustls crypto provider

Error message

Failed to install rustls crypto provider

What it means

rustls requires a cryptography provider for TLS primitives (key exchange, signing, RNG). Since rustls 0.23 no default provider is built in, so the app explicitly installs the aws-lc-rs provider as the process-wide default. The panic fires when install_default() fails, which happens only when a default provider is already installed or another process-wide error occurs.

Source

Thrown at src-tauri/src/lib.rs:1393

    }

    #[test]
    fn treats_virtual_and_2d_drm_drivers_as_software_rendering() {
        assert!(linux_drm_driver_is_software_only(Some("virtio-pci")));
        assert!(linux_drm_driver_is_software_only(Some("virtio_gpu")));
        assert!(linux_drm_driver_is_software_only(Some("qxl")));
        assert!(linux_drm_driver_is_software_only(Some("bochs")));
        assert!(linux_drm_driver_is_software_only(None));
        assert!(!linux_drm_driver_is_software_only(Some("amdgpu")));
        assert!(!linux_drm_driver_is_software_only(Some("i915")));
        assert!(!linux_drm_driver_is_software_only(Some("nouveau")));
    }
}

#[cfg_attr(mobile, tauri::mobile_entry_point)]
pub fn run() {
    startup_recovery::initialize();
    rustls::crypto::aws_lc_rs::default_provider().install_default().expect("Failed to install rustls crypto provider");
    append_startup_probe("runtime prerequisites configured");
    #[cfg(target_os = "linux")]
    apply_linux_webkit_rendering_workarounds();

    let startup_begin = Instant::now();

    let builder = tauri::Builder::default()
        .plugin(tauri_plugin_deep_link::init())
        .plugin(tauri_plugin_clipboard_manager::init())
        .plugin(tauri_plugin_dialog::init())
        .plugin(tauri_plugin_fs::init());

    let builder = if should_enable_single_instance(cfg!(debug_assertions)) {
        builder.plugin(tauri_plugin_single_instance::init(|app, args, cwd| {
            let app_open_requested = args.iter().any(|arg| commands::deep_link::is_app_open_deep_link(arg));
            let links = commands::deep_link::connection_deep_links_from_args(args.clone());
            open_connection_deep_links(app, links);
            let ai_config_links = commands::deep_link::ai_config_deep_links_from_args(args.clone());

View on GitHub (pinned to c0390bff16)

Solutions

  1. Check whether install_default() returned Err(already installed) and treat that as success: use `provider.install_default().ok();` or match on the error.
  2. Ensure install_default is called exactly once at process startup, before any TLS-capable code runs (e.g. guard with a OnceLock/Once).
  3. Audit dependencies for crates that install a competing rustls provider at import/init time and centralize provider selection in one place.

Example fix

// before
rustls::crypto::aws_lc_rs::default_provider().install_default().expect("Failed to install rustls crypto provider");
// after
let _ = rustls::crypto::aws_lc_rs::default_provider().install_default();
Defensive patterns

Strategy: try-catch

Validate before calling

// Rust: idempotent provider install
static PROVIDER: std::sync::Once = std::sync::Once::new();
PROVIDER.call_once(|| {
    let _ = rustls::crypto::aws_lc_rs::default_provider().install_default();
});

Type guard

fn provider_installed() -> bool {
    matches!(
        rustls::crypto::aws_lc_rs::default_provider().install_default(),
        Err(rustls::crypto::InstallCryptoProviderError::AlreadyInstalled) | Ok(())
    )
}

Try / catch

match rustls::crypto::aws_lc_rs::default_provider().install_default() {
    Ok(()) => {}
    Err(e) => eprintln!("rustls provider already installed or failed: {e:?}"),
}

Prevention

When it happens

Trigger: Calling rustls::crypto::aws_lc_rs::default_provider().install_default() in src-tauri/src/lib.rs:1393 after another provider (e.g. ring) was already installed via install_default earlier in the same process; also occurs if run() is invoked twice in-process.

Common situations: Duplicate startup paths in tests or hot-reload setups calling run() multiple times; a dependency or plugin that installs its own rustls provider first; platform builds where aws_lc_rs and another provider are both present.

Related errors


AI-assisted analysis of t8y2/dbx@c0390bff16 (2026-09-05). Data as JSON: /api/errors/98522382301f3486. Report an issue: GitHub.