PackageTrack
Sign in Get early access

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 2026
2019 2020 2021 2022 2023 2024 2025 2026
Release Pre-release

Releases

latest 53
  1. 0.21.1 23 Jul 2026
    Release notes
    • Fix trait bound for WlTouch dispatch implementation
    Open source →
    Release notes
    • Fix trait bound for WlTouch dispatch implementation
    Open source →
  2. 0.21.0 20 Jul 2026
    Release notes

    Breaking Changes

    • *DataExt traits removed; now *Data types wrap custom data.
      • Any calls to Proxy::data will need to be updated for new type.
    • All delegate_*! macros except delegate_registry! replaced with single
      delegate_dispatch2! in preparation for future wayland-rs release.

    Fixed

    • Prevent popup reposition request if xdg_popup version is below 3.

    Additions

    • Add support for xdg_wm_dialog v1.
    • Add support for xx_input_method v1.
    • Add support for xx_keyboard_filter v1.
    • Add support for ext-background-effect v1.
    Open source →
    Release notes

    Breaking Changes

    • *DataExt traits removed; now *Data types wrap custom data.
      • Any calls to Proxy::data will need to be updated for new type.
    • All delegate_*! macros except delegate_registry! replaced with single delegate_dispatch2! in preparation for future wayland-rs release.

    Fixed

    • Prevent popup reposition request if xdg_popup version is below 3.

    Additions

    • Add support for xdg_wm_dialog v1.
    • Add support for xx_input_method v1.
    • Add support for xx_keyboard_filter v1.
    • Add support for ext-background-effect v1.
    Open source →
  3. 0.20.0 08 Aug 2025
    Release notes

    Breaking Changes

    • Update calloop to 0.14.0, calloop-wayland-source to 0.4.0.
    • Update rustix to 1.0.7.
    • Update thiserror to 2.0.12.
    • Add a raw_modifiers argument to update_modifiers.

    Fixed

    • Fix keyboard sending press events when repeat is disabled.

    Additions

    • Add support for wl_keyboard v10.
    • Add support for wl_pointer v9.
    • Add support for wl_pointer v8.
    • Add support for wp_cursor_shape_manager_v1 v2.
    • Add partial support for zwp-input-method-v2.
    • Add xx-input-method-v2 protocol.
    • Add wp_presentation protocol.
    • Add ext-foreign-toplevel-list-v1 protocol.
    • Add SimpleGlobal::from_bound method to construct from proxy object.
    • Add Clone for dmabuf feedback structs.
    • Implement AsFd for RawPool.
    • Implement From<RawPool> for OwnedFd.
    Open source →
    Release notes

    Breaking Changes

    • Update calloop to 0.14.0, calloop-wayland-source to 0.4.0.
    • Update rustix to 1.0.7.
    • Update thiserror to 2.0.12.
    • Add a raw_modifiers argument to update_modifiers.

    Fixed

    • Fix keyboard sending press events when repeat is disabled.

    Additions

    • Add support for wl_keyboard v10.
    • Add support for wl_pointer v9.
    • Add support for wl_pointer v8.
    • Add support for wp_cursor_shape_manager_v1 v2.
    • Add partial support for zwp-input-method-v2.
    • Add xx-input-method-v2 protocol.
    • Add wp_presentation protocol.
    • Add ext-foreign-toplevel-list-v1 protocol.
    • Add SimpleGlobal::from_bound method to construct from proxy object.
    • Add Clone for dmabuf feedback structs.
    • Implement AsFd for RawPool.
    • Implement From<RawPool> for OwnedFd.
    Open source →
  4. 0.19.2 15 Jul 2024
    Release notes

    Fixed

    • Fix crash when compositor sends event to dead wl_output.
    Open source →
    Release notes

    Fixed

    • Fix crash when compositor sends event to dead wl_output.
    Open source →
  5. 0.19.1 04 Jun 2024
    Release notes

    Additions

    • clone derive for CompositorState
    Open source →
    Release notes

    Additions

    • clone derive for CompositorState
    Open source →
  6. 0.19.0 03 Jun 2024
    Release notes

    Breaking Changes

    • Update calloop to 0.13.0, calloop-wayland-source to 0.3.0.
    • Add surface_enter/surface_leave methods to CompositorHandler trait.
    • Require explicit unlock call in SessionLock.
    • Pass layout to KeyboardHandler::update_modifiers.
    • Update wayland-protocols-*.

    Fixed

    • Require explicit unlock call in SessionLock to 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::get returns an overlap error when its appropriate.
    • Fix delegate_* macros with custom UserData.

    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.
    Open source →
    Release notes

    Breaking Changes

    • Update calloop to 0.13.0, calloop-wayland-source to 0.3.0.
    • Add surface_enter/surface_leave methods to CompositorHandler trait.
    • Require explicit unlock call in SessionLock.
    • Pass layout to KeyboardHandler::update_modifiers.
    • Update wayland-protocols-*.

    Fixed

    • Require explicit unlock call in SessionLock to 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::get returns an overlap error when its appropriate.
    • Fix delegate_* macros with custom UserData.

    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.
    Open source →
  7. 0.18.1 08 Feb 2024
    Release notes

    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.
    
    Open source →
  8. 0.18.0 10 Oct 2023
    Release notes

    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.
    • Added CompositorHandle::transform_changed to listen for transform changes.
    • xkeysym::Keysym is used as a keyboard key representation instead of u32
    • wayland-rs dependencies are updated to 0.31
    • calloop dependency updated to 0.12.1
    • Take OwnedFd instead of RawFd as argument to receive_to_fd functions.

    Fixed

    • Crash when wl_output is below version 3.

    Additions

    • Make DataDeviceManagerState's create_{copy_paste,drag_and_drop}_source accept IntoIterator<Item = T: ToString>.
    • Add support for 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.
    • Add support for xdg_shell version 6.
    • Add support for wl_surafce::preferred_buffer_scale and wl_surface::preferred_buffer_transform.
    Open source →
    Release notes

    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.
    • Added CompositorHandle::transform_changed to listen for transform changes.
    • xkeysym::Keysym is used as a keyboard key representation instead of u32
    • wayland-rs dependencies are updated to 0.31
    • calloop dependency updated to 0.12.1
    • Take OwnedFd instead of RawFd as argument to receive_to_fd functions.

    Fixed

    • Crash when wl_output is below version 3.

    Additions

    • Make DataDeviceManagerState's create_{copy_paste,drag_and_drop}_source accept IntoIterator<Item = T: ToString>.
    • Add support for 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.
    • Add support for xdg_shell version 6.
    • Add support for wl_surafce::preferred_buffer_scale and wl_surface::preferred_buffer_transform.
    Open source →
  9. 0.17.0 05 Apr 2023
    Release notes

    Breaking Changes

    • wayland-rs dependencies are updated to 0.30 and all APIs have changed significantly as a result

    Additions

    • xkbcommon is a new optional dependecy for keyboard handling gated by the xkbcommon feature
    • 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
    Open source →
  10. 0.16.1 18 Sep 2023
    Release notes

    smithay-client-toolkit version 0.16.1

    Open source →
  11. 0.16.0 18 Jun 2022
    Release notes

    Breaking changes

    • calloop is updated to version 0.10, and the keyboard handling API is slightly changed as a result.

    Additions

    • DataDevice::with_dnd and DataOffer::receive_to_fd allow more flexible interaction with the data device abstraction
    • the output integration now supports version 4 of wl_output
    Open source →
  12. 0.15.4 10 Apr 2022
    Release notes

    Bugfixes

    • Window's wl_pointer not being relased on Drop.
    Open source →
  13. 0.15.3 27 Dec 2021
    Release notes

    Bugfixes

    • SCTK now correctly interacts with the wayland socket being conccurently polled from other threads.
    Open source →
  14. 0.15.2 27 Oct 2021
    Release notes
    • Most types are now Debug
    Open source →
  15. 0.15.1 23 Aug 2021
    Release notes

    Bugfixes

    • when not using dlopen feature, xkbdcommon library is linked using pkg-config
    Open source →
  16. 0.15.0 10 Aug 2021
    Release notes

    Breaking Changes

    • Update wayland-client to 0.29

    Additions

    • AutoMemPool now guarantees a minimum alignment of returned buffers
    Open source →
  17. 0.14.0 07 May 2021
    Release notes

    Breaking Changes

    • 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.
    • Update to calloop 0.7: calloop::Source is replaced by calloop::RegistrationToken

    Additions

    • AutoMemPool added as an alternative to the existing SHM pools
    Open source →
  18. 0.13.0 04 Mar 2021
    Release notes

    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_move to enable dragging the window with a user action

    Bugfixes

    • ConceptFrame now correctly loads fonts using fontconfig
    Open source →
  19. 0.12.3 05 Mar 2021

    Nothing published for this version

  20. 0.12.2 30 Dec 2020
    Release notes

    Changes

    • Dependency on byteorder was replaced with u32::from_ne_bytes()

    Bugfixes

    • Don't crash when the font cannot be loaded to draw decorations
    Open source →
  21. 0.12.1 08 Dec 2020
    Release notes

    Changes

    • Unmaintained memmap dependency is replaced with memmap2
    Open source →
  22. 0.12.0 30 Sep 2020
    Release notes

    Breaking Changes

    • Update wayland-client to version 0.28
    • Environment::init was renamed to Environment::new_pending
    • init_default_environment! macro was renamed to new_default_environment!

    Additions

    • Environment::new method to fully bootstrap environment
    Open source →
  23. 0.11.0 30 Aug 2020
    Release notes

    Breaking Changes

    • window.set_decorate is now taking mutable reference
    • Added show_window_menu on a Frame trait to request a window menu for a window.
    • ShowMenu enum variant to FrameRequest
    • create_window now also takes Option<ThemeManager>
    • Frame::init now also takes Option<ThemeManager> to reuse users' ThemeManager

    Additions

    • WaylandSource::queue to access the EventQueue underlying a WaylandSource
    • A window menu could be shown on right click on decorations for ConceptFrame
    • ConceptFrame will no longer change cursor over base surface if ThemeManager was provided

    Changes

    • Window::set_title now truncates the provided string to 1024 bytes, to avoid blowing up the Wayland connection
    • ConceptFrame is now hiding decorations for State::Fullscreen
    • Restore original size of fullscreened window on unfullscreen
    • Explicitly setting ClientSide decorations will result in ServerSide ones being destroyed
    • Requesting ServerSide decorations in set_decorate will now fallback to ClientSide if the former are not available
    • Requesting None decorations if ServerSide are presented will result in setting ClientSide decorations with hidden frame
    • ConceptFrame will use Disabled style for maximized button for non-resizeable frame
    • ConceptFrame will create subsurfaces for client side decorations only if a frame is visible
    • Window will restore original size after being tiled

    Bugfixes

    • Toggling between ServerSide and None decorations raising protocol error
    • Precision in a rate of key repeat events
    • ThemeManager not being clone-able even if it was stated in docs
    • Repeat rate not being disabled when receiving zero for rate in wl_keyboard.repeat_info
    Open source →
  24. 0.10.0 10 Jul 2020
    Release notes

    Breaking Changes

    • create_surface and create_surface_with_scale_callback now return Attached<WlSurface>
    • Update wayland-client to 0.27

    Changes

    • andrew is updated to 0.3.

    Bugfixes

    • seat: Seats with an empty name are no longer filtered out
    Open source →
  25. 0.9.1 03 May 2020
    Release notes

    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
    Open source →
  26. 0.9.0 22 Apr 2020
    Release notes

    Breaking Changes

    • AutoThemer is removed as it is no longer necessary with wayland-cursor 0.26
    • calloop is updated to 0.6, and the adapters are modified in consequence

    Additions

    • Add clone_seat_data() method as a shorthand to get SeatData

    Bugfixes

    • Surface lock held across scale factor callback deadlocks scale factor API.
    Open source →
  27. 0.8.1 09 Apr 2020
    Release notes

    Additions

    • Add listen_for_outputs() which calls a provided callback on creation/removal of outputs.
    • Add an OutputHandling trait making listen_for_outputs() available on Environment.
    • Introduce the calloop cargo feature, enabled by default, controlling the support for the calloop event loop
    • Introduce the frames cargo feature, enabled by default, controlling the existence of provided Frame implementations (currently ConceptFrame) and the dependency on andrew
    Open source →
  28. 0.8.0 27 Feb 2020
    Release notes

    Breaking Changes

    • Frame configuration is now done through a Frame::Config associated type and the Theme trait is removed.
    • Merge Frame::set_active and Frame::set_maximized into Frame::set_states

    Additions

    • HiDPI scaling for decorations

    Bugfixes

    • HiDPI cursor icon position
    • Fix graphical glitches in ConceptFrame decoration drawing
    • Black pixel on left-bottom corner on CSD
    • Remove a deadlock when trying to access the seat data from within the seat callback
    Open source →
  29. 0.7.0 07 Feb 2020
    Release notes

    Breaking changes

    • Upgrade to wayland-client 0.25. This changes the prototype of most callbacks by adding the DispatchData mechanism for state sharing
    • Re-structure the lib API around the new Environment 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 seat
    • keyboard key repetition is now handled as a calloop event source
    • pointer is now a submodule of seat
    • The initialization of pointer theming utilities now require a ThemeSpec argument 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.
    • Window now tracks new seats automatically (the new_seat method is removed)
    • Window can no longer be shared across threads, as it was racy.
    • Decorations management is now handled with the Decorations enum, for full control to clients.

    Additions

    • The pointer theming will now read the XCURSOR_THEME and XCURSOR_SIZE environment variables to figure the default theme
    • pointer theming utilities now handle HiDPI monitors
    • SCTK now uses the log crate to log its warning and error messages
    • Data offers ReadPipescan be inserted in a calloop event loop as an event source
    • The WaylandSource wrapper allows a wayland-client EventQueue to be inserted into a calloop event source.
    Open source →
  30. 0.6.6 11 Feb 2020

    Nothing published for this version

  31. 0.6.5 07 Feb 2020

    Nothing published for this version

  32. 0.6.4 27 Aug 2019
    Release notes

    Bugfixes

    • Keyboard input breaking when LC_ALL, LC_CTYPE or LANG are set to an empty string
    • UTF8 interpretation no longer stops working if loading the compose table failed
    Open source →
  33. 0.6.3 29 Jun 2019
    Release notes
    • Keyboard: fix extra key repeat when using also releasing a modifier
    Open source →
  34. 0.6.2 13 Jun 2019
    Release notes
    • Update Nix to 0.14
    Open source →
  35. 0.6.1 07 Apr 2019
    Release notes
    • Additional theming capability on 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.
    • Fix the firing of Configure events in window abstraction.
    Open source →
  36. 0.6.0 18 Feb 2019
    Release notes

    Breaking changes

    • Upgrade to wayland-client version 0.23
    Open source →
  37. 0.5.0 05 Feb 2019
    Release notes

    Breaking changes

    • Update the crate to wayland-client version 0.22
    • Window: set_title() now requires a manual refresh() 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
    Open source →
  38. 0.4.6 15 Jun 2019

    Nothing published for this version

  39. 0.4.5 05 Mar 2019

    Nothing published for this version

  40. 0.4.4 27 Dec 2018
    Release notes
    • Shell: expose shell interface and add create_shell_surface to Environment.
    • Fix build failure on big endian targets
    Open source →
  41. 0.4.3 03 Dec 2018
    Release notes
    • Update dependencies: rand, memmap, nix and image
    • Surface: create_surface and get_dpi_factor utilities for creating dpi aware surfaces.
    Open source →
  42. 0.4.2 14 Nov 2018
    Release notes
    • Fix compilation on BSD systems
    Open source →
  43. 0.4.1 06 Nov 2018
    Release notes
    • 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.
    Open source →
  44. 0.4.0 09 Oct 2018
    Release notes
    • BasicFrame: Display the title of the window in the window header
    • Pass set_selection() Option<DataSource> and AutoThemer::init() Proxy<WlShm> by reference
    • Window: add set_theme() function which takes an object implementing the trait Theme to adjust the look of window decorations
    • Window: add new ConceptFrame which provides an alternative to the BasicFrame window decorations
    • MemPool: add mmap method
    • [Breaking] Keyboard: remove modifiers field from keyboard::Event::Enter, keyboard::Event::Key and keyboard::KeyRepeatEvent
    • [Breaking] Keyboard: add keyboard::Event::Modifiers
    • [Breaking] Upgrade to wayland-rs 0.21
    • Keyboard: end key repetition when the keyboard loses focus
    Open source →
  45. 0.3.0 17 Aug 2018
    Release notes
    • 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 as pool() 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_decorations to allow the use of server-side decorations
    Open source →
  46. 0.2.6 14 Jul 2018
    Release notes

    Big thanks to @trimental for improving the visual look of the window decorations:

    • BasicFrame: remove side and bottom border decorations
    • BasicFrame: round window corners
    Open source →
  47. 0.2.5 10 Jul 2018
    Release notes
    • Keyboard: try to load libxkbcommon.so.0 as well to improve compatibility
    Open source →
  48. 0.2.4 26 Jun 2018
    Release notes
    • Window: notify the compositor of our dimensions to avoid placement glitches
    Open source →
  49. 0.2.3 13 Jun 2018
    Release notes
    • Update nix dependency to be fix build on FreeBSD (even if we can't run)
    Open source →
  50. 0.2.2 08 Jun 2018
    Release notes
    • 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 the Frame trait by adding a new method)
    Open source →
  51. 0.2.1 03 May 2018
    Release notes
    • Add DoubleMemPool for double buffering, and use it to improve the drawing performance of BasicFrame.
    Open source →
  52. 0.2.0 29 Apr 2018
    Release notes
    • Breaking OutputMgr: expose wl_output global id
    Open source →
  53. 0.1.0 26 Apr 2018
    Release notes

    Initial version, including:

    • basic environment manager
    • keyboard keymap handling
    • basic window decoration
    Open source →

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive