janhq/jan · warning · UpdateError
No endpoints configured
Error message
No endpoints configured
What it means
The NoEndpointsConfigured variant of UpdateError is returned immediately when the endpoints list passed to check_for_updates is empty. This means the tauri.conf.json plugins.updater.endpoints array is missing, empty, or was not loaded. Unlike other variants, this is a configuration error, not a network error.
Source
Thrown at src-tauri/src/core/updater/custom_updater.rs:43
/// 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>,
#[serde(default)]
pub platforms: Option<serde_json::Value>,
/// URL to download the update
#[serde(default)]
pub url: Option<String>,
/// Signature for verifying the updateView on GitHub (pinned to fad3f12a14)
Solutions
- Add plugins.updater.endpoints to tauri.conf.json with at least one URL.
- Verify the JSON structure matches the Tauri updater plugin schema.
- Ensure the updater plugin is enabled in the Tauri features list.
- Check that the config file is not corrupted.
Example fix
// tauri.conf.json — before
{
"plugins": {}
}
// after
{
"plugins": {
"updater": {
"endpoints": [
"https://apps.jan.ai/update-check",
"https://fallback.jan.ai/update"
]
}
}
} Defensive patterns
Strategy: validation
Validate before calling
// At build/startup time, verify endpoints are configured
fn verify_updater_config() -> Result<(), String> {
let config = tauri::Config::from_file("tauri.conf.json")
.map_err(|e| format!("Cannot read config: {e}"))?;
let endpoints = config.plugins
.get("updater")
.and_then(|u| u.get("endpoints"))
.and_then(|e| e.as_array());
match endpoints {
Some(arr) if !arr.is_empty() => Ok(()),
_ => Err("plugins.updater.endpoints is missing or empty".into()),
}
} Type guard
function hasUpdaterEndpoints(config: unknown): boolean {
const endpoints = (config as any)?.plugins?.updater?.endpoints;
return Array.isArray(endpoints) && endpoints.length > 0;
} Try / catch
Err(UpdateError::NoEndpointsConfigured) => {
log::info!("No update endpoints configured; update checks are disabled.");
// Non-fatal — silently skip
} Prevention
- Add a build-time check that tauri.conf.json has a non-empty endpoints array.
- Treat NoEndpointsConfigured as non-fatal — skip update checks silently.
- Document the required config structure in the project README.
- Validate the config in CI before releasing.
When it happens
Trigger: tauri.conf.json has no plugins.updater.endpoints key. The endpoints array exists but is empty []. The config file failed to load and an empty default was used. The updater plugin was not included in the Tauri build features.
Common situations: Custom build of Jan that omitted the updater config. Misconfigured tauri.conf.json during development. Plugin disabled at compile time. Config file corrupted or replaced with one lacking the endpoints section.
Related errors
- All endpoints failed
- Critical settings "llamacpp_version" / "llamacpp_backend" no
- HTTP request failed: {0}
- Failed to parse update response: {0}
- Invalid response from server: {0}
AI-assisted analysis of janhq/jan@fad3f12a14 (2026-08-12).
Data as JSON: /api/errors/5089a438bc7563ba.
Report an issue: GitHub.