zellij-org/zellij · error · anyhow::Error

Failed to serialize pane scrollback response

Error message

Failed to serialize pane scrollback response: {}

What it means

Error "Failed to serialize pane scrollback response: {}" thrown in zellij-org/zellij.

Solutions

  1. Check the attached error for the underlying serialization failure and fix the offending data.
  2. Ensure plugin/wasm artifacts and zellij versions are compatible.

When it happens

Trigger: Occurs at zellij-server/src/plugins/zellij_exports.rs:4190 when the operation fails: "Failed to serialize pane scrollback response: {}". Currently there is no defensive handling preventing or contextualizing this failure before it surfaces.

Common situations: Typically version skew, corrupted data, or an unexpected payload shape.


AI-assisted analysis of zellij-org/zellij@5cb5df5cce (2026-08-19). Data as JSON: /api/errors/3193d3faf46b301a. Report an issue: GitHub.

Appendix: source

Thrown at zellij-server/src/plugins/zellij_exports.rs:4190

                pane_id
            ))
        },
        Err(RecvTimeoutError::Disconnected) => {
            log::error!(
                "GetPaneScrollback channel disconnected for plugin {} requesting pane {:?}",
                env.plugin_id,
                pane_id
            );
            PaneScrollbackResponse::Err(format!(
                "Channel disconnected while retrieving scrollback for pane {:?}",
                pane_id
            ))
        },
    };

    // Convert to protobuf and write back to plugin
    ProtobufPaneScrollbackResponse::try_from(response)
        .map_err(|e| anyhow!("Failed to serialize pane scrollback response: {}", e))
        .and_then(|serialized| {
            wasi_write_object(env, &serialized.encode_to_vec())?;
            Ok(())
        })
        .with_context(err_context)
        .non_fatal();
}

fn write_to_pane_id(env: &PluginEnv, bytes: Vec<u8>, pane_id: PaneId) {
    let (completion_tx, completion_rx) = oneshot::channel();
    let send_result = env.senders.send_to_screen(ScreenInstruction::WriteToPaneId(
        bytes,
        pane_id,
        Some(NotificationEnd::new(completion_tx)),
    ));
    if send_result.is_ok() {
        let wait_forever = false;
        let _ = wait_for_action_completion(completion_rx, "write_to_pane_id", wait_forever);

View on GitHub (pinned to 5cb5df5cce)