spacedriveapp/spacedrive · error

Failed to create HTTP client

Error message

Failed to create HTTP client

What it means

main builds a reqwest-backed HTTP client (gpui ReqwestClient::user_agent) for image loading and expects construction to succeed. user_agent returns Err only when the underlying reqwest Client cannot be built, essentially always a TLS backend initialization failure or process resource exhaustion at startup. The expect converts that rare condition into an immediate panic.

Solutions

  1. Rebuild with the crate's default feature set (rustls) and unchanged dependencies
  2. Check process limits (ulimit -n) and memory if construction fails at startup
  3. If reproducible with default features, capture the inner error before the expect and report it as a build/toolchain issue

Example fix

// before: expect hides the underlying cause
ReqwestClient::user_agent("spacedrive-gpui").expect("Failed to create HTTP client");

// after: surface the inner error on failure
let http_client = ReqwestClient::user_agent("spacedrive-gpui")
    .unwrap_or_else(|e| panic!("Failed to create HTTP client: {e}"));
Defensive patterns

Strategy: fallback

Try / catch

// Construction happens once at startup; on failure print the inner error and exit non-zero
let client = match ReqwestClient::user_agent("spacedrive-gpui") {
    Ok(c) => Arc::new(c),
    Err(e) => {
        eprintln!("HTTP client construction failed: {e}");
        std::process::exit(1);
    }
};

Prevention

When it happens

Trigger: TLS backend init failure (broken rustls/native-tls feature mix in the build); fd/memory exhaustion at process start; exotic sandboxed environments blocking client construction.

Common situations: Custom build with TLS features stripped or conflicting; almost never seen in stock builds.

Related errors


AI-assisted analysis of spacedriveapp/spacedrive@6dfeccf211 (2026-08-16). Data as JSON: /api/errors/51d42c9a7fab9b59. Report an issue: GitHub.

Appendix: source

Thrown at apps/gpui-photo-grid/src/main.rs:29

    // Get configuration from environment
    let socket_addr = env::var("SD_SOCKET_ADDR").unwrap_or_else(|_| "127.0.0.1:6969".to_string());

    let http_url = env::var("SD_HTTP_URL").unwrap_or_else(|_e| "http://127.0.0.1:56851".to_string());

    let library_id = env::var("SD_LIBRARY_ID").expect("SD_LIBRARY_ID environment variable must be set");

    let initial_path = env::var("SD_INITIAL_PATH").unwrap_or_else(|_e| "/Users/jamespine/Desktop".to_string());

    println!("Starting GPUI Photo Grid");
    println!("  Socket: {}", socket_addr);
    println!("  HTTP: {}", http_url);
    println!("  Library: {}", library_id);
    println!("  Path: {}", initial_path);

    // Create HTTP client for image loading
    let http_client = Arc::new(
        reqwest_client::ReqwestClient::user_agent("spacedrive-gpui")
            .expect("Failed to create HTTP client"),
    );

    Application::new()
        .with_http_client(http_client)
        .run(move |cx: &mut App| {
            cx.activate(true);

            cx.open_window(
                WindowOptions {
                    window_bounds: Some(WindowBounds::Windowed(Bounds::centered(
                        None,
                        size(px(1200.0), px(800.0)),
                        cx,
                    ))),
                    titlebar: Some(TitlebarOptions {
                        title: Some("Spacedrive Media Grid".into()),
                        appears_transparent: false,
                        ..Default::default()

View on GitHub (pinned to 6dfeccf211)