github amnweb/yasb v2.0.8

55 minutes ago
image

In YASB 2.0.8, the Notifications widget now shows your notifications in a menu grouped by app instead of just a count. You can click one to open the app, clear them per app, and see sender photos and toast images.

The Window Switcher gained an Alt+Tab style keybind with optional live thumbnail previews, and the Windows Desktops widget can switch desktops with the mouse wheel and highlights desktops that have open windows.

We also fixed several crashes and freezes: the Taskbar no longer crashes when grouped windows close quickly, Quick Launch no longer freezes on startup or rebuilds constantly, and the Volume widget keeps updating its value. Tray icon order and pins now survive a restart, and the GPU widget reports utilization the same way Task Manager does. Full changelog below.

New Features

  • show notifications in a menu 9cf9a52
  • Alt+Tab style keybind and live window previews 2e67906
  • move COM to its own thread, add populated class 0f5b6d5
  • report Pyright results in PR comments and job summaries 4c8a45a
  • add DropDownButton with menu flyout 58dc910
  • redesign theme gallery with featured content and install flow af7b448
  • add TextBox component and align_selected option to DropDown ebfc058
  • open gallery at the current wallpaper 707d524
  • add source option to pick the output device (#1131) 71afc82

Bugfixes

  • forget a grouped window's animation when it leaves the group cd85ef1
  • allow renaming active desktop without a clicked button 25c7186
  • show task dialog as non-blocking popup near cursor 14b1641
  • use PackageCatalog events instead of watching the Packages folder e617e0f
  • read the toast activator of the app the AUMID names 2d8e3f1
  • show web toast images Windows downloaded 6fe27c9
  • read packaged apps' toast activator from manifest aebb544
  • sort notifications by creation time instead of reversing the list 5255244
  • fix startup freeze on descriptions scan 60b56b5
  • keep volume change callback alive across startup race 2507ef8
  • keep tray icon order and pins after restart 9fd56db
  • correct ssl verification logic and improve cert parsing 08181c9
  • improve mouse hover detection for window focus 5fd4161
  • prevent auto-hide from setting monitor hwnd to None 57cd65a
  • reset stale COM objects when Explorer restarts a3f9fd4
  • get icons and titles from more websites 78d602c
  • don't wait on the window you click 29b5b57
  • compute utilization the same way as Task Manager 75c087f
  • audit widget pages against validation models and fix formatting a237644
  • defer taskbar connection until widget is shown 7cd2535
  • persist worker result and initialize label on startup f0460fd
  • avoid unrelated queries on subscription events 169afdf
  • drop duplicate annotations flagged by basedpyright 3fd3f89
  • extract PR artifacts outside the workspace 5c887f6
  • correct ctypes declarations that disagree with the Windows SDK 47fb7a3
  • support lazy continuation lines in blockquotes 127e39d
  • disable CSS engine box-shadow on bar frame 48df63f
  • respect EXIF orientation in gallery and engine 5520b42
  • delete removed workspace widgets instead of detaching them 9afaddc
  • run komorebic without cmd.exe and fix invalid arguments c5c12fd
  • hide on idle with hide() and service-owned timers ef83cdd
  • keep widgets hidden from the context menu hidden 941e180
  • let self-hiding widgets hide while the bar is autohidden 9aff5b4
  • elide wifi label if it's too long (#1127) c0caaa9
  • stop bottom adaptive bar jumping when edgeradius changes 046ac67
  • draw adaptive border along the side facing the desktop 5ce4609
  • stop bar widgets from creating native windows 18283d8
  • set correct packing for DWM_THUMBNAIL_PROPERTIES 248253c
  • collect grouper child keybindings regardless of config order 17fabdd
  • handle display scale changes in bar and widgets 2e87be5
  • clip artwork background to popup rounded shape 7ce0d44
  • stop event listener without blocking on pending pipe connect b3267bc
  • keep adaptive rail when no island is left e8f8994
  • use module-level REGION_FIELDS constant 2ec985c

Performance Improvements

  • cache app info by notification id e4c091c
  • don't look up app names when matching windows 228357b
  • avoid spawning komorebic, PowerShell and cmd.exe 1884933

Refactors

  • use Field const instead of Literal for widget type schema 04153be
  • allow customizing the fade animation duration 963f600
  • clean up utils and share the CLI pipe helpers a420194
  • remove redundant binding and native window tests 143afd0
  • replace win32com with comtypes in the backup task a12217e
  • replace win32com automation with comtypes d658fa1
  • replace the pywin32 shell interfaces with the bindings 2822516
  • replace win32security with the bindings 397bc56
  • replace the pywin32 pipe and event modules with the bindings 4c8111c
  • replace win32api with the bindings 1edc9e4
  • replace win32gui and win32process with the bindings 4ef4eef
  • replace win32con with constants.py 0a4fbbc
  • share terminate_process between providers d76bada
  • move all Windows declarations into the bindings b04fee7
  • remove obsolete icon cache cleanup from reset command e04c42e
  • clean up comments and rename resolve.py to sources.py 8157065
  • one icon service for all widgets f638259
  • adopt Pyright strict mode across the codebase 4d6f6fb
  • systray cleanup and types 13f65e9
  • call the user32 wrappers in window_actions 152f977
  • use shell_open for language settings shortcut 636da84
  • use shell_open for cloud and themes shortcuts f8229fa

Documentation Changes

  • rewrite test suite README and improve missing header hints 63ad8c5

Tests

  • keep the notification tests in one file 471e840
  • require TLS 1.2 in HTTPS test server ff3d431
  • remove client query test b0645c5
  • add pytest suite 7cb12f5

Chores

  • bump holidays from 0.106 to 0.107 daf2584
  • bump certifi from 2026.7.22 to 2026.10.19 9fd2314
  • bump pydantic from 2.13.5 to 2.14.1 bfa0d9e
  • bump pillow from 12.3.0 to 13.0.0 b3f5c13
  • bump tzdata from 2026.4 to 2026.5 4c039e9
  • pin tooling versions and skip builds for dependabot PRs e64748a
  • bump holidays from 0.105 to 0.106 7d7cc28
  • remove pywin32 00d1fa0
  • bump cx-freeze from 8.6.4 to 8.7.2 dec2d23
  • enable pytest in the Testing panel 1cbc7e5
  • bump python-dotenv from 1.2.3 to 1.2.4 a68b544
  • bump pycaw from 20260921 to 20260927 b5829a4
  • bump pycaw from 20251023 to 20260921 cb6b8f1
  • bump comtypes from 1.4.16 to 1.4.17 895bc1d
  • bump holidays from 0.103 to 0.105 (#1134) d6d1e6d
  • bump tzdata from 2026.3 to 2026.4 11a011e
  • bump pydantic from 2.13.4 to 2.13.5 d2d5db2

Other Changes

  • Merge pull request #1201 from JanDeDobbeleer/fix/taskbar-deleted-animation-race 538959f
  • Merge pull request #1194 from amnweb/feat/notifications-menu d0969b4
  • Merge pull request #1199 from amnweb/perf/quick-launch 7f8db58
  • Merge pull request #1196 from esershnr/fix/notifications-packaged-activator 434fbf3
  • Merge pull request #1195 from amnweb/dependabot/pip/holidays-0.107 467c17a
  • Merge pull request #1191 from amnweb/fix/systray-icon-order 3cc6d54
  • Merge pull request #1192 from kureysalp/fix/volume-callback-race c2b3856
  • Merge pull request #1193 from Video-Nomad/fix/quick-launch-startup-freeze 95415a5
  • Merge pull request #1177 from amnweb/dependabot/pip/pydantic-2.14.1 9fa4015
  • Merge pull request #1180 from amnweb/feat/windows-desktops-com-thread 4c6f13b
  • Merge pull request #1183 from amnweb/refactor/window-switcher 0c3df55
  • Merge pull request #1186 from Video-Nomad/fix/glazewm-bar-auto-hide-bug fae3bde
  • Merge pull request #1187 from amnweb/dependabot/pip/pillow-13.0.0 16a2905
  • Merge pull request #1166 from amnweb/dependabot/pip/tzdata-2026.5 955abdb
  • Merge pull request #1165 from amnweb/dependabot/pip/holidays-0.106 9055718
  • Merge pull request #1160 from chisewaguri/fix/glazewm-ipc-query-storm 23c31d8
  • Merge pull request #1163 from wekz/fix/gpu-utilization-task-manager 08703b4
  • Merge pull request #1174 from amnweb/perf/app-optimization-3 6938a87
  • Merge pull request #1173 from amnweb/perf/app-optimization-2 07e749c
  • Merge pull request #1169 from amnweb/perf/app-optimization-1 6fc91db
  • Merge pull request #1159 from amnweb/refactor/strict-typing cbe1519
  • Merge pull request #1157 from Video-Nomad/refactor/systray-cleanup-and-types 7fee935
  • Merge pull request #1154 from amnweb/dependabot/pip/python-dotenv-1.2.4 5e86c6d
  • Merge pull request #1153 from amnweb/dependabot/pip/pycaw-20260927 59dab50
  • Merge pull request #1152 from amnweb/feat/test-suite f6d1e37
  • Merge pull request #1151 from amnweb/fix/win32-ctypes-declarations 4eafc8d
  • Merge pull request #1144 from amnweb/feat/wallpapers-gallery-current c5ed91d
  • Merge pull request #1143 from amnweb/perf/startup-child-processes 0651b0d
  • Merge pull request #1142 from amnweb/fix/komorebi-workspace-icons 8e565b8
  • Merge pull request #1148 from Video-Nomad/fix/disable-box-shadow-on-bar-frame 8b275f2
  • Merge pull request #1113 from amnweb/fix/komorebi-pipe 42047b3
  • Merge pull request #1136 from amnweb/dependabot/pip/pycaw-20260921 917ecb4
  • Merge pull request #1133 from amnweb/dependabot/pip/comtypes-1.4.17 c4913fd
  • Merge pull request #1128 from amnweb/dependabot/pip/tzdata-2026.4 08c4bda
  • Merge pull request #1098 from amnweb/dependabot/pip/pydantic-2.13.5 099d6cd

What's Changed

  • fix(wifi): elide wifi label if it's too long by @Video-Nomad in #1127
  • chore(deps): bump holidays from 0.103 to 0.105 by @dependabot[bot] in #1134
  • feat(audio-visualizer): add source option to pick the output device by @amnweb in #1131
  • chore(deps): bump pydantic from 2.13.4 to 2.13.5 by @dependabot[bot] in #1098
  • chore(deps): bump tzdata from 2026.3 to 2026.4 by @dependabot[bot] in #1128
  • chore(deps): bump comtypes from 1.4.16 to 1.4.17 by @dependabot[bot] in #1133
  • chore(deps): bump pycaw from 20251023 to 20260921 by @dependabot[bot] in #1136
  • fix(komorebi): stop event listener without blocking on pending pipe connect by @amnweb in #1113
  • fix(bar): disable CSS engine box-shadow on bar frame by @Video-Nomad in #1148
  • fix(komorebi): delete removed workspace widgets instead of detaching them by @amnweb in #1142
  • perf(startup): avoid spawning komorebic, PowerShell and cmd.exe by @amnweb in #1143
  • feat(wallpapers): open gallery at the current wallpaper by @amnweb in #1144
  • fix(win32): correct ctypes declarations that disagree with the Windows SDK by @amnweb in #1151
  • test: add pytest suite by @amnweb in #1152
  • chore(deps): bump pycaw from 20260921 to 20260927 by @dependabot[bot] in #1153
  • chore(deps): bump python-dotenv from 1.2.3 to 1.2.4 by @dependabot[bot] in #1154
  • refactor(systray): systray cleanup and types by @Video-Nomad in #1157
  • refactor: switch YASB to strict typing by @amnweb in #1159
  • perf: shared icon service and non-blocking window actions by @amnweb in #1169
  • refactor(win32): move all Windows declarations into the bindings by @amnweb in #1173
  • refactor(win32): replace pywin32 with the bindings and comtypes by @amnweb in #1174
  • fix(gpu): compute utilization the same way as Task Manager by @wekz in #1163
  • fix(glazewm): avoid unrelated queries on subscription events by @chisewaguri in #1160
  • chore(deps): bump holidays from 0.105 to 0.106 by @dependabot[bot] in #1165
  • chore(deps): bump tzdata from 2026.4 to 2026.5 by @dependabot[bot] in #1166
  • chore(deps): bump pillow from 12.3.0 to 13.0.0 by @dependabot[bot] in #1187
  • fix(bar_helper): prevent auto-hide from setting monitor hwnd to None on various widgets by @Video-Nomad in #1186
  • feat(window_switcher): Alt+Tab style keybind and live window previews by @amnweb in #1183
  • feat(windows_desktops): move COM to its own thread, add populated class by @amnweb in #1180
  • chore(deps): bump pydantic from 2.13.5 to 2.14.1 by @dependabot[bot] in #1177
  • fix(quick_launch): fix startup freeze on descriptions scan by @Video-Nomad in #1193
  • fix(volume): keep volume change callback alive across startup race by @kureysalp in #1192
  • fix(systray): keep tray icon order and pins after restart by @amnweb in #1191
  • chore(deps): bump holidays from 0.106 to 0.107 by @dependabot[bot] in #1195
  • fix(notifications): open WhatsApp chats and show sender photos by @esershnr in #1196
  • fix(quick_launch): use PackageCatalog events instead of watching the Packages folder by @amnweb in #1199
  • feat(notifications): show notifications in a menu by @amnweb in #1194
  • fix(taskbar): stop crash when an animation is deleted with its window button by @JanDeDobbeleer in #1201

New Contributors

Full Changelog: v2.0.7...v2.0.8

Don't miss a new yasb release

NewReleases is sending notifications on new releases.