aaif-goose/goose · error

Auto-updater not initialized. Please restart the application

Error message

Auto-updater not initialized. Please restart the application.

What it means

The 'check-for-updates' IPC handler in the desktop app guards against electron-updater's autoUpdater being uninitialized: currentVersion is null/undefined when the updater never got app metadata (most commonly because the app is not running from a packaged build with app-update.yml, or updater init failed earlier). The handler throws with errorType 'auto_updater_not_initialized' telemetry before calling checkForUpdates.

Source

Thrown at ui/desktop/src/utils/autoUpdater.ts:93

    try {
      log.info('=== MANUAL UPDATE CHECK INITIATED ===');
      log.info(`Manual check for updates requested at ${new Date().toISOString()}`);
      log.info(`Current version: ${currentVersion}`);
      trackUpdateCheckStarted('manual', currentVersion);

      // Reset state for new update check
      isUsingGitHubFallback = false;
      githubUpdateInfo = {};
      lastReportedProgress = 0; // Reset progress tracking

      // Ensure auto-updater is properly initialized
      if (!autoUpdater.currentVersion) {
        log.error('Auto-updater currentVersion is null/undefined');
        trackUpdateCheckCompleted('error', currentVersion, {
          usingFallback: false,
          errorType: 'auto_updater_not_initialized',
        });
        throw new Error('Auto-updater not initialized. Please restart the application.');
      }

      log.info(
        `About to check for updates with currentVersion: ${JSON.stringify(autoUpdater.currentVersion)}`
      );
      log.info(`Feed URL: ${autoUpdater.getFeedURL()}`);

      const result = await autoUpdater.checkForUpdates();
      const duration = Date.now() - checkStartTime;
      log.info(`=== MANUAL UPDATE CHECK COMPLETED in ${duration}ms ===`);
      log.info('Auto-updater checkForUpdates result:', result);

      return {
        updateInfo: result?.updateInfo,
        error: null,
      };
    } catch (error) {
      const duration = Date.now() - checkStartTime;

View on GitHub (pinned to 3810898a74)

Solutions

  1. Restart the application as the message suggests — most transient init failures clear on a fresh launch
  2. If it persists, verify you are on a packaged build: dev/unpackaged runs legitimately lack app-update.yml
  3. Reinstall or re-download the release build so resources/app-update.yml ships correctly
  4. Maintainers: confirm electron-builder publish config generated the update metadata for this platform
Defensive patterns

Strategy: try-catch

Validate before calling

// Dev-only guard before exposing the check in UI:
import { app } from 'electron';
const canCheckUpdates = app.isPackaged && Boolean(autoUpdater.currentVersion);
if (!canCheckUpdates) hideUpdateButton();

Type guard

const isUpdaterInitialized = (): boolean => autoUpdater.currentVersion != null;

Try / catch

// The IPC handler already catches and falls back to githubUpdater; renderer should
// handle { error } result shape:
const res = await window.api.checkForUpdates();
if (res.error?.includes('not initialized')) {
  // prompt app restart; do not spam retries
}

Prevention

When it happens

Trigger: Running the app via electron . / dev mode where electron-updater has no packaged resources; app-update.yml missing from resources after a broken packaging step; a build config that never calls the updater's feed setup; state corruption after resume-from-disk on some platforms.

Common situations: Developers clicking 'Check for updates' in an unpackaged dev build; CI-built artifacts missing the publish config; users on very first launch before autoUpdater finished initializing; Linux portable builds without update metadata.

Related errors


AI-assisted analysis of aaif-goose/goose@3810898a74 (2026-08-16). Data as JSON: /api/errors/625ceb5dac16ec82. Report an issue: GitHub.