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
- Update the client to a Zed version that no longer uses channel chat
- Remove or disable chat-send code paths; migrate to whatever replaced chat in your client version (or drop the feature)
- 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
- Negotiate features at connection time and disable absent ones in the UI
- Update clients and servers together; remove dead chat code paths
- Treat this error as permanent — never auto-retry it
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
- not a collaborator on this project
- cannot call a user who isn't a contact
- failed to ring user
- The host (v{}) and guest (v{}) are using incompatible versio
- cannot add yourself as a contact
AI-assisted analysis of zed-industries/zed@bc538def45 (2026-08-16).
Data as JSON: /api/errors/abe63b1ce9349e1b.
Report an issue: GitHub.