NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #1159 most downloaded on crates.io
Toolkit for making client wayland applications.
Last release 2 months ago
23 Jul 2026
Release timing varies
gaps range from 3 weeks to 13 months
Nearly every release is documented
notes for 48 of 53 stable releases
Nothing withdrawn
no release was ever pulled
8 years old
53 releases · first in 2018
Fix trait bound for WlTouch dispatch implementation
WlTouch dispatch implementation*DataExt traits removed; now *Data types wrap custom data.
Breaking Changes
*DataExt traits removed; now *Data types wrap custom data.
Proxy::data will need to be updated for new type.delegate_*! macros except delegate_registry! replaced with singledelegate_dispatch2! in preparation for future wayland-rs release.Fixed
xdg_popup version is below 3.Additions
xdg_wm_dialog v1.xx_input_method v1.xx_keyboard_filter v1.ext-background-effect v1.One column per quarter.
Update calloop to 0.14.0 , calloop-wayland-source to 0.4.0 .
Breaking Changes
calloop to 0.14.0, calloop-wayland-source to 0.4.0.rustix to 1.0.7.thiserror to 2.0.12.raw_modifiers argument to update_modifiers.Fixed
Additions
wl_keyboard v10.wl_pointer v9.wl_pointer v8.wp_cursor_shape_manager_v1 v2.zwp-input-method-v2.xx-input-method-v2 protocol.wp_presentation protocol.ext-foreign-toplevel-list-v1 protocol.SimpleGlobal::from_bound method to construct from proxy object.Clone for dmabuf feedback structs.AsFd for RawPool.From<RawPool> for OwnedFd.Fix crash when compositor sends event to dead wl_output .
Fixed
wl_output.clone derive for CompositorState
Additions
clone derive for CompositorStateUpdate calloop to 0.13.0, calloop-wayland-source to 0.3.0 .
Breaking Changes
calloop to 0.13.0, calloop-wayland-source to 0.3.0.surface_enter/surface_leave methods to CompositorHandler trait.KeyboardHandler::update_modifiers.wayland-protocols-*.Fixed
SessionLock to avoid accidental unlock.MultiPool::get returns an overlap error when its appropriate.delegate_* macros with custom UserData.Additions
Properly bump the XdgWmBase API version. Properly bump the WlCompositor API version. Fix delegate_* macros with custom UserData.
Fixed
Properly bump the XdgWmBase API version.
Properly bump the WlCompositor API version.
Fix delegate_* macros with custom UserData.
Additions
Add support for xdg-activation-v1.
Add support for ext-session-lock-v1.
Update cursor-icon dependency.
ThemedPointer::set_cursor now takes only Connection and &str .
Breaking Changes
ThemedPointer::set_cursor now takes only Connection and &str.SeatState:get_pointer_with_them* now takes Shm and WlSurface for the themed cursor.ThemedPointer now automatically releases the associated WlPointer.CursorIcon from cursor-icon crate is now used for set_cursor and Frame.wayland-csd-frame is now used for CSD types like WindowState, DecorationsFrame, etc.CompositorHandle::transform_changed to listen for transform changes.xkeysym::Keysym is used as a keyboard key representation instead of u32wayland-rs dependencies are updated to 0.31calloop dependency updated to 0.12.1OwnedFd instead of RawFd as argument to receive_to_fd functions.Fixed
wl_output is below version 3.Additions
DataDeviceManagerState's create_{copy_paste,drag_and_drop}_source accept IntoIterator<Item = T: ToString>.zwp_primary_selection_v1.CursorShapeManager providing handling for cursor-shape-v1 protocol.SeatState::get_pointer_with_theme will now automatically use wp_cursor_shape_v1 when available.xdg_shell version 6.wl_surafce::preferred_buffer_scale and wl_surface::preferred_buffer_transform.wayland-rs dependencies are updated to 0.30 and all APIs have changed significantly as a result
wayland-rs dependencies are updated to 0.30 and all APIs have changed significantly as a resultxkbcommon is a new optional dependecy for keyboard handling gated by the xkbcommon featuresmithay-client-toolkit version 0.16.1
smithay-client-toolkit version 0.16.1
calloop is updated to version 0.10, and the keyboard handling API is slightly changed as a result.
calloop is updated to version 0.10, and the keyboard handling API is slightly changed as a result.DataDevice::with_dnd and DataOffer::receive_to_fd allow more flexible interaction with the data device abstraction4 of wl_outputWindow's wl_pointer not being relased on Drop.
Window's wl_pointer not being relased on Drop.SCTK now correctly interacts with the wayland socket being conccurently polled from other threads.
- Most types are now Debug
Debugwhen not using dlopen feature, xkbdcommon library is linked using pkg-config
dlopen feature, xkbdcommon library is linked using pkg-configAutoMemPool now guarantees a minimum alignment of returned buffers
wayland-client to 0.29AutoMemPool now guarantees a minimum alignment of returned buffersConceptFrame is removed, as well as the frames cargo feature, and replaced by a more minimalistic FallbackFrame. Dependency on andrew and fontconfig i
ConceptFrame is removed, as well as the frames cargo feature, and replaced by a more minimalistic
FallbackFrame. Dependency on andrew and fontconfig is dropped in the process. If fancier
decorations are needed, they should be implemented using the Frame trait.calloop::Source is replaced by calloop::RegistrationTokenAutoMemPool added as an alternative to the existing SHM poolsMark OutputInfo as #[non_exhaustive] to allow future expansion without breaking API.
#[non_exhaustive] to allow future expansion without
breaking API.Window::start_interactive_move to enable dragging the window with a user actionConceptFrame now correctly loads fonts using fontconfigNothing published for this version
Dependency on byteorder was replaced with u32::from_ne_bytes()
byteorder was replaced with u32::from_ne_bytes()Unmaintained memmap dependency is replaced with memmap2
memmap dependency is replaced with memmap2Update wayland-client to version 0.28
wayland-client to version 0.28Environment::init was renamed to Environment::new_pendinginit_default_environment! macro was renamed to new_default_environment!Environment::new method to fully bootstrap environmentwindow.set_decorate is now taking mutable reference
window.set_decorate is now taking mutable referenceshow_window_menu on a Frame trait to request a window menu for a window.ShowMenu enum variant to FrameRequestcreate_window now also takes Option<ThemeManager>Frame::init now also takes Option<ThemeManager> to reuse users' ThemeManagerWaylandSource::queue to access the EventQueue underlying a WaylandSourceConceptFrameConceptFrame will no longer change cursor over base surface if ThemeManager was providedWindow::set_title now truncates the provided string to 1024 bytes, to avoid blowing up
the Wayland connectionConceptFrame is now hiding decorations for State::FullscreenClientSide decorations will result in ServerSide ones being destroyedServerSide decorations in set_decorate will now fallback to ClientSide
if the former are not availableNone decorations if ServerSide are presented will result in setting
ClientSide decorations with hidden frameConceptFrame will use Disabled style for maximized button for non-resizeable frameConceptFrame will create subsurfaces for client side decorations only if a frame is visibleWindow will restore original size after being tiledServerSide and None decorations raising protocol errorThemeManager not being clone-able even if it was stated in docsrate in wl_keyboard.repeat_infocreate_surface and create_surface_with_scale_callback now return Attached
create_surface and create_surface_with_scale_callback now return Attached<WlSurface>wayland-client to 0.27andrew is updated to 0.3.keyboard: Update the keysyms list with new symbols
Environment.map_keyboardAutoThemer is removed as it is no longer necessary with wayland-cursor 0.26
AutoThemer is removed as it is no longer necessary with wayland-cursor 0.26calloop is updated to 0.6, and the adapters are modified in consequenceclone_seat_data() method as a shorthand to get SeatDataAdd listen_for_outputs() which calls a provided callback on creation/removal of outputs.
listen_for_outputs() which calls a provided callback on creation/removal of outputs.OutputHandling trait making listen_for_outputs() available on Environment.calloop cargo feature, enabled by default, controlling the support for the calloop event
loopframes cargo feature, enabled by default, controlling the existence of provided Frame
implementations (currently ConceptFrame) and the dependency on andrewFrame configuration is now done through a Frame::Config associated type and the Theme trait is removed.
Frame configuration is now done through a Frame::Config associated type and the Theme trait is removed.Frame::set_active and Frame::set_maximized into Frame::set_statesConceptFrame decoration drawingUpgrade to wayland-client 0.25. This changes the prototype of most callbacks by adding the DispatchData mechanism for state sharing
wayland-client 0.25. This changes the prototype of most callbacks by
adding the DispatchData mechanism for state sharingEnvironment type as an entry point (breaks a lot of things).
This makes the crate follow a monolithic-modular structure centered on this type.keyboard is now a submodule of seatkeyboard key repetition is now handled as a calloop event sourcepointer is now a submodule of seatpointer theming utilities now require a ThemeSpec argument
instead of just a theme name, allowing control over the size of the cursors as wellWindow now tracks new seats automatically (the new_seat method is removed)Window can no longer be shared across threads, as it was racy.Decorations enum, for full control to clients.pointer theming will now read the XCURSOR_THEME and XCURSOR_SIZE environment
variables to figure the default themepointer theming utilities now handle HiDPI monitorslog crate to log its warning and error messagesReadPipescan be inserted in a calloop event loop as an event sourceWaylandSource wrapper allows a wayland-client EventQueue to be inserted into
a calloop event source.Nothing published for this version
Nothing published for this version
Keyboard input breaking when LC_ALL, LC_CTYPE or LANG are set to an empty string
LC_ALL, LC_CTYPE or LANG are set to an empty stringKeyboard: fix extra key repeat when using also releasing a modifier
- Update Nix to 0.14
Nix to 0.14Additional theming capability on ConceptFrame via the Theme trait: optional methods get_ _button_icon_color allows the stroke color on the buttons to
ConceptFrame via the Theme trait:
optional methods get_<button-name>_button_icon_color allows the stroke
color on the buttons to be customized beyond what the secondary color allows.
Button color methods now affect the ConceptFrame's fill behind the buttons.Configure events in window abstraction.Upgrade to wayland-client version 0.23
wayland-client version 0.23Update the crate to wayland-client version 0.22
wayland-client version 0.22set_title() now requires a manual refresh() for the change to take effectcompute_dpi_factor() by only computing the dpi factor on surfaces known to the OutputMgrNothing published for this version
Nothing published for this version
Shell: expose shell interface and add create_shell_surface to Environment.
create_shell_surface to Environment.Update dependencies: rand, memmap, nix and image
create_surface and get_dpi_factor utilities for creating dpi aware surfaces.- Fix compilation on BSD systems
Window: always request server-side decorations if available, otherwise ther compositor never configures us
xkb_compose.BasicFrame: Display the title of the window in the window header
set_selection() Option<DataSource> and AutoThemer::init() Proxy<WlShm> by referenceset_theme() function which takes an object implementing the trait Theme to adjust the look of window decorationsConceptFrame which provides an alternative to the BasicFrame window decorationsmmap methodmodifiers field from keyboard::Event::Enter, keyboard::Event::Key and keyboard::KeyRepeatEventkeyboard::Event::ModifiersWindow: the minimum window width is set to 2 pixels to circumvent a bug in mutter - https://gitlab.gnome.org/GNOME/mutter/issues/259
swap() is removed as pool() will now automatically track and return any free pools avaliable or return Noneinit_with_decorations to allow the use of server-side decorationsBig thanks to @trimental for improving the visual look of the window decorations:
Big thanks to @trimental for improving the visual look of the window decorations:
Keyboard: try to load libxkbcommon.so.0 as well to improve compatibility
libxkbcommon.so.0 as well to improve compatibilityWindow: notify the compositor of our dimensions to avoid placement glitches
Update nix dependency to be fix build on FreeBSD (even if we can't run)
nix dependency to be fix build on FreeBSD (even if we can't run)Window: add set_resizable, (minor breaking change of the Frame trait by adding a new method)
set_resizable, (minor breaking change of the Frame trait by
adding a new method)Add DoubleMemPool for double buffering, and use it to improve the drawing performance of BasicFrame.
DoubleMemPool for double buffering, and use it to
improve the drawing performance of BasicFrame.*Breaking* OutputMgr: expose wl_output global id
Initial version, including: - basic environment manager - keyboard keymap handling - basic window decoration
Initial version, including:
Your coding agent can read these notes before it upgrades. Set up the MCP server →