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

> Discover why the VS Code check for updates menu is missing or disabled. Learn about the conditions required for the update service and automatic updates to display this essential feature.

- Repository: [Microsoft/vscode](https://github.com/microsoft/vscode)
- Tags: troubleshooting
- Published: 2026-02-16

---

**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`](https://github.com/microsoft/vscode/blob/main/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`](https://github.com/microsoft/vscode/blob/main/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`](https://github.com/microsoft/vscode/blob/main/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`](https://github.com/microsoft/vscode/blob/main/src/vs/workbench/contrib/update/browser/update.contribution.ts), the action is registered with:

```typescript
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`](https://github.com/microsoft/vscode/blob/main/menubar.ts).
- **Windows/Linux**: The entry appears under the **Help** menu, contributed by [`update.contribution.ts`](https://github.com/microsoft/vscode/blob/main/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+P` → **Check 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`:

```typescript
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`](https://github.com/microsoft/vscode/blob/main/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:

```typescript
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`](https://github.com/microsoft/vscode/blob/main/menubar.ts) and [`update.contribution.ts`](https://github.com/microsoft/vscode/blob/main/update.contribution.ts) to decide menu visibility.*

### Enabling the Menu via Settings

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

```jsonc
// 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`](https://github.com/microsoft/vscode/blob/main/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`](https://github.com/microsoft/vscode/blob/main/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+P` → **Check 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`](https://github.com/microsoft/vscode/blob/main/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`](https://github.com/microsoft/vscode/blob/main/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`](https://github.com/microsoft/vscode/blob/main/src/vs/platform/menubar/electron-main/menubar.ts) for macOS and [`src/vs/workbench/contrib/update/browser/update.contribution.ts`](https://github.com/microsoft/vscode/blob/main/src/vs/workbench/contrib/update/browser/update.contribution.ts) for other platforms.