zellij-org/zellij · error

NewPanePlacement missing placement_type

Error message

NewPanePlacement missing placement_type

What it means

Error "NewPanePlacement missing placement_type" thrown in zellij-org/zellij.

Source

Thrown at zellij-utils/src/ipc/protobuf_conversion.rs:3933

        };
        Self {
            placement_type: Some(placement_type),
        }
    }
}

// Reverse NewPanePlacement conversion
impl TryFrom<crate::client_server_contract::client_server_contract::NewPanePlacement>
    for crate::data::NewPanePlacement
{
    type Error = anyhow::Error;
    fn try_from(
        placement: crate::client_server_contract::client_server_contract::NewPanePlacement,
    ) -> Result<Self> {
        use crate::client_server_contract::client_server_contract::new_pane_placement::PlacementType;
        match placement
            .placement_type
            .ok_or_else(|| anyhow!("NewPanePlacement missing placement_type"))?
        {
            // New fields (with borderless support) take priority
            PlacementType::NoPreferenceWithOptions(opts) => {
                Ok(crate::data::NewPanePlacement::NoPreference {
                    borderless: opts.borderless,
                })
            },
            PlacementType::TiledWithOptions(opts) => {
                let direction = opts.direction.map(proto_i32_to_direction).transpose()?;
                Ok(crate::data::NewPanePlacement::Tiled {
                    direction,
                    borderless: opts.borderless,
                })
            },
            PlacementType::StackedWithOptions(opts) => {
                let pane_id = opts
                    .pane_id_to_stack_under
                    .map(|id| id.try_into())

View on GitHub (pinned to e839bfffa5)

Solutions

  1. Include the required 'placement_type' field in the protobuf message before sending it.
  2. Verify the sender populates all mandatory fields; add a presence check before conversion.

When it happens

Trigger: Occurs when a protobuf message received over IPC omits the required field; deserialization fails instead of using a default.

Common situations: Occurs when a client or plugin sends an incompletely populated message, often from a version mismatch or hand-crafted payload.


AI-assisted analysis of zellij-org/zellij@e839bfffa5 (2026-08-19). Data as JSON: /api/errors/6b3c841df208a4c1. Report an issue: GitHub.