openclaw - 💡(How to fix) Fix [Bug]: Windows: Slack channel fails to start with ESM URL error (`c:` protocol) in v2026.4.24 [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#72430Fetched 2026-04-27 05:30:12
View on GitHub
Comments
1
Participants
2
Timeline
4
Reactions
0
Author
Timeline (top)
labeled ×2closed ×1commented ×1

Error Message

"discovery": { "mdns": { "mode": "off" } }

Log excerpt

{"subsystem":"gateway/channels/slack"} [default] starting provider {"subsystem":"gateway/channels/slack"} [default] channel exited: Only URLs with a scheme in: file, data, and node are supported by the default ESM loader. On Windows, absolute paths must be valid file:// URLs. Received protocol 'c:' {"subsystem":"gateway/channels/slack"} [default] auto-restart attempt 1/10 in 5s

OpenClaw version

2026.4.24

Operating system

Windows 11

Install method

No response

Model

Claude Sonnet 4.5

Provider / routing chain

From the stack trace logged when the Slack channel exited, the call chain was: 1. gateway/channels/slack — [default] starting provider 2. resolveSlackBotToken — fetching the bot token SecretRef 3. resolveSlackAccount — resolving the full Slack account config 4. Object.resolveAccount (channel-config-helpers-D7luFLJH.js:148) 5. Object.resolveAccountForAccessors aliased as resolveAccount (:268) 6. Object.resolveAllowFrom (:157) — building the allowFrom access list 7. buildAccountNotes (status.scan.runtime-CEY-ZATF.js:232) — this was actually in the openclaw status CLI path, not the gateway channel startup To clarify: the gateway Slack channel crash had a different (shorter) chain — the channel exited immediately on starting provider with the ESM URL error, meaning it failed at the dynamic import() of the plugin-runtime-deps module before any Slack API calls were made. The longer resolveAllowFrom → resolveAccount chain was from openclaw status trying to render the channel status in the CLI, not from the channel provider itself.

Additional provider/model setup details

No response

Logs, screenshots, and evidence

Root Cause

The root cause appears to be a dynamic import() call in the plugin-runtime-deps loading path that passes a raw Windows path (C:\Users\...) instead of a file:// URL. Node.js ESM treats C: as a URL scheme and rejects it. The fix is to use pathToFileURL() from the url module when constructing the import specifier.

Fix Action

Fix / Workaround

Workaround

Code Example

"discovery": {
    "mdns": { "mode": "off" }
  }

  Log excerpt

  {"subsystem":"gateway/channels/slack"} [default] starting provider
  {"subsystem":"gateway/channels/slack"} [default] channel exited: Only URLs with a scheme in: file, data, and node are
  supported by the default ESM loader. On Windows, absolute paths must be valid file:// URLs. Received protocol 'c:'
  {"subsystem":"gateway/channels/slack"} [default] auto-restart attempt 1/10 in 5s

### OpenClaw version

 2026.4.24

### Operating system

Windows 11

### Install method

_No response_

### Model

Claude Sonnet 4.5

### Provider / routing chain

 From the stack trace logged when the Slack channel exited, the call chain was:    1. gateway/channels/slack — [default] starting provider   2. resolveSlackBotToken — fetching the bot token SecretRef   3. resolveSlackAccount — resolving the full Slack account config   4. Object.resolveAccount (channel-config-helpers-D7luFLJH.js:148)   5. Object.resolveAccountForAccessors aliased as resolveAccount (:268)   6. Object.resolveAllowFrom (:157) — building the allowFrom access list   7. buildAccountNotes (status.scan.runtime-CEY-ZATF.js:232)this was actually in the openclaw status CLI path, not   the gateway channel startup    To clarify: the gateway Slack channel crash had a different (shorter) chain — the channel exited immediately on   starting provider with the ESM URL error, meaning it failed at the dynamic import() of the plugin-runtime-deps module   before any Slack API calls were made. The longer resolveAllowFrom → resolveAccount chain was from openclaw status   trying to render the channel status in the CLI, not from the channel provider itself.

### Additional provider/model setup details

_No response_

### Logs, screenshots, and evidence
RAW_BUFFERClick to expand / collapse

Bug type

Regression (worked before, now fails)

Beta release blocker

No

Summary

Windows: Slack channel fails to start with ESM URL error (c: protocol) in v2026.4.24

Version: 2026.4.24 Platform: Windows 11 Node.js: 24.14.0

Summary

After updating to v2026.4.24, the Slack channel fails to start on Windows with:

gateway/channels/slack: [default] channel exited: Only URLs with a scheme in: file, data, and node are supported by the default ESM loader. On Windows, absolute paths must be valid file:// URLs. Received protocol 'c:'

The gateway also crashes on startup due to an unhandled promise rejection in @homebridge/ciao mDNS probing (CIAO PROBING CANCELLED).

Steps to reproduce

  1. Install openclaw v2026.4.24 on Windows
  2. Configure a Slack channel in socket mode
  3. Start the gateway
  4. Observe Slack channel immediately exits and auto-restarts in a loop

Expected behavior

Slack channel starts successfully (as it did in v2026.4.12).

Actual behavior

The channel provider crashes immediately. The gateway itself also crashes unless mDNS is disabled via discovery.mdns.mode: "off".

The root cause appears to be a dynamic import() call in the plugin-runtime-deps loading path that passes a raw Windows path (C:\Users\...) instead of a file:// URL. Node.js ESM treats C: as a URL scheme and rejects it. The fix is to use pathToFileURL() from the url module when constructing the import specifier.

Workaround

Roll back to v2026.4.12: npm install -g [email protected]

If staying on v2026.4.24, add this to openclaw.json to prevent the gateway from crashing (does not fix Slack):

"discovery": {
  "mdns": { "mode": "off" }
}

Log excerpt

{"subsystem":"gateway/channels/slack"} [default] starting provider
{"subsystem":"gateway/channels/slack"} [default] channel exited: Only URLs with a scheme in: file, data, and node are
supported by the default ESM loader. On Windows, absolute paths must be valid file:// URLs. Received protocol 'c:'
{"subsystem":"gateway/channels/slack"} [default] auto-restart attempt 1/10 in 5s

### OpenClaw version

2026.4.24

### Operating system

Windows 11

### Install method

_No response_

### Model

Claude Sonnet 4.5

### Provider / routing chain

From the stack trace logged when the Slack channel exited, the call chain was:    1. gateway/channels/slack — [default] starting provider   2. resolveSlackBotToken — fetching the bot token SecretRef   3. resolveSlackAccount — resolving the full Slack account config   4. Object.resolveAccount (channel-config-helpers-D7luFLJH.js:148)   5. Object.resolveAccountForAccessors aliased as resolveAccount (:268)   6. Object.resolveAllowFrom (:157) — building the allowFrom access list   7. buildAccountNotes (status.scan.runtime-CEY-ZATF.js:232) — this was actually in the openclaw status CLI path, not   the gateway channel startup    To clarify: the gateway Slack channel crash had a different (shorter) chain — the channel exited immediately on   starting provider with the ESM URL error, meaning it failed at the dynamic import() of the plugin-runtime-deps module   before any Slack API calls were made. The longer resolveAllowFrom → resolveAccount chain was from openclaw status   trying to render the channel status in the CLI, not from the channel provider itself.

### Additional provider/model setup details

_No response_

### Logs, screenshots, and evidence

```shell

Impact and severity

No response

Additional information

No response

extent analysis

TL;DR

The most likely fix is to use pathToFileURL() from the url module when constructing the import specifier to convert raw Windows paths to file:// URLs.

Guidance

  • The root cause appears to be a dynamic import() call passing a raw Windows path instead of a file:// URL, which is rejected by Node.js ESM.
  • To verify the issue, check the stack trace and logs for the ESM URL error message indicating that only URLs with schemes file, data, and node are supported.
  • A temporary workaround is to roll back to version 2026.4.12 using npm install -g [email protected].
  • To prevent the gateway from crashing, add "discovery": { "mdns": { "mode": "off" } } to openclaw.json, although this does not fix the Slack channel issue.

Example

No code example is provided as the exact implementation details are not specified in the issue.

Notes

The provided workaround only prevents the gateway from crashing and does not resolve the Slack channel issue. A proper fix would involve modifying the code to use pathToFileURL() when constructing the import specifier.

Recommendation

Apply the workaround by rolling back to version 2026.4.12 until a proper fix is available, as it is the most straightforward way to restore functionality.

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

Slack channel starts successfully (as it did in v2026.4.12).

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]: Windows: Slack channel fails to start with ESM URL error (`c:` protocol) in v2026.4.24 [1 comments, 2 participants]