Molunerfinn/PicGo · warning
Failed to check latest version
Error message
Failed to check latest version
What it means
checkLatestVersion throws when the main-process GET_LATEST_VERSION RPC fails. The main handler (src/main/events/rpc/routes/version.ts:8) calls getLatestVersion(type), which performs an outbound HTTPS request to the update feed; a thrown error there is wrapped by fail(e) in rpcInvokeHandler and surfaced in the renderer as this Error. The literal message is the fallback used when result.error is empty.
Source
Thrown at src/renderer/adapters/settings.ts:41
openConfigFile () {
sendToMain(PICGO_OPEN_FILE, 'data.json')
},
openLogFile () {
sendToMain(PICGO_OPEN_FILE, 'picgo.log')
},
openExternalUrl (url: string) {
openURL(url)
},
updateServer () {
sendToMain('updateServer')
},
updateCustomLink () {
sendToMain('updateCustomLink')
},
async checkLatestVersion (includeBeta: boolean) {
const result = await invokeRPC<string>(IRPCActionType.GET_LATEST_VERSION, includeBeta)
if (!result.success) {
throw new Error(result.error || 'Failed to check latest version')
}
return result.data
},
async loadShortcuts () {
const config = await getConfig<IShortKeyConfigs>('settings.shortKey')
return config || {}
},
toggleShortcutModifiedMode (value: boolean) {
sendToMain(TOGGLE_SHORTKEY_MODIFIED_MODE, value)
},
toggleShortcutEnabled (item: IShortKeyConfig) {
sendToMain('bindOrUnbindShortKey', item, item.from)
},
updateShortcut (item: IShortKeyConfig, oldKey: string) {
return new Promise<boolean>((resolve, reject) => {
const cleanup = ipc.once('updateShortKeyResponse', (result: boolean) => {
resolve(result)View on GitHub (pinned to 07ec7068a5)
Solutions
- Check network connectivity and retry; the error is usually transient
- Inspect result.error (log it before throwing) to distinguish network failure from rate limiting (403) vs 404
- Verify any configured proxy in PicGo settings is reachable and correct
- Check the update-feed URL/host used by getLatestVersion is not blocked in your environment
Example fix
// before
const version = await settingsAdapter.checkLatestVersion(includeBeta)
// after
let version: string | null = null
try {
version = await settingsAdapter.checkLatestVersion(includeBeta)
} catch (e) {
console.warn('Update check skipped:', (e as Error).message)
} Defensive patterns
Strategy: try-catch
Validate before calling
if (typeof navigator.onLine === 'boolean' && !navigator.onLine) {
return // skip update check while offline
} Type guard
function isRPCSuccess<T>(r: { success: boolean; data?: T }): r is { success: true; data: T } {
return r.success === true
} Try / catch
try {
const version = await checkLatestVersion(includeBeta)
} catch (e) {
logger.warn((e as Error).message)
// degrade gracefully: show 'unknown' version instead of failing the UI
} Prevention
- Treat update checks as best-effort; never let them block app startup
- Retry with backoff or schedule the next check instead of surfacing an error
- Check for corporate proxies/rate limits when the error recurs
- Log result.error from the RPC envelope to distinguish offline vs rate-limited
When it happens
Trigger: Calling checkLatestVersion(includeBeta) when the main process cannot reach the update server: network offline, DNS failure, proxy misconfigured, GitHub API rate-limit/HTTP error, or an unhandled exception inside getLatestVersion.
Common situations: Corporate proxy or firewall blocking api.github.com; GitHub API rate limiting (403) on shared IPs; offline/bad Wi-Fi; IPv6 issues; user enabled a custom mirror that is down.
Related errors
- Setting window not found
- Toolbox fix failed
- Failed to get window state
- Failed to load provider configs
- Failed to select provider config
AI-assisted analysis of Molunerfinn/PicGo@07ec7068a5 (2026-08-30).
Data as JSON: /api/errors/101fe67983b59cfb.
Report an issue: GitHub.