{"record":{"id":"4ebdf25a6d6e5d72","repo":"zed-industries/zed","slug":"wl-output-below-required-version","errorCode":null,"errorMessage":"wl_output below required version: {} < {}","messagePattern":"wl_output below required version: (.+?) < (.+?)","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"critical","filePath":"crates/gpui_linux/src/linux/wayland/client.rs","lineNumber":695,"sourceCode":"            );\n            return;\n        };\n        let Some(wl_pointer) = self.wl_pointer.clone() else {\n            log::warn!(\n                \"wayland: no wl_pointer to restore cursor style {:?} after hide; cursor may stay invisible\",\n                style\n            );\n            return;\n        };\n        let scale = focused_window.primary_output_scale();\n        self.cursor.set_icon(\n            &wl_pointer,\n            serial.as_raw(),\n            cursor_style_to_icon_names(style),\n            scale,\n        );\n    }\n}\n\n#[derive(Clone)]\npub struct WaylandClient(Rc<RefCell<WaylandClientState>>);\n\nimpl Drop for WaylandClient {\n    fn drop(&mut self) {\n        let mut state = self.0.borrow_mut();\n        state.windows.clear();\n\n        if let Some(wl_pointer) = &state.wl_pointer {\n            wl_pointer.release();\n        }\n        if let Some(cursor_shape_device) = &state.cursor_shape_device {\n            cursor_shape_device.destroy();\n        }\n        if let Some(data_device) = &state.data_device {\n            data_device.release();\n        }","sourceCodeStart":677,"sourceCodeEnd":713,"githubUrl":"https://github.com/zed-industries/zed/blob/9d272b036335401f339d024ea94968fd51016c40/crates/gpui_linux/src/linux/wayland/client.rs#L677-L713","documentation":"Analogous seat check for outputs: the Wayland client requires wl_output version >= 2 (the version that exposes complete geometry/mode/scale information it relies on) and clamps the advertised version into [2, 4]. A compositor advertising wl_output v1 causes an immediate startup panic with the advertised and required versions.","triggerScenarios":"Starting Zed on a Wayland session whose compositor binds wl_output with version 1 — very old or minimal compositors that predate the wl_output v2 additions.","commonSituations":"Ancient compositor versions; toy/reference compositors; environments where an outdated Wayland library stack caps negotiated versions.","solutions":["Run Zed under the X11/XWayland session instead","Update the compositor / Wayland stack so wl_output >= 2 is negotiated","Report the compositor name and version if a current compositor still triggers it"],"exampleFix":null,"handlingStrategy":"fallback","validationCode":"# shell: check compositor wl_output version before launching\nwayland-info | grep -A1 wl_output  # advertised version; need >= 2","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Test exotic/nested compositors with the X11 backend before deploying Zed on them","Keep the compositor and wayland libraries updated so v2+ is negotiated","Report compositors that still advertise wl_output v1"],"tags":["zed","gpui","linux","wayland","wl-output","protocol-version","panic"],"backgroundTag":"unsupported-wayland-protocol-version","analyzedSha":"9d272b036335401f339d024ea94968fd51016c40","analyzedAt":"2026-08-20T19:29:52.058Z","contentChangedAt":"2026-08-20T19:29:52.058Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}