openclaw - 💡(How to fix) Fix [Bug]: prestageGatewayBundledRuntimeDeps ignores channels.X.enabled=false, installs deps for all bundled channels on startup [1 comments, 2 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
openclaw/openclaw#74405Fetched 2026-04-30 06:24:16
View on GitHub
Comments
1
Participants
2
Timeline
4
Reactions
2
Author
Participants
Timeline (top)
closed ×1commented ×1cross-referenced ×1mentioned ×1

prestageGatewayBundledRuntimeDeps during gateway startup installs runtime dependencies for all bundled channels regardless of channels.X.enabled = false in openclaw.json. This causes 5-15+ minute startup delays (especially on networks with high latency to npmjs.org), and can loop as each npm install round discovers new transitive deps.

CHANGELOG line 845 (2026.4.26) says:

"Plugins/runtime deps: respect explicit plugin and channel disablement when repairing bundled runtime dependencies, so doctor and health checks no longer install deps for disabled configured channels."

This fix only covers the doctor/health-check code path, not the prestageGatewayBundledRuntimeDeps startup path.

Similarly, CHANGELOG line 339 mentions WhatsApp startup skip only when channels.whatsapp is absent (not enabled: false).

Root Cause

Additionally, npm install rounds can loop because each round discovers new transitive deps:

  • Round 1: 51 packages → Round 2: 54 (+@twurple) → Round 3: 56 (+baileys+jimp) → Round 4: 57 (+zca-js)

Fix Action

Workaround

Completely remove unused channel keys from openclaw.json instead of setting enabled: false. The startup path only skips channels that are entirely absent from config.

Code Example

2026-04-29T20:27:36.076+08:00 [gateway] starting...
2026-04-29T20:31:49.328+08:00 [gateway] [plugins] staging bundled runtime deps before gateway startup (9 missing, 12 install specs)
2026-04-29T20:37:35.508+08:00 [gateway] [plugins] installed bundled runtime deps before gateway startup in 346180ms
RAW_BUFFERClick to expand / collapse

Title

[Bug]: prestageGatewayBundledRuntimeDeps ignores channels.X.enabled=false, installs deps for all bundled channels on startup

Body

Bug type

Regression (partially fixed in doctor/health path but not startup path)

Summary

prestageGatewayBundledRuntimeDeps during gateway startup installs runtime dependencies for all bundled channels regardless of channels.X.enabled = false in openclaw.json. This causes 5-15+ minute startup delays (especially on networks with high latency to npmjs.org), and can loop as each npm install round discovers new transitive deps.

CHANGELOG line 845 (2026.4.26) says:

"Plugins/runtime deps: respect explicit plugin and channel disablement when repairing bundled runtime dependencies, so doctor and health checks no longer install deps for disabled configured channels."

This fix only covers the doctor/health-check code path, not the prestageGatewayBundledRuntimeDeps startup path.

Similarly, CHANGELOG line 339 mentions WhatsApp startup skip only when channels.whatsapp is absent (not enabled: false).

Steps to reproduce

  1. Configure openclaw.json with only channels.telegram.enabled = true
  2. Set all other bundled channels to enabled: false (discord, slack, googlechat, nostr, feishu, whatsapp, matrix, etc. — 20+ channels)
  3. Upgrade to 2026.4.26 and start gateway
  4. Observe gateway startup log

Expected behavior

Gateway should only install runtime deps for enabled channels (telegram in this case). Startup should complete in seconds.

Actual behavior

Gateway installs deps for all bundled channels. From logs:

2026-04-29T20:27:36.076+08:00 [gateway] starting...
2026-04-29T20:31:49.328+08:00 [gateway] [plugins] staging bundled runtime deps before gateway startup (9 missing, 12 install specs)
2026-04-29T20:37:35.508+08:00 [gateway] [plugins] installed bundled runtime deps before gateway startup in 346180ms

346 seconds (nearly 6 minutes) just for startup dep staging, with only telegram enabled.

Additionally, npm install rounds can loop because each round discovers new transitive deps:

  • Round 1: 51 packages → Round 2: 54 (+@twurple) → Round 3: 56 (+baileys+jimp) → Round 4: 57 (+zca-js)

On networks with poor connectivity to npmjs.org (common in mainland China), this can take 1+ hour or never converge.

Workaround

Completely remove unused channel keys from openclaw.json instead of setting enabled: false. The startup path only skips channels that are entirely absent from config.

Environment

  • OpenClaw version: 2026.4.26
  • OS: macOS 15 (Darwin 25.4.0 arm64)
  • Node: v24.15.0
  • Config: 21 channels configured with enabled: false, only telegram enabled

Suggested fix

prestageGatewayBundledRuntimeDeps should check channels.X.enabled and skip disabled channels, consistent with the doctor/health-check fix in CHANGELOG line 845.

Related

  • #74209 (bundled plugins blocking startup after 4.26 upgrade — similar root cause)
  • #72665 (update hangs and 1006 disconnect cascades)

extent analysis

TL;DR

The most likely fix is to modify the prestageGatewayBundledRuntimeDeps function to respect the channels.X.enabled flag in openclaw.json and skip installing dependencies for disabled channels.

Guidance

  • Verify that the issue is indeed caused by the prestageGatewayBundledRuntimeDeps function ignoring the channels.X.enabled flag by checking the startup logs for evidence of unnecessary dependency installations.
  • Consider implementing a temporary workaround by completely removing unused channel keys from openclaw.json instead of setting enabled: false, as this is currently the only way to skip channels during startup.
  • Review the code changes made in CHANGELOG line 845 for the doctor/health-check fix and apply similar logic to the prestageGatewayBundledRuntimeDeps function to respect channel enablement.
  • Test the modified function with a configuration that has multiple channels set to enabled: false to ensure that only enabled channels' dependencies are installed.

Example

No code snippet is provided as the issue does not include the relevant code, but the fix would involve modifying the prestageGatewayBundledRuntimeDeps function to check the channels.X.enabled flag and skip installing dependencies for disabled channels.

Notes

The provided workaround of removing unused channel keys from openclaw.json may not be desirable in all cases, as it permanently removes the channel configuration. A proper fix that respects the enabled flag is necessary for a more flexible and user-friendly solution.

Recommendation

Apply the suggested fix to modify the prestageGatewayBundledRuntimeDeps function to respect the channels.X.enabled flag, as this will provide a more robust and flexible solution than the current workaround.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

FAQ

Expected behavior

Gateway should only install runtime deps for enabled channels (telegram in this case). Startup should complete in seconds.

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING

openclaw - 💡(How to fix) Fix [Bug]: prestageGatewayBundledRuntimeDeps ignores channels.X.enabled=false, installs deps for all bundled channels on startup [1 comments, 2 participants]