zed-industries/zed · critical

wl_seat below required version: {} < {}

Error message

wl_seat below required version: {} < {}

What it means

The Wayland client negotiates wl_seat versions and requires at least version 5 because it depends on the wl_pointer.frame event (introduced in wl_seat v5); it clamps the advertised version into [5, 9]. If the compositor binds wl_seat with a lower version, the client panics at startup with the advertised and required versions instead of continuing without frame events.

Source

Thrown at crates/gpui_linux/src/linux/wayland/client.rs:681

            return;
        }
        let Some(style) = self.cursor_style else {
            return;
        };
        let serial = self.serial_tracker.get(SerialKind::MouseEnter);
        if let Some(cursor_shape_device) = &self.cursor_shape_device {
            cursor_shape_device.set_shape(serial.as_raw(), to_shape(style));
            return;
        }
        let Some(focused_window) = self.mouse_focused_window.clone() else {
            log::warn!(
                "wayland: no focused surface to restore cursor style {:?} after hide; cursor may stay invisible",
                style
            );
            return;
        };
        let Some(wl_pointer) = self.wl_pointer.clone() else {
            log::warn!(
                "wayland: no wl_pointer to restore cursor style {:?} after hide; cursor may stay invisible",
                style
            );
            return;
        };
        let scale = focused_window.primary_output_scale();
        self.cursor.set_icon(
            &wl_pointer,
            serial.as_raw(),
            cursor_style_to_icon_names(style),
            scale,
        );
    }
}

#[derive(Clone)]
pub struct WaylandClient(Rc<RefCell<WaylandClientState>>);

View on GitHub (pinned to 9d272b0363)

Solutions

  1. Run Zed under XWayland/X11 instead of native Wayland (log out and pick the X11 session, or force the X11 backend per Zed's platform docs)
  2. Update the compositor to a version that binds wl_seat >= 5
  3. Report the compositor name and version so the minimum can be revisited or the check relaxed
Defensive patterns

Strategy: fallback

Validate before calling

# shell: check compositor wl_seat version before launching (wayland-info from wayland-utils)
wayland-info | grep -A1 wl_seat   # shows advertised version; need >= 5

Prevention

When it happens

Trigger: Starting Zed on a Wayland compositor that advertises wl_seat version < 5 — old compositor builds, minimal/nested Wayland servers, or remote-desktop compositors with stale protocol support.

Common situations: Older distro compositors; nested compositors (e.g. for testing); compositors that never bumped wl_seat despite supporting pointer events otherwise.

Related errors


AI-assisted analysis of zed-industries/zed@9d272b0363 (2026-08-20). Data as JSON: /api/errors/68a631ea36de5f37. Report an issue: GitHub.