smithay-client-toolkit
Toolkit for making client wayland applications.
0.21.1
56M downloads/mo
#1152 most downloaded on crates.io
smithay/client-toolkit
What this package is like to depend on
Last release 1 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
2 releases in the last 12 months
see the full history below
Release timeline
53 releases · Apr 2018 to Jul 2026Releases
latest 53-
0.21.123 Jul 2026 -
0.21.020 Jul 2026Release notes
Open source →Breaking Changes
*DataExttraits removed; now*Datatypes wrap custom data.- Any calls to
Proxy::datawill need to be updated for new type.
- Any calls to
- All
delegate_*!macros exceptdelegate_registry!replaced with single
delegate_dispatch2!in preparation for future wayland-rs release.
Fixed
- Prevent popup reposition request if
xdg_popupversion is below 3.
Additions
- Add support for
xdg_wm_dialogv1. - Add support for
xx_input_methodv1. - Add support for
xx_keyboard_filterv1. - Add support for
ext-background-effectv1.
Release notes
Open source →Breaking Changes
*DataExttraits removed; now*Datatypes wrap custom data.- Any calls to
Proxy::datawill need to be updated for new type.
- Any calls to
- All
delegate_*!macros exceptdelegate_registry!replaced with singledelegate_dispatch2!in preparation for future wayland-rs release.
Fixed
- Prevent popup reposition request if
xdg_popupversion is below 3.
Additions
- Add support for
xdg_wm_dialogv1. - Add support for
xx_input_methodv1. - Add support for
xx_keyboard_filterv1. - Add support for
ext-background-effectv1.
-
0.20.008 Aug 2025Release notes
Open source →Breaking Changes
- Update
calloopto0.14.0,calloop-wayland-sourceto0.4.0. - Update
rustixto1.0.7. - Update
thiserrorto2.0.12. - Add a
raw_modifiersargument toupdate_modifiers.
Fixed
- Fix keyboard sending press events when repeat is disabled.
Additions
- Add support for
wl_keyboardv10. - Add support for
wl_pointerv9. - Add support for
wl_pointerv8. - Add support for
wp_cursor_shape_manager_v1v2. - Add partial support for
zwp-input-method-v2. - Add
xx-input-method-v2protocol. - Add
wp_presentationprotocol. - Add
ext-foreign-toplevel-list-v1protocol. - Add
SimpleGlobal::from_boundmethod to construct from proxy object. - Add
Clonefor dmabuf feedback structs. - Implement
AsFdforRawPool. - Implement
From<RawPool>forOwnedFd.
Release notes
Open source →Breaking Changes
- Update
calloopto0.14.0,calloop-wayland-sourceto0.4.0. - Update
rustixto1.0.7. - Update
thiserrorto2.0.12. - Add a
raw_modifiersargument toupdate_modifiers.
Fixed
- Fix keyboard sending press events when repeat is disabled.
Additions
- Add support for
wl_keyboardv10. - Add support for
wl_pointerv9. - Add support for
wl_pointerv8. - Add support for
wp_cursor_shape_manager_v1v2. - Add partial support for
zwp-input-method-v2. - Add
xx-input-method-v2protocol. - Add
wp_presentationprotocol. - Add
ext-foreign-toplevel-list-v1protocol. - Add
SimpleGlobal::from_boundmethod to construct from proxy object. - Add
Clonefor dmabuf feedback structs. - Implement
AsFdforRawPool. - Implement
From<RawPool>forOwnedFd.
- Update
-
0.19.215 Jul 2024 -
0.19.104 Jun 2024 -
0.19.003 Jun 2024Release notes
Open source →Breaking Changes
- Update
calloopto 0.13.0,calloop-wayland-sourceto0.3.0. - Add
surface_enter/surface_leavemethods toCompositorHandlertrait. - Require explicit unlock call in SessionLock.
- Pass layout to
KeyboardHandler::update_modifiers. - Update
wayland-protocols-*.
Fixed
- Require explicit unlock call in
SessionLockto avoid accidental unlock. - Work around touch up events delivered too late with certain Weston versions.
- Internal DnD event handlers are provided position and surface.
MultiPool::getreturns an overlap error when its appropriate.- Fix
delegate_*macros with customUserData.
Additions
- Method to make subsurface from surface.
- Track latest touch_down event serial.
- Try alternative cursor icon names.
- Implement support for xdg-activation.
- Implement support for session-lock.
Release notes
Open source →Breaking Changes
- Update
calloopto 0.13.0,calloop-wayland-sourceto0.3.0. - Add
surface_enter/surface_leavemethods toCompositorHandlertrait. - Require explicit unlock call in SessionLock.
- Pass layout to
KeyboardHandler::update_modifiers. - Update
wayland-protocols-*.
Fixed
- Require explicit unlock call in
SessionLockto avoid accidental unlock. - Work around touch up events delivered too late with certain Weston versions.
- Internal DnD event handlers are provided position and surface.
MultiPool::getreturns an overlap error when its appropriate.- Fix
delegate_*macros with customUserData.
Additions
- Method to make subsurface from surface.
- Track latest touch_down event serial.
- Try alternative cursor icon names.
- Implement support for xdg-activation.
- Implement support for session-lock.
- Update
-
0.18.108 Feb 2024Release notes
Open source →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. -
0.18.010 Oct 2023Release notes
Open source →Breaking Changes
ThemedPointer::set_cursornow takes onlyConnectionand&str.SeatState:get_pointer_with_them*now takesShmandWlSurfacefor the themed cursor.ThemedPointernow automatically releases the associatedWlPointer.CursorIconfromcursor-iconcrate is now used forset_cursorandFrame.wayland-csd-frameis now used for CSD types likeWindowState,DecorationsFrame, etc.- Added
CompositorHandle::transform_changedto listen for transform changes. xkeysym::Keysymis used as a keyboard key representation instead ofu32wayland-rsdependencies are updated to 0.31calloopdependency updated to 0.12.1- Take
OwnedFdinstead ofRawFdas argument toreceive_to_fdfunctions.
Fixed
- Crash when
wl_outputis below version 3.
Additions
- Make
DataDeviceManagerState'screate_{copy_paste,drag_and_drop}_sourceacceptIntoIterator<Item = T: ToString>. - Add support for
zwp_primary_selection_v1. CursorShapeManagerproviding handling forcursor-shape-v1protocol.SeatState::get_pointer_with_themewill now automatically usewp_cursor_shape_v1when available.- Add support for
xdg_shellversion 6. - Add support for
wl_surafce::preferred_buffer_scaleandwl_surface::preferred_buffer_transform.
Release notes
Open source →Breaking Changes
ThemedPointer::set_cursornow takes onlyConnectionand&str.SeatState:get_pointer_with_them*now takesShmandWlSurfacefor the themed cursor.ThemedPointernow automatically releases the associatedWlPointer.CursorIconfromcursor-iconcrate is now used forset_cursorandFrame.wayland-csd-frameis now used for CSD types likeWindowState,DecorationsFrame, etc.- Added
CompositorHandle::transform_changedto listen for transform changes. xkeysym::Keysymis used as a keyboard key representation instead ofu32wayland-rsdependencies are updated to 0.31calloopdependency updated to 0.12.1- Take
OwnedFdinstead ofRawFdas argument toreceive_to_fdfunctions.
Fixed
- Crash when
wl_outputis below version 3.
Additions
- Make
DataDeviceManagerState'screate_{copy_paste,drag_and_drop}_sourceacceptIntoIterator<Item = T: ToString>. - Add support for
zwp_primary_selection_v1. CursorShapeManagerproviding handling forcursor-shape-v1protocol.SeatState::get_pointer_with_themewill now automatically usewp_cursor_shape_v1when available.- Add support for
xdg_shellversion 6. - Add support for
wl_surafce::preferred_buffer_scaleandwl_surface::preferred_buffer_transform.
-
0.17.005 Apr 2023Release notes
Open source →Breaking Changes
wayland-rsdependencies are updated to 0.30 and all APIs have changed significantly as a result
Additions
xkbcommonis a new optional dependecy for keyboard handling gated by thexkbcommonfeature- pointer-constraints-unstable-v1 protocol support
- relative-pointer-unstable-v1 protocol support
- wlr-layer-shell-unstable-v1 protocol support
- OutputInfo includes logical size and logical position
- New SHM pool types
-
0.16.118 Sep 2023 -
0.16.018 Jun 2022Release notes
Open source →Breaking changes
calloopis updated to version 0.10, and the keyboard handling API is slightly changed as a result.
Additions
DataDevice::with_dndandDataOffer::receive_to_fdallow more flexible interaction with the data device abstraction- the output integration now supports version
4ofwl_output
-
0.15.410 Apr 2022 -
0.15.327 Dec 2021Release notes
Open source →Bugfixes
- SCTK now correctly interacts with the wayland socket being conccurently polled from other threads.
-
0.15.227 Oct 2021 -
0.15.123 Aug 2021Release notes
Open source →Bugfixes
- when not using
dlopenfeature,xkbdcommonlibrary is linked usingpkg-config
- when not using
-
0.15.010 Aug 2021Release notes
Open source →Breaking Changes
- Update
wayland-clientto 0.29
Additions
AutoMemPoolnow guarantees a minimum alignment of returned buffers
- Update
-
0.14.007 May 2021Release notes
Open source →Breaking Changes
ConceptFrameis removed, as well as theframescargo feature, and replaced by a more minimalisticFallbackFrame. Dependency onandrewandfontconfigis dropped in the process. If fancier decorations are needed, they should be implemented using theFrametrait.- Update to calloop 0.7:
calloop::Sourceis replaced bycalloop::RegistrationToken
Additions
AutoMemPooladded as an alternative to the existing SHM pools
-
0.13.004 Mar 2021Release notes
Open source →Breaking Changes
- Mark OutputInfo as
#[non_exhaustive]to allow future expansion without breaking API. - Batch output information updates instead of potentially making multiple callbacks for one logical change
- Add name and description fields to OutputInfo.
Additions
Window::start_interactive_moveto enable dragging the window with a user action
Bugfixes
ConceptFramenow correctly loads fonts using fontconfig
- Mark OutputInfo as
-
0.12.305 Mar 2021Nothing published for this version
-
0.12.230 Dec 2020Release notes
Open source →Changes
- Dependency on
byteorderwas replaced withu32::from_ne_bytes()
Bugfixes
- Don't crash when the font cannot be loaded to draw decorations
- Dependency on
-
0.12.108 Dec 2020 -
0.12.030 Sep 2020Release notes
Open source →Breaking Changes
- Update
wayland-clientto version 0.28 Environment::initwas renamed toEnvironment::new_pendinginit_default_environment!macro was renamed tonew_default_environment!
Additions
Environment::newmethod to fully bootstrap environment
- Update
-
0.11.030 Aug 2020Release notes
Open source →Breaking Changes
window.set_decorateis now taking mutable reference- Added
show_window_menuon aFrametrait to request a window menu for a window. ShowMenuenum variant toFrameRequestcreate_windownow also takesOption<ThemeManager>Frame::initnow also takesOption<ThemeManager>to reuse users'ThemeManager
Additions
WaylandSource::queueto access theEventQueueunderlying aWaylandSource- A window menu could be shown on right click on decorations for
ConceptFrame ConceptFramewill no longer change cursor over base surface ifThemeManagerwas provided
Changes
Window::set_titlenow truncates the provided string to 1024 bytes, to avoid blowing up the Wayland connectionConceptFrameis now hiding decorations forState::Fullscreen- Restore original size of fullscreened window on unfullscreen
- Explicitly setting
ClientSidedecorations will result inServerSideones being destroyed - Requesting
ServerSidedecorations inset_decoratewill now fallback toClientSideif the former are not available - Requesting
Nonedecorations ifServerSideare presented will result in settingClientSidedecorations with hidden frame ConceptFramewill useDisabledstyle for maximized button for non-resizeable frameConceptFramewill create subsurfaces for client side decorations only if a frame is visibleWindowwill restore original size after being tiled
Bugfixes
- Toggling between
ServerSideandNonedecorations raising protocol error - Precision in a rate of key repeat events
ThemeManagernot being clone-able even if it was stated in docs- Repeat rate not being disabled when receiving zero for
rateinwl_keyboard.repeat_info
-
0.10.010 Jul 2020Release notes
Open source →Breaking Changes
create_surfaceandcreate_surface_with_scale_callbacknow returnAttached<WlSurface>- Update
wayland-clientto0.27
Changes
andrewis updated to0.3.
Bugfixes
- seat: Seats with an empty name are no longer filtered out
-
0.9.103 May 2020Release notes
Open source →Additions
- keyboard: Update the keysyms list with new symbols
- Add primary selection helpers, which are included as part of default
Environment.
Changes
- surfaces: dpi-aware surface will no longer believe their DPI factor reverts to 1 when they become hidden.
BugFixes
- keyboard: Remove the unnecessary type parameter of
map_keyboard
-
0.9.022 Apr 2020Release notes
Open source →Breaking Changes
AutoThemeris removed as it is no longer necessary withwayland-cursor0.26calloopis updated to 0.6, and the adapters are modified in consequence
Additions
- Add
clone_seat_data()method as a shorthand to getSeatData
Bugfixes
- Surface lock held across scale factor callback deadlocks scale factor API.
-
0.8.109 Apr 2020Release notes
Open source →Additions
- Add
listen_for_outputs()which calls a provided callback on creation/removal of outputs. - Add an
OutputHandlingtrait makinglisten_for_outputs()available onEnvironment. - Introduce the
calloopcargo feature, enabled by default, controlling the support for the calloop event loop - Introduce the
framescargo feature, enabled by default, controlling the existence of providedFrameimplementations (currentlyConceptFrame) and the dependency onandrew
- Add
-
0.8.027 Feb 2020Release notes
Open source →Breaking Changes
Frameconfiguration is now done through aFrame::Configassociated type and theThemetrait is removed.- Merge
Frame::set_activeandFrame::set_maximizedintoFrame::set_states
Additions
- HiDPI scaling for decorations
Bugfixes
- HiDPI cursor icon position
- Fix graphical glitches in
ConceptFramedecoration drawing - Black pixel on left-bottom corner on CSD
- Remove a deadlock when trying to access the seat data from within the seat callback
-
0.7.007 Feb 2020Release notes
Open source →Breaking changes
- Upgrade to
wayland-client0.25. This changes the prototype of most callbacks by adding theDispatchDatamechanism for state sharing - Re-structure the lib API around the new
Environmenttype as an entry point (breaks a lot of things). This makes the crate follow a monolithic-modular structure centered on this type. keyboardis now a submodule ofseatkeyboardkey repetition is now handled as a calloop event sourcepointeris now a submodule ofseat- The initialization of
pointertheming utilities now require aThemeSpecargument instead of just a theme name, allowing control over the size of the cursors as well - Pointer theming utilities can no longer be shared across threads, as it was racy.
Windownow tracks new seats automatically (thenew_seatmethod is removed)Windowcan no longer be shared across threads, as it was racy.- Decorations management is now handled with the
Decorationsenum, for full control to clients.
Additions
- The
pointertheming will now read theXCURSOR_THEMEandXCURSOR_SIZEenvironment variables to figure the default theme pointertheming utilities now handle HiDPI monitors- SCTK now uses the
logcrate to log its warning and error messages - Data offers
ReadPipescan be inserted in a calloop event loop as an event source - The
WaylandSourcewrapper allows awayland-clientEventQueueto be inserted into a calloop event source.
- Upgrade to
-
0.6.611 Feb 2020Nothing published for this version
-
0.6.507 Feb 2020Nothing published for this version
-
0.6.427 Aug 2019Release notes
Open source →Bugfixes
- Keyboard input breaking when
LC_ALL,LC_CTYPEorLANGare set to an empty string - UTF8 interpretation no longer stops working if loading the compose table failed
- Keyboard input breaking when
-
0.6.329 Jun 2019 -
0.6.213 Jun 2019 -
0.6.107 Apr 2019Release notes
Open source →- Additional theming capability on
ConceptFramevia theThemetrait: optional methodsget_<button-name>_button_icon_colorallows the stroke color on the buttons to be customized beyond what the secondary color allows. Button color methods now affect theConceptFrame's fill behind the buttons. - Fix the firing of
Configureevents in window abstraction.
- Additional theming capability on
-
0.6.018 Feb 2019 -
0.5.005 Feb 2019Release notes
Open source →Breaking changes
- Update the crate to
wayland-clientversion 0.22 - Window:
set_title()now requires a manualrefresh()for the change to take effect
Bugfixes
- Keyboard: fix system repeat rate as repeats per second rather then millisecond delay between repeats
- Surface: fix panic in
compute_dpi_factor()by only computing the dpi factor on surfaces known to the OutputMgr
- Update the crate to
-
0.4.615 Jun 2019Nothing published for this version
-
0.4.505 Mar 2019Nothing published for this version
-
0.4.427 Dec 2018Release notes
Open source →- Shell: expose shell interface and add
create_shell_surfacetoEnvironment. - Fix build failure on big endian targets
- Shell: expose shell interface and add
-
0.4.303 Dec 2018Release notes
Open source →- Update dependencies: rand, memmap, nix and image
- Surface:
create_surfaceandget_dpi_factorutilities for creating dpi aware surfaces.
-
0.4.214 Nov 2018 -
0.4.106 Nov 2018Release notes
Open source →- Window: always request server-side decorations if available, otherwise ther compositor never configures us
- keyboard: only compute utf8 value on keypress, not key release. Otherwise it confuses
xkb_compose.
-
0.4.009 Oct 2018Release notes
Open source →- BasicFrame: Display the title of the window in the window header
- Pass
set_selection()Option<DataSource>andAutoThemer::init()Proxy<WlShm>by reference - Window: add
set_theme()function which takes an object implementing the traitThemeto adjust the look of window decorations - Window: add new
ConceptFramewhich provides an alternative to theBasicFramewindow decorations - MemPool: add
mmapmethod - [Breaking] Keyboard: remove
modifiersfield fromkeyboard::Event::Enter,keyboard::Event::Keyandkeyboard::KeyRepeatEvent - [Breaking] Keyboard: add
keyboard::Event::Modifiers - [Breaking] Upgrade to wayland-rs 0.21
- Keyboard: end key repetition when the keyboard loses focus
-
0.3.017 Aug 2018Release notes
Open source →- Window: the minimum window width is set to 2 pixels to circumvent a bug in mutter - https://gitlab.gnome.org/GNOME/mutter/issues/259
- [Breaking] MemPool: MemPool now requires an implementation to be called when the pool becomes free
- [Breaking] DoubleMemPool: DoubleMemPool now requires an implementation to be called when one of its pools becomes free
- [Breaking] DoubleMemPool:
swap()is removed aspool()will now automatically track and return any free pools avaliable or return None - Keyboard: add key repetition with 'map_keyboard_auto_with_repeat' and 'map_keyboard_rmlvo_with_repeat'
- Window: add
init_with_decorationsto allow the use of server-side decorations
-
0.2.614 Jul 2018Release notes
Open source →Big thanks to @trimental for improving the visual look of the window decorations:
- BasicFrame: remove side and bottom border decorations
- BasicFrame: round window corners
-
0.2.510 Jul 2018Release notes
Open source →- Keyboard: try to load
libxkbcommon.so.0as well to improve compatibility
- Keyboard: try to load
-
0.2.426 Jun 2018Release notes
Open source →- Window: notify the compositor of our dimensions to avoid placement glitches
-
0.2.313 Jun 2018 -
0.2.208 Jun 2018Release notes
Open source →- BasicFrame: don't desync the subsurface from the main one. This avoids graphical glitches where the borders are not drawn exactly the same size as the contents.
- Window: add
set_resizable, (minor breaking change of theFrametrait by adding a new method)
-
0.2.103 May 2018Release notes
Open source →- Add
DoubleMemPoolfor double buffering, and use it to improve the drawing performance ofBasicFrame.
- Add
-
0.2.029 Apr 2018 -
0.1.026 Apr 2018Release notes
Open source →Initial version, including:
- basic environment manager
- keyboard keymap handling
- basic window decoration