[BUG] Extensions settings tab stuck on "Loading extensions..." — EventEmitter memory leak in IPC listeners

Open 💬 2 comments Opened Jul 15, 2026 by dhari4

Preflight Checklist

  • [x] I have searched existing issues and this hasn't been reported yet
  • [x] This is a single bug report (please file separate reports for different bugs)
  • [x] I am using the latest version of Claude Code

What's Wrong?

[BUG] Extensions settings tab stuck on "Loading extensions..." — EventEmitter memory leak in IPC listeners

Preflight Checklist

  • [x] I have searched existing issues and this hasn't been reported yet
  • [x] This is a single bug report
  • [x] I am using the latest version of Claude Desktop

Environment

  • Platform: macOS (Apple Silicon, 16GB RAM)
  • Claude Desktop version: 1.21459.0
  • Extensions installed: 3 (2 local .mcpb, 1 registry .dxt)

What's Wrong?

The Extensions tab in Settings is permanently stuck on "Loading extensions..." — the spinner never resolves and the extension list never renders. All three installed extensions function correctly in chat (MCP tools respond normally); only the settings UI is broken.

Console Errors

Opening DevTools (Cmd+Option+I) on the stuck Extensions tab reveals the root cause — MaxListenersExceededWarning on two IPC channels:

MaxListenersExceededWarning: Possible EventEmitter memory leak detected.
11 $eipc_message$_..._AutoUpdater_$_updaterState_$store$_update listeners added.
Use emitter.setMaxListeners() to increase limit
    at _addListener (node:electron/js2c/sandbox_bundle:2:36239)
    at IpcRenderer.addListener (node:electron/js2c/sandbox_bundle:2:39125)
    at Object.onStateChange (/Applications/Claude.app/Contents/Resources/app.asar/.vite/build/mainView.js:64:31400)
    at ...vendor-react-RSDKEZ60.js:10:131313
MaxListenersExceededWarning: Possible EventEmitter memory leak detected.
11 $eipc_message$_..._LocalAgentModeSessions_$_sessionsBridgeStatus_$store$_update listeners added.
    at _addListener (node:electron/js2c/sandbox_bundle:2:36239)
    at IpcRenderer.addListener (node:electron/js2c/sandbox_bundle:2:39125)
    at Object.onStateChange (/Applications/Claude.app/Contents/Resources/app.asar/.vite/build/mainView.js:64:63308)
    at ...vendor-react-RSDKEZ60.js:10:131313

Likely Cause

The React component(s) rendering the Extensions tab are attaching IPC event listeners (AutoUpdater → updaterState and LocalAgentModeSessions → sessionsBridgeStatus) via ipcRenderer.addListener on each mount/re-render without removing them on unmount. The component appears to double-mount (every main.log entry is duplicated), which accelerates the leak. After exceeding the default 10-listener limit, the EventEmitter is overwhelmed and the UI hangs.

Additional Observations

  • Every line in main.log is logged twice (double-mount)
  • can_install API check completes successfully for all 3 extensions — the hang occurs after validation, during UI render
  • The extensions-installations.json file is valid and uncorrupted
  • "Clear Cache and Restart" from the Troubleshooting menu does not resolve the issue
  • Full quit + relaunch does not resolve the issue
  • Freeing system RAM (from 193MB to ~2.5GB free) does not resolve the issue

Steps to Reproduce

  1. Install 3 extensions (mix of local .mcpb and registry .dxt)
  2. Open Settings → Extensions
  3. Observe permanent "Loading extensions..." spinner
  4. Open DevTools (Cmd+Option+I) → Console → observe MaxListenersExceededWarning

Expected Behavior

Extensions tab should render the list of installed extensions and allow configuration.

Workaround

Extensions work in chat — only the settings UI is affected. Extension configs can be edited directly via ~/Library/Application Support/Claude/extensions-installations.json and ~/Library/Application Support/Claude/Claude Extensions Settings/.

What Should Happen?

Extensions tab should render the list of installed extensions and allow configuration.

Error Messages/Logs

MaxListenersExceededWarning: Possible EventEmitter memory leak detected.
11 $eipc_message$_..._AutoUpdater_$_updaterState_$store$_update listeners added.
Use emitter.setMaxListeners() to increase limit
    at _addListener (node:electron/js2c/sandbox_bundle:2:36239)
    at IpcRenderer.addListener (node:electron/js2c/sandbox_bundle:2:39125)
    at Object.onStateChange (/Applications/Claude.app/Contents/Resources/app.asar/.vite/build/mainView.js:64:31400)
    at ...vendor-react-RSDKEZ60.js:10:131313

MaxListenersExceededWarning: Possible EventEmitter memory leak detected.
11 $eipc_message$_..._LocalAgentModeSessions_$_sessionsBridgeStatus_$store$_update listeners added.
    at _addListener (node:electron/js2c/sandbox_bundle:2:36239)
    at IpcRenderer.addListener (node:electron/js2c/sandbox_bundle:2:39125)
    at Object.onStateChange (/Applications/Claude.app/Contents/Resources/app.asar/.vite/build/mainView.js:64:63308)
    at ...vendor-react-RSDKEZ60.js:10:131313

Steps to Reproduce

Install 3 extensions (mix of local .mcpb and registry .dxt)
Open Settings → Extensions
Observe permanent "Loading extensions..." spinner
Open DevTools (Cmd+Option+I) → Console → observe MaxListenersExceededWarning

Claude Model

Opus

Is this a regression?

Yes, this worked in a previous version

Last Working Version

_No response_

Claude Code Version

Claude desktop

Platform

Anthropic API

Operating System

macOS

Terminal/Shell

Other

Additional Information

N/A — Claude Desktop app, not terminal

View original on GitHub ↗

This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗