Zebar v3 - Production Release 🎉
We're excited to announce the first official, production-ready release of Zebar v3!
The following is a summary of the changes introduced in v3.0.0 through to the hotfix releases afterwards.
🌟 Major new features
Widget marketplace
Discover and share widgets with the community through our new integrated marketplace. Browse widget packs, install them with one click, and publish your own creations for others to try out.
📖 Publishing guide
2025-03-27_15-35-07.mp4
Demo of live previewing marketplace widgets.
System tray provider (Windows)
Display and interact with your system tray icons directly within your widgets using the new systray
provider. This feature required extensive reverse engineering and wouldn't have been possible without the incredible work by @HolbyFPV.
Widget packs architecture
The config system has been redesigned around "widget packs" - collections of related widgets that can be easily shared and managed together. This replaces the previous individual <name>.zebar.json
file approach and enables the marketplace functionality.
Automatic migration: Your existing v2 configurations will be automatically upgraded to the new widget pack format when you launch v3. Note that downgrading to v2 is not supported after migration.
✨ Additional Features
- Configurable logging verbosity with
--quiet
and--verbose
CLI flags. - Support for fractional units in widget width, length, and offset (e.g.
90.5%
). - New
tauriWindow
getter andclose
function oncurrentWidget
for interacting with the underlying window.// Example: Auto-close widgets when they lose focus (perfect for calendar/volume popups). // Best used with "Focus on launch" option enabled for widgets. zebar.currentWidget().tauriWindow.listen("tauri://blur", () => { zebar.currentWidget().close(); });
- Added
isMuted
state andsetMute
toaudio
provider (#212). - Automatically switch between a light/dark mode theme based on system settings in
glzr-io.starter
config (#213). - Added error logging to a dedicated file at
~/.glzr/zebar/errors.log
.
🐛 Bug fixes
- Fixed memory buildup from debug logs (#226).
- Fixed z-order handling for always-on-top/bottom positioning.
- Added missing
isPaused
to type definition ofGlazeWmOutput
(#222). - Fixed
wm-toggle-pause
command inglzr-io.starter
config (#190). - Improved compatibility with proprietary VPN clients in
network
provider (#200). - Fixed stale values in
keyboard
provider (#197).
⚠️ Deprecations
// ❌ Old (deprecated)
const tauriWindow = currentWidget().window.tauri;
// ✅ New
const tauriWindow = currentWidget().tauriWindow;
Big thanks to @HolbyFPV, @Katona, @Video-Nomad, @xytaglyph, @qwbarch, @5I-I5, and @mPyKen for contributing to this release 💛