[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 (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.logis logged twice (double-mount) can_installAPI check completes successfully for all 3 extensions — the hang occurs after validation, during UI render- The
extensions-installations.jsonfile 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
- Install 3 extensions (mix of local
.mcpband registry.dxt) - Open Settings → Extensions
- Observe permanent "Loading extensions..." spinner
- 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
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗