Why the VS Code: Check for Updates Menu Is Missing or Disabled

The Check for Updates menu item is only displayed when the update service is in an Idle state, automatic updates are enabled in settings, and you are running a native desktop build rather than the web version.

If you are wondering why the vscode update menu is not displayed, the answer lies in a series of runtime conditions implemented in the microsoft/vscode repository. The visibility of this menu entry is tightly controlled by the update service state, configuration settings, and platform-specific UI contributions. When any of these conditions are not met, VS Code: deliberately hides the option to prevent user confusion.

Runtime Conditions That Control Menu Visibility

The menu entry is generated by the update-related workbench contributions and filtered by several guards defined in the source code.

Update Service State Must Be Idle

In src/vs/workbench/contrib/update/browser/update.ts, the function getUpdateMenuItems creates the menu entry only when the update service state is Idle. If an update check is already in progress, the menu item is suppressed.

Automatic Updates Must Be Enabled

The setting "update.mode" (defined in src/vs/platform/update/common/update.config.contribution.ts) controls whether the update service initializes. If you set "update.mode": "none", the service never enters the Idle state, causing the check for updates menu to be missing entirely.

Native Desktop Build Required

The native menubar logic in src/vs/platform/menubar/electron-main/menubar.ts checks isWeb. When running VS Code: for Web (isWeb === true), the native menu system is not available, so the entry is hidden.

Context Key Precondition

In src/vs/workbench/contrib/update/browser/update.contribution.ts, the action is registered with:

precondition: CONTEXT_UPDATE_STATE.isEqualTo(StateType.Idle)

If the context key value is not Idle (for example, when an update is already available or being downloaded), the action is disabled or hidden.

Platform-Specific Menu Placement

The location of the menu item varies by operating system, which can create the impression that the vscode update menu is not displayed if you are looking in the wrong place.

  • macOS: The entry is injected into the Application menu (labeled Code or Visual Studio Code:) under the About section as Check for Updates…. This is handled in menubar.ts.
  • Windows/Linux: The entry appears under the Help menu, contributed by update.contribution.ts.

Common Scenarios Where the Menu Disappears

Here are the typical situations where you will find the check for updates menu missing:

  1. Automatic updates are disabled – Setting "update.mode": "none" permanently disables the update service, preventing the menu from ever appearing.
  2. Update already in progress – If VS Code: is currently checking for updates, the menu shows a disabled "Checking for Updates…" entry instead of the active command.
  3. Running VS Code: in a browser – The Web build does not include native menus, so the command is only accessible via the Command Palette (Ctrl+Shift+PCheck for Updates…).
  4. Looking in the wrong menu – On macOS, users may look under Help instead of the Application menu, or vice versa on Windows/Linux.

How to Manually Check for Updates

If the menu is hidden, you can still trigger the update check programmatically or via the command palette.

Using the Command Palette

Press Ctrl+Shift+P (or Cmd+Shift+P on macOS) and type Check for Updates…. This invokes the update.check command directly, bypassing the menu visibility logic.

From an Extension

You can programmatically trigger the same command using the ICommandService:

import { ICommandService } from 'vs/platform/commands/common/commands';

function triggerUpdateCheck(accessor: ServicesAccessor) {
    const commandService = accessor.get(ICommandService);
    // Executes the same command that the menu entry would run
    return commandService.executeCommand('update.check');
}

Source: Registration of the command in src/vs/workbench/contrib/update/browser/update.ts (line 531).

Querying the Current Update State

For debugging purposes, you can inspect the update service state to see why the menu might be suppressed:

import { IUpdateService, StateType } from 'vs/platform/update/common/update';

function logUpdateState(accessor: ServicesAccessor) {
    const updateService = accessor.get(IUpdateService);
    const state = updateService.state;
    console.log(`Update state: ${StateType[state.type]}`);
}

Source: The updateService.state object is used in menubar.ts and update.contribution.ts to decide menu visibility.

Enabling the Menu via Settings

To ensure the menu appears, verify your settings.json includes:

// settings.json
{
    "update.mode": "default" // or "start"/"manual" to keep background checks
}

Source: The setting definition lives in src/vs/platform/update/common/update.config.contribution.ts (lines 19-31). Changing this value makes the Idle context key reachable, causing the menu to appear.

Summary

  • The Check for Updates menu is conditional on the update service being in an Idle state, configured in src/vs/workbench/contrib/update/browser/update.ts.
  • Setting "update.mode": "none" permanently hides the menu by preventing the service from initializing.
  • The menu only appears in native desktop builds (isWeb === false), not in the browser version.
  • On macOS, look under the Application menu; on Windows/Linux, look under Help.
  • You can always trigger updates via the Command Palette (Ctrl+Shift+PCheck for Updates…) or by executing the update.check command programmatically.

Frequently Asked Questions

Why is the Check for Updates menu missing in VS Code:?

The menu is hidden when the update service is not in an Idle state, which occurs if automatic updates are disabled ("update.mode": "none"), an update check is already in progress, or you are running the web version of VS Code:. The visibility is controlled by context keys in src/vs/workbench/contrib/update/browser/update.contribution.ts.

How do I enable the Check for Updates menu in VS Code:?

Open your settings.json and set "update.mode" to "default", "start", or "manual" instead of "none". This allows the update service to reach the Idle state, which triggers the CONTEXT_UPDATE_STATE context key and renders the menu entry in the native menubar.

Does VS Code: for Web have a Check for Updates menu?

No. The web build (isWeb === true) does not include native menubar integration, so the Check for Updates entry is never displayed in the UI. However, you can still access the command through the Command Palette (Ctrl+Shift+P) if the update service is available in your specific web deployment.

Where is the Check for Updates menu located on macOS versus Windows?

On macOS, the entry appears in the Application menu (labeled Code or Visual Studio Code:) under the About section. On Windows and Linux, it is located in the Help menu. This platform-specific placement is handled in src/vs/platform/menubar/electron-main/menubar.ts for macOS and src/vs/workbench/contrib/update/browser/update.contribution.ts for other platforms.

Have a question about this repo?

These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →