Here we are with a new release! Thanks, everyone, for the support! 🎉
A brief recap of the major changes:
- 🔔 Notification system: optionally works as a notification daemon
- 📺 OSD system: optionally show OSD information through the new IPC system
- 🔌 IPC over a Unix socket: a way to control ashell externally
- 🌍 Internationalization: the foundation for localized formatting and translations
- ✨ Experimental animations: work-in-progress animation support
- ⚙️ Official iced: thanks to
iced_layershell, we now use the official upstream iced instead of the custom pop-os fork
⚠️ Important license change (packagers!) #763
Relicensed from MIT to GPL-3.0-or-later. Please update your license metadata accordingly.
Changes
💥 Breaking changes
🚀 Features
- feat(osd): scale volume bar to max_volume so overdrive level is visible @MalpenZibo (#799)
- feat(settings): fallback text in empty tooltip popups @MalpenZibo (#796)
- feat(power): add UPower charge limit toggle to quick settings @Scott-Nx (#779)
- feat(audio): configurable volume_step and max_volume with overdrive i… @sudo-Tiz (#774)
- add configurable wind speed unit @romanstingler (#788)
- feat(tray): support checkbox submenus @Lykathia (#787)
- docs: update documentation for configuration options and new features @romanstingler (#761)
- feat(workspaces): highlight workspaces with urgent windows @kiryl (#742)
- implement tooltip menus for quick settings indicators @romanstingler (#733)
- add help feature to clap dependency @romanstingler (#770)
- add typed temperature sensor configuration with auto-detection @romanstingler (#668)
- tempo: add click-to-toggle location visibility for screenshot protection @romanstingler (#719)
- feat(tray): left/right click behavior @alexandre-abrioux (#729)
- feat(i18n): add French (fr-FR) translation @noirbizarre (#756)
- feat(settings): animate quick-setting toggle color transitions @MalpenZibo (#745)
- Feat/animate centerbox position @MalpenZibo (#743)
- feat: add width animations for bar modules and workspace buttons @MalpenZibo (#682)
- feat(tempo): display weather update time in current timezone @alexandre-abrioux (#720)
- system_info add mounts option to filter disk display @romanstingler (#707)
- Feat/i18n translate system info @MalpenZibo (#715)
- Feat/i18n translate notifications @MalpenZibo (#711)
- Feat/i18n translate tempo @MalpenZibo (#712)
- Feat/i18n translate settings @MalpenZibo (#713)
- Feat/i18n translate osd @MalpenZibo (#714)
- Feat/i18n translate password dialog @MalpenZibo (#716)
- Feat/i18n translate media player @MalpenZibo (#717)
- feat - i18n Updates module @MalpenZibo (#696)
- fix(logging): added file size of 10MB as an additional criterion for … @MustafaAamir (#709)
- feat(settings)!: optional hibernate_cmd with empty string handling @Scott-Nx (#706)
- docs: update troubleshooting guide for rendering backends @romanstingler (#595)
- Make airplane mode and bluetooth icons match their state @whynotofu (#702)
- Feat/i18n units @MalpenZibo (#695)
- feature: idle inhibitor ipc, osd + 3 related fixes @whynotofu (#684)
- feat - Add experimental animation support @MalpenZibo (#681)
- add option to select between Celsius and Fahrenheit in Tempo module @romanstingler (#669)
- Feat/i18n foundations @MalpenZibo (#676)
- feature: microphone ipc, osd @whynotofu (#677)
- Add two more configuration options for battery display @CodedNil (#665)
- Add tray blocklist @CodedNil (#674)
- Feat/osd audio, brightness, airplane control @MalpenZibo (#657)
- Feat/ipc socket @MalpenZibo (#653)
- Add configurable workspace scrolling direction @lkcv (#622)
- Notifications blacklist @denqxotl (#637)
- Feat notification urgency @MalpenZibo (#638)
- feat(notifications): show single-notification groups with normal card @MalpenZibo (#631)
- create a built-in Notifications module for ashell @Yoimiya-Naganohara (#456)
- l10n @juvilius (#576)
- Add different display units for systeminfo @sulabi (#541)
🐞 Bug fixes
- fix: Use XDG_RUNTIME_DIR to store logs @francoisfreitag (#760)
- fix: replace panicking code paths with graceful error handling @dacrab (#766)
- CLIPPY fix formatting warnings @romanstingler (#783)
- fix(tempo): align daily forecast rows and pair weather icon with temp @MalpenZibo (#791)
- tempo: fix hourly forecast and current weather time to use location timezone @romanstingler (#782)
- fix(workspaces): let named workspace buttons grow to fit their name @MalpenZibo (#790)
- ci: upgrade to Node.js 24 and fix GitHub Pages deployment @dacrab (#775)
- fix: simplify COPR workflow and fix make install @dacrab (#764)
- fix(notifications): show toast/OSD on focused output with correct scaling @MalpenZibo (#730)
- partial fix(notifications): clip toast card to respect padding when body overflows @MalpenZibo (#759)
- fix(hyprland): support Lua dispatch protocol on 0.55+ with Lua config @romanstingler (#757)
- fix(tempo): swap temperature order to max/min in daily forecast @romanstingler (#753)
- fix(i18n): honor config region in unit-system resolution @MalpenZibo (#752)
- Fix Tray: prevent icon duplication @SimoneFelici (#731)
- fix(tray): keep menu open when toggling a checkbox item @Lykathia (#697)
- build(deps): Use hyprland-rs master branch to fix crashes @romanstingler (#721)
- fix: replace unwrap on connection id lookup with safe chaining @romanstingler (#723)
- tempo: add missing round for
feels liketemperature value @romanstingler (#718) - Fix output fuzzy matching @CodedNil (#710)
- fix: improve text truncation accuracy using grapheme clusters @Scott-Nx (#694)
- revert: disk deduplication (#679) @MalpenZibo (#698)
- feat(i18n): respect LC_MEASUREMENT for unit system @clotodex (#704)
- Fix 652 Ashell appears twice @MalpenZibo (#680)
- feature: idle inhibitor ipc, osd + 3 related fixes @whynotofu (#684)
- Fix fallback lang locale @MalpenZibo (#699)
- fix(tray): drop malformed icon pixmaps to avoid panic @Lykathia (#693)
- standardize error handling for PulseAudio object creation @romanstingler (#690)
- Disk deduplication @CodedNil (#679)
- (fix) ipc second instance hijack @MalpenZibo (#678)
- fix: recover wgpu surface on NVIDIA + Niri (frozen bar) @MalpenZibo (#671)
- Fix notifications daemon @denqxotl (#660)
- Use canonicalize path for watching config file @boerngen-schmidt (#658)
- fix workspace pixels scroll direction @MalpenZibo (#654)
- Fix/media player cover @MalpenZibo (#644)
- fix(ci): restore autolabeler broken by release-drafter v7 upgrade @MalpenZibo (#647)
- fix tray discovery on restart @MalpenZibo (#646)
- correct timezone index boundary check @romanstingler (#645)
- fix(idle_inhibitor): map surface via layer-shell for niri compatibility @MalpenZibo (#639)
- fix(workspaces): scroll in visual order on Niri @MalpenZibo (#636)
- (fix) Touch input and natural scroll @MalpenZibo (#635)
- fix(workspaces): stabilize monitor group order on Niri @MalpenZibo (#634)
- (fix) Niri Workspace filling @MalpenZibo (#632)
- [Regression] Audio devices not shown @denqxotl (#617)
- fix: prevent retrying failed MPRIS cover art downloads @romanstingler (#575)
- fix(network): reconnect after D-Bus error @romanstingler (#601)
- tray: skip empty icon name lookup @SimoneFelici (#600)
- fix: replace logger init unwrap with stderr fallback @romanstingler (#604)
- Fix: validate Temperature @MalpenZibo (#608)
- fix/config threshold validation @romanstingler (#603)
- Fix SystemInfo bugs and clean up display format code @MalpenZibo (#607)
- fix(ui): remove magic number 8 in height calculation, use theme space.xs instead @romanstingler (#565)
📚 Documentation
- docs: fill gaps in website config reference @MalpenZibo (#800)
- document listen_cmd requires compact JSON due to line-by-line parsing @romanstingler (#792)
- docs: update documentation for configuration options and new features @romanstingler (#761)
- docs: add Gentoo installation instructions @kakoed337 (#772)
- docs: update troubleshooting guide for rendering backends @romanstingler (#595)
- docs: update for iced_layershell migration and add notifications @MalpenZibo (#649)
- docs: add Matrix community channel link @MalpenZibo (#648)
- Add developer guide, publish to website, and update README @MalpenZibo (#560)
🧰 Maintenance
- chore: relicense from MIT to GPL-3.0-or-later @MalpenZibo (#789)
- chore - Update dependencies @MalpenZibo (#794)
- Chore/upower cleanup @romanstingler (#785)
- refactor: code cleanup and streamlining @dacrab (#767)
- docs: update documentation for configuration options and new features @romanstingler (#761)
- ci: upgrade dorny/paths-filter v3 → v4 (node24) @dacrab (#777)
- Replace generic
unwrap()withexpect()in network backends @romanstingler (#722) - chore(deps): bump the cargo group across 1 directory with 2 updates @dependabot[bot] (#675)
- Calendar show days without leading zeros @whynotofu (#687)
- chore: remove redundant temperature conversion function @romanstingler (#691)
- chore: document safety of .expect() on config path parent @romanstingler (#689)
- refactor(theme): access AshellTheme via thread_local global @MalpenZibo (#672)
- document optional runtime dependencies and package requirements @romanstingler (#666)
- Chore/menu surface on demand @MalpenZibo (#656)
- (chore) Refactor/shared components @MalpenZibo (#641)
- ci(release-drafter): fix autolabeler for fork PRs @MalpenZibo (#651)
- de-duplicate launcher code @romanstingler (#640)
- (Chore) Notification refactor @MalpenZibo (#625)
- Refactor palette config @MalpenZibo (#574)
- refactor(icons): extract duplicate battery icon logic @romanstingler (#611)
- (chore): remove deprecated Clock module @romanstingler (#602)
- chore: speed up CI @MalpenZibo (#609)
- chore(deps): bump allsorts from 0.15.1 to 0.16.1 @dependabot[bot] (#584)
- chore(deps): bump zbus from 5.13.2 to 5.14.0 @dependabot[bot] (#589)
- chore(deps): bump anyhow from 1.0.101 to 1.0.102 @dependabot[bot] (#585)
- chore(deps): bump inotify from 0.11.0 to 0.11.1 @dependabot[bot] (#586)
- chore(deps): bump chrono from 0.4.43 to 0.4.44 @dependabot[bot] (#588)
- chore(deps-dev): bump typescript from 5.9.3 to 6.0.2 in /website @dependabot[bot] (#590)
- chore(deps): bump pnpm/action-setup from 4 to 5 @dependabot[bot] (#579)
- docs(system_info): document display format options and fix threshold behavior @MalpenZibo (#606)
- fix: correct deploy working-directory and release-drafter config @MalpenZibo (#592)
- chore(deps): bump actions/download-artifact from 7 to 8 @dependabot[bot] (#580)
- chore(deps): bump actions/upload-artifact from 6 to 7 @dependabot[bot] (#581)
- chore(deps): bump nix-community/cache-nix-action from 6 to 7 @dependabot[bot] (#582)
- chore(deps): bump release-drafter/release-drafter from 6 to 7 @dependabot[bot] (#583)
- chore: remove unused dependencies uuid and parking_lot @romanstingler (#564)
- fix(ui): remove magic number 8 in height calculation, use theme space.xs instead @romanstingler (#565)
- fix: rename refesh_config to refresh_config in app.rs @romanstingler (#562)
🔧 Dependency updates
- chore(deps): bump the cargo group across 1 directory with 2 updates @dependabot[bot] (#675)
- chore(deps): bump the cargo group across 1 directory with 3 updates @dependabot[bot] (#624)
- chore(deps): bump allsorts from 0.15.1 to 0.16.1 @dependabot[bot] (#584)
- chore(deps): bump zbus from 5.13.2 to 5.14.0 @dependabot[bot] (#589)
- chore(deps): bump anyhow from 1.0.101 to 1.0.102 @dependabot[bot] (#585)
- chore(deps): bump inotify from 0.11.0 to 0.11.1 @dependabot[bot] (#586)
- chore(deps): bump chrono from 0.4.43 to 0.4.44 @dependabot[bot] (#588)
- chore(deps-dev): bump typescript from 5.9.3 to 6.0.2 in /website @dependabot[bot] (#590)
- chore(deps): bump pnpm/action-setup from 4 to 5 @dependabot[bot] (#579)
- Switch from pop-os iced fork to iced_layershell @MalpenZibo (#578)
- chore(deps): bump actions/download-artifact from 7 to 8 @dependabot[bot] (#580)
- chore(deps): bump actions/upload-artifact from 6 to 7 @dependabot[bot] (#581)
- chore(deps): bump nix-community/cache-nix-action from 6 to 7 @dependabot[bot] (#582)
- chore(deps): bump release-drafter/release-drafter from 6 to 7 @dependabot[bot] (#583)
Contributors
❤️ A big thanks to @CodedNil, @Lykathia, @MustafaAamir, @Scott-Nx, @SimoneFelici, @Yoimiya-Naganohara, @alexandre-abrioux, @boerngen-schmidt, @clotodex, @dacrab, @denqxotl, @francoisfreitag, @juvilius, @kakoed337, @kiryl, @lkcv, @mustafaa2, @noirbizarre, @romanstingler, @sudo-Tiz, @sulabi, @whynotofu and sudo-Tiz