glzr-io/glazewm · error
Unsupported IPC command.
Error message
Unsupported IPC command.
What it means
`handle_app_command` dispatches `AppCommand` variants to their handlers. The `Start` command is not supported by the IPC server (it exists only for launching the app), so any client sending it gets this bail.
Solutions
- Remove the `Start` command from IPC client usage; launch the WM via its executable directly
- Use only commands supported over IPC (focus, move, resize, subscribe, etc.)
- Match against the current IPC command surface in wm-ipc-client
Example fix
// before
send_command(AppCommand::Start { path: ... });
// after
spawn glazewm.exe directly instead of sending Start over IPC; Defensive patterns
Strategy: validation
Validate before calling
if matches!(command, AppCommand::Start { .. }) {
eprintln!("Start cannot be sent over IPC; launch the WM executable instead");
} else {
send_ipc_command(command)?;
} Try / catch
match send_ipc_command(cmd) {
Err(e) if e.to_string().contains("Unsupported IPC command") => {
eprintln!("{cmd:?} is not supported over IPC");
}
r => r?,
} Prevention
- Filter the command enum to IPC-supported variants in clients
- Regenerate IPC clients from the current wm-ipc-client types
- Handle this response gracefully and show available commands
When it happens
Trigger: Sending `{"commandType":"wm-disable"...}` style messages is fine, but sending `AppCommand::Start` over the IPC WebSocket — e.g. a client reusing the CLI's full command enum including `start` — hits this arm.
Common situations: Custom IPC clients or scripts constructing commands from the full `AppCommand` enum and accidentally including `start`, or outdated clients using deprecated command shapes.
Understand the failure class
Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.
Related errors
AI-assisted analysis of glzr-io/glazewm@5709ad0a3c (2026-09-08).
Data as JSON: /api/errors/d64a3373aed79b03.
Report an issue: GitHub.
Appendix: source
Thrown at packages/wm/src/ipc_server.rs:317
}
}
}
}
});
ClientResponseData::EventSubscribe(EventSubscribeData {
subscription_id,
})
}
AppCommand::Unsub { subscription_id } => {
self
.unsubscribe_tx
.send(subscription_id)
.context("Failed to unsubscribe from event.")?;
ClientResponseData::EventUnsubscribe
}
AppCommand::Start { .. } => bail!("Unsupported IPC command."),
};
Ok(response_data)
}
fn to_client_response_msg(
client_message: String,
response_data: anyhow::Result<ClientResponseData>,
) -> anyhow::Result<Message> {
let error = response_data.as_ref().err().map(ToString::to_string);
let success = response_data.as_ref().is_ok();
let message = ServerMessage::ClientResponse(ClientResponseMessage {
client_message,
data: response_data.ok(),
error,
success,
});
View on GitHub (pinned to 5709ad0a3c)