{"record":{"id":"98522382301f3486","repo":"t8y2/dbx","slug":"failed-to-install-rustls-crypto-provider-985223","errorCode":null,"errorMessage":"Failed to install rustls crypto provider","messagePattern":"Failed to install rustls crypto provider","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"critical","filePath":"src-tauri/src/lib.rs","lineNumber":1393,"sourceCode":"    }\n\n    #[test]\n    fn treats_virtual_and_2d_drm_drivers_as_software_rendering() {\n        assert!(linux_drm_driver_is_software_only(Some(\"virtio-pci\")));\n        assert!(linux_drm_driver_is_software_only(Some(\"virtio_gpu\")));\n        assert!(linux_drm_driver_is_software_only(Some(\"qxl\")));\n        assert!(linux_drm_driver_is_software_only(Some(\"bochs\")));\n        assert!(linux_drm_driver_is_software_only(None));\n        assert!(!linux_drm_driver_is_software_only(Some(\"amdgpu\")));\n        assert!(!linux_drm_driver_is_software_only(Some(\"i915\")));\n        assert!(!linux_drm_driver_is_software_only(Some(\"nouveau\")));\n    }\n}\n\n#[cfg_attr(mobile, tauri::mobile_entry_point)]\npub fn run() {\n    startup_recovery::initialize();\n    rustls::crypto::aws_lc_rs::default_provider().install_default().expect(\"Failed to install rustls crypto provider\");\n    append_startup_probe(\"runtime prerequisites configured\");\n    #[cfg(target_os = \"linux\")]\n    apply_linux_webkit_rendering_workarounds();\n\n    let startup_begin = Instant::now();\n\n    let builder = tauri::Builder::default()\n        .plugin(tauri_plugin_deep_link::init())\n        .plugin(tauri_plugin_clipboard_manager::init())\n        .plugin(tauri_plugin_dialog::init())\n        .plugin(tauri_plugin_fs::init());\n\n    let builder = if should_enable_single_instance(cfg!(debug_assertions)) {\n        builder.plugin(tauri_plugin_single_instance::init(|app, args, cwd| {\n            let app_open_requested = args.iter().any(|arg| commands::deep_link::is_app_open_deep_link(arg));\n            let links = commands::deep_link::connection_deep_links_from_args(args.clone());\n            open_connection_deep_links(app, links);\n            let ai_config_links = commands::deep_link::ai_config_deep_links_from_args(args.clone());","sourceCodeStart":1375,"sourceCodeEnd":1411,"githubUrl":"https://github.com/t8y2/dbx/blob/c0390bff16418b651f4728520d99adf8ce48829a/src-tauri/src/lib.rs#L1375-L1411","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","solutions":["Check whether install_default() returned Err(already installed) and treat that as success: use `provider.install_default().ok();` or match on the error.","Ensure install_default is called exactly once at process startup, before any TLS-capable code runs (e.g. guard with a OnceLock/Once).","Audit dependencies for crates that install a competing rustls provider at import/init time and centralize provider selection in one place."],"exampleFix":"// before\nrustls::crypto::aws_lc_rs::default_provider().install_default().expect(\"Failed to install rustls crypto provider\");\n// after\nlet _ = rustls::crypto::aws_lc_rs::default_provider().install_default();","handlingStrategy":"try-catch","validationCode":"// Rust: idempotent provider install\nstatic PROVIDER: std::sync::Once = std::sync::Once::new();\nPROVIDER.call_once(|| {\n    let _ = rustls::crypto::aws_lc_rs::default_provider().install_default();\n});","typeGuard":"fn provider_installed() -> bool {\n    matches!(\n        rustls::crypto::aws_lc_rs::default_provider().install_default(),\n        Err(rustls::crypto::InstallCryptoProviderError::AlreadyInstalled) | Ok(())\n    )\n}","tryCatchPattern":"match rustls::crypto::aws_lc_rs::default_provider().install_default() {\n    Ok(()) => {}\n    Err(e) => eprintln!(\"rustls provider already installed or failed: {e:?}\"),\n}","preventionTips":["Install the provider exactly once via a Once/OnceLock at process entry.","Treat AlreadyInstalled as success instead of panicking.","Audit dependencies for code that installs its own rustls provider."],"tags":["rust","rustls","tls","startup"],"backgroundTag":"rustls-crypto-provider-already-installed","analyzedSha":"c0390bff16418b651f4728520d99adf8ce48829a","analyzedAt":"2026-09-05T23:05:10.900Z","contentChangedAt":"2026-09-05T23:05:10.900Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}