zed-industries/zed · error

chat has been removed in the latest version of Zed

Error message

chat has been removed in the latest version of Zed

What it means

Returned unconditionally by the send_channel_message handler (and its sibling remove_channel_message stub) because chat was removed from Zed; the handlers keep the RPC endpoint alive but do nothing except error. Any client still invoking SendChannelMessage/RemoveChannelMessage gets this message regardless of arguments.

Source

Thrown at crates/collab/src/rpc.rs:3689

                },
            ) {
                tracing::error!(
                    "failed to send notification to {:?} {}",
                    connection_id,
                    error
                );
            }
        }
    }
}

/// Send a message to the channel
async fn send_channel_message(
    _request: proto::SendChannelMessage,
    _response: Response<proto::SendChannelMessage>,
    _session: MessageContext,
) -> Result<()> {
    Err(anyhow!("chat has been removed in the latest version of Zed").into())
}

/// Delete a channel message
async fn remove_channel_message(
    _request: proto::RemoveChannelMessage,
    _response: Response<proto::RemoveChannelMessage>,
    _session: MessageContext,
) -> Result<()> {
    Err(anyhow!("chat has been removed in the latest version of Zed").into())
}

async fn update_channel_message(
    _request: proto::UpdateChannelMessage,
    _response: Response<proto::UpdateChannelMessage>,
    _session: MessageContext,
) -> Result<()> {
    Err(anyhow!("chat has been removed in the latest version of Zed").into())
}

View on GitHub (pinned to bc538def45)

Solutions

  1. Update the client to a Zed version that no longer uses channel chat
  2. Remove or disable chat-send code paths; migrate to whatever replaced chat in your client version (or drop the feature)
  3. Gate chat UI on the feature set exchanged at connection time so old paths are never invoked against new servers

Example fix

# before (old client)
client.send(SendChannelMessage { channel_id, body }).await?;

# after (feature-gate the legacy path)
if connection_features.contains("chat") {
    client.send(SendChannelMessage { channel_id, body }).await?;
} else {
    self.ui.show_toast("Chat has been removed in this version of Zed");
}
Defensive patterns

Strategy: validation

Validate before calling

// Feature-gate legacy chat calls.
if connection_features.contains("chat") {
    client.send(SendChannelMessage { channel_id, body }).await?;
} else {
    self.ui.show_toast("Chat has been removed in this version of Zed");
}

Type guard

fn chat_supported(features: &HashSet<&str>) -> bool {
    features.contains("chat")
}

Try / catch

if let Err(err) = client.send(SendChannelMessage::default()).await {
    if err.to_string().contains("chat has been removed") {
        self.disable_chat_ui(); // permanent condition; stop calling
        return Ok(());
    }
    return Err(err);
}

Prevention

When it happens

Trigger: An outdated Zed client sends SendChannelMessage after the server-side chat removal; scripts or bots built against the old chat RPC; tests not updated after the feature was dropped.

Common situations: Version skew between an old client and a current collab server; third-party tooling still targeting the chat protocol; migration leftovers in a codebase that used channel chat.

Related errors


AI-assisted analysis of zed-industries/zed@bc538def45 (2026-08-16). Data as JSON: /api/errors/abe63b1ce9349e1b. Report an issue: GitHub.