zellij-org/zellij · error · anyhow::Error
ScrollDownByPaneId missing pane_id
Error message
ScrollDownByPaneId missing pane_id
What it means
Protobuf conversion for ScrollDownByPaneId: like its sibling scroll-by-pane-id actions it must name the target pane via the optional `pane_id` field; an unset value fails conversion here with 'missing pane_id' and the scroll-down is never applied to any pane.
Source
Thrown at zellij-utils/src/ipc/protobuf_conversion.rs:2922
.try_into()?,
fg: set_pane_color_action.fg,
bg: set_pane_color_action.bg,
})
},
// Pane-targeting CLI-only variants
ActionType::ScrollUpByPaneId(a) => {
Ok(crate::input::actions::Action::ScrollUpByPaneId {
pane_id: a
.pane_id
.ok_or_else(|| anyhow!("ScrollUpByPaneId missing pane_id"))?
.try_into()?,
})
},
ActionType::ScrollDownByPaneId(a) => {
Ok(crate::input::actions::Action::ScrollDownByPaneId {
pane_id: a
.pane_id
.ok_or_else(|| anyhow!("ScrollDownByPaneId missing pane_id"))?
.try_into()?,
})
},
ActionType::ScrollToTopByPaneId(a) => {
Ok(crate::input::actions::Action::ScrollToTopByPaneId {
pane_id: a
.pane_id
.ok_or_else(|| anyhow!("ScrollToTopByPaneId missing pane_id"))?
.try_into()?,
})
},
ActionType::ScrollToBottomByPaneId(a) => {
Ok(crate::input::actions::Action::ScrollToBottomByPaneId {
pane_id: a
.pane_id
.ok_or_else(|| anyhow!("ScrollToBottomByPaneId missing pane_id"))?
.try_into()?,
})View on GitHub (pinned to 98a0837077)
Solutions
- Populate pane_id before sending ScrollDownByPaneId
- Regenerate client stubs against the server's proto files
- Keep both ends on the same zellij release
- Pre-validate required fields and drop invalid actions with a log entry
Example fix
// before
ScrollDownAction::default() // pane_id: None -> error
// after
ScrollDownAction { pane_id: Some(target_pane_id as u64) } Defensive patterns
Strategy: validation
Validate before calling
if let ActionType::ScrollDownByPaneId(a) = action.action_type.as_ref().unwrap() {
if a.pane_id.is_none() {
anyhow::bail!("ScrollDownByPaneId requires pane_id");
}
} Type guard
fn scroll_down_by_pane_id_is_valid(a: &ScrollDownAction) -> bool {
a.pane_id.is_some()
} Try / catch
match protobuf_action.try_into() {
Ok(action) => dispatch(action),
Err(e) if e.to_string().contains("ScrollDownByPaneId missing pane_id") => {
log::warn!("dropping ScrollDownByPaneId without pane_id");
},
Err(e) => return Err(e.context("action conversion failed")),
} Prevention
- Always bind scroll-by-pane-id actions to a freshly resolved pane id
- Validate pane-targeting payloads in the client before IPC send
- Regenerate protobuf code when upgrading either side of the connection
- Catch and log these conversion errors server-side so one bad action cannot kill dispatch
When it happens
Trigger: Sending ScrollDownByPaneId over IPC with pane_id omitted — default-constructed messages, partial payloads from automation, or protobuf stubs generated from a different zellij version.
Common situations: Scripts driving pane scrollback in specific panes; client/server version mismatch; debugging tools stripping optional fields.
Related errors
- ScrollUpByPaneId missing pane_id
- ScrollToTopByPaneId missing pane_id
- ScrollToBottomByPaneId missing pane_id
- ChangeFloatingPaneCoordinates missing pane_id
- TogglePaneBorderless missing pane_id
AI-assisted analysis of zellij-org/zellij@98a0837077 (2026-08-16).
Data as JSON: /api/errors/5dfb57f73b6a1f53.
Report an issue: GitHub.