janhq/jan · warning · UpdateError
All endpoints failed
Error message
All endpoints failed
What it means
The AllEndpointsFailed variant of UpdateError is returned when every configured update endpoint in the list returned an error (RequestFailed, ParseError, or InvalidResponse). The check_for_updates method iterates endpoints, trying the first with HMAC signing and the rest without, and returns this error only after all have been exhausted. The last individual error is logged per-endpoint but the final return is AllEndpointsFailed.
Source
Thrown at src-tauri/src/core/updater/custom_updater.rs:37
/// - In CI: Set JAN_SIGNING_KEY environment variable at build time
/// - In local dev: Falls back to a test key
const SECRET_KEY: &str = match option_env!("JAN_SIGNING_KEY") {
Some(key) => key,
None => "local-dev-test-key-not-for-production",
};
/// Timeout for HTTP requests
const REQUEST_TIMEOUT_SECS: u64 = 30;
#[derive(Debug, Error)]
pub enum UpdateError {
#[error("HTTP request failed: {0}")]
RequestFailed(#[from] reqwest::Error),
#[error("Failed to parse update response: {0}")]
ParseError(String),
#[error("All endpoints failed")]
AllEndpointsFailed,
#[error("Invalid response from server: {0}")]
InvalidResponse(String),
#[error("No endpoints configured")]
NoEndpointsConfigured,
}
/// Update information returned by the update check endpoint
/// Compatible with Tauri's updater format
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct UpdateInfo {
pub version: String,
#[serde(default)]
pub notes: Option<String>,
#[serde(default)]
pub pub_date: Option<String>,View on GitHub (pinned to fad3f12a14)
Solutions
- Check the per-endpoint warning logs to see which specific error each endpoint returned.
- Verify at least one endpoint is reachable: `curl -v <endpoint-url>`.
- Check overall network connectivity.
- Review tauri.conf.json plugins.updater.endpoints for stale URLs.
Example fix
// enable debug logging to see per-endpoint errors RUST_LOG=jan_core::updater=debug ./jan // then check logs for: "Endpoint <url> failed: <error>"
Defensive patterns
Strategy: fallback
Validate before calling
// Before update check, verify at least one endpoint is configured
if endpoints.is_empty() {
log::info!("No update endpoints configured; skipping update check");
return Ok(None);
}
// Optionally, probe endpoint reachability
let reachable = endpoints.iter().filter(|u| reqwest::Client::new().head(u).send().await.is_ok()).count();
if reachable == 0 {
log::warn!("No update endpoints are currently reachable");
} Try / catch
match updater.check_for_updates(endpoints, nonce, version).await {
Ok(Some(info)) => { /* offer update */ }
Ok(None) => { /* up to date */ }
Err(UpdateError::AllEndpointsFailed) => {
log::info!("All update endpoints failed; skipping update check silently");
// Non-fatal — the app is still usable
}
Err(other) => { log::warn!("Update check error: {other}"); }
} Prevention
- Treat AllEndpointsFailed as non-fatal — update checks are best-effort.
- Enable per-endpoint logging (RUST_LOG=jan_core::updater=debug) to see individual failures.
- Configure at least one fallback endpoint for resilience.
- Verify endpoint URLs in tauri.conf.json are current.
When it happens
Trigger: All endpoints are down or unreachable (total network outage). All endpoints return non-2xx status codes. All endpoints return malformed responses. The primary signed endpoint rejects the HMAC signature AND all fallback endpoints also fail independently.
Common situations: Complete network outage during an update check. All endpoints decommissioned during a migration. Corporate firewall blocking all jan.ai domains. System clock wildly wrong causing all TLS certs to appear invalid. DNS server failure affecting all endpoints.
Related errors
- HTTP request failed: {0}
- No endpoints configured
- Checksum mismatch for ${name}; the download was corrupt or t
- Failed to fetch supported backends: ${error instanceof Error
- API request failed with status ${response.status}: ${JSON.st
AI-assisted analysis of janhq/jan@fad3f12a14 (2026-08-12).
Data as JSON: /api/errors/0c3626749742debe.
Report an issue: GitHub.