Skip to content

Releases: glzr-io/zebar

v3.3.1

16 Mar 13:24
8af3cbe

Choose a tag to compare

Getting started on macOS? Install via Homebrew:

brew install --cask glzr-io/tap/zebar

🐛 Bug fixes

  • Hotfixed an issue where windows were being positioned incorrectly on Windows (#274, closes #272).

/ @lars-berger

v3.3.0

15 Mar 17:16
a8c3d28

Choose a tag to compare

This version ships alongside a long-awaited release of GlazeWM, which introduces macOS support. The glazewm provider works on both platforms without any setup changes (including earlier Zebar versions).

Getting started on macOS? Install via Homebrew:

brew install --cask glzr-io/tap/zebar

🎉 New features

  • macOS code signing - the .dmg below is now signed and won't show Gatekeeper warnings. (#268)
  • When docking a widget to the top edge, it'll now be shown in the reserved menubar space on macOS. (#266)
Screen.Recording.2026-03-15.at.5.41.43.PM.mov
  • System tray icons now support double-click actions. (#260 by @CtByte)
  • Added komorebi provider support on macOS (#258 by @geneccx).

🐛 Bug fixes

  • Fixed window positioning on multi-monitor setups for macOS. (#272)
  • Fixed a resource leak in battery and media providers. (#262 by @johnsideserf)
  • Fixed top_most z-order not being applied on macOS. (#265)

🛠️️ Internal changes

  • Removed pinned WebView2 runtime version (#267).
  • Added optional npm publishing to release pipeline (#270).
  • Bumped cargo crates (#271).

⚠️ Deprecations

Shell exec via glazewm provider: In a future GlazeWM release, the shell-exec command will be restricted to GlazeWM's keybinding config only. If your Zebar widgets use runCommand('shell-exec ...') from the glazewm provider, please refer to the guide at Running shell commands for migrating.


Big thanks to @CtByte, @geneccx, and @johnsideserf for contributing to this release 💛

/ @lars-berger

v3.2.0

23 Jan 22:21
c85d5aa

Choose a tag to compare

🎉 New features

  • Add permissions for vibrancy and cursor events APIs on the Tauri window (#249).

🐛 Bug fixes

  • Fix to #252: bundles a fixed WebView2 runtime to work around a bug introduced in a recent Windows update.
  • Correct typo transmitSpeed in type definition of NetworkInterface (#235).

📘 Docs improvements

  • Update some outdated info in the readme after the upgrade to v3 (#244).

Big thanks to @Miitto, @blaiyz, and @RedPhortex for contributing to this release 💛

/@lars-berger

v3.1.1

18 Jun 17:11
f1a3215

Choose a tag to compare

🐛 Bug fixes

  • Fix message parsing error in komorebi provider. It's now compatible with the latest v0.1.37 version of komorebi.
  • Correct type definition of arg param of startWidget.

/ @lars-berger

v3.1.0

31 May 15:17

Choose a tag to compare

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.

📖 System tray docs

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 and close function on currentWidget 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 and setMute to audio 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 of GlazeWmOutput (#222).
  • Fixed wm-toggle-pause command in glzr-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 💛

/ @lars-berger

v3.0.3 (preview)

22 May 18:24

Choose a tag to compare

v3.0.3 (preview) Pre-release
Pre-release

🐛 Bug fixes

  • Fix issue where the logo image and marketplace thumbnails weren't getting displayed.
  • Update startup config correctly on toggle of "Run on start-up" in system tray menu.
  • Show error message when zebar publish fails.

Check out the prior release notes for more details on the v3 changes

v3.0.2 (preview)

22 May 17:56

Choose a tag to compare

v3.0.2 (preview) Pre-release
Pre-release
fix: remove correct startup config on toggle of "run on start-up"

v3.0.1 (preview)

21 May 10:19

Choose a tag to compare

v3.0.1 (preview) Pre-release
Pre-release

Finally ready for public testing 🎉

v3 introduces a marketplace where widgets can be published and downloaded. Check out the publishing docs if you want to share your creations.

The config has changed in order to make the marketplace possible. Instead of individual <name>.zebar.json files, v3 introduces "widget packs" which contain multiple widgets at once. Configs from v2 will be automatically migrated to the new format on launch.

A new systray provider has been added as well, which makes it possible to display your system tray icons (Windows-only). This took loads of reverse engineering to figure out - a huge thank you to @HolbyFPV. Docs


If you come across any bugs, please share them in the #zebar-dev channel on Discord. I'll try to get around to as many as possible, and then do a more formal release in a week's time.

v3.0.0 (preview)

21 May 09:30

Choose a tag to compare

v3.0.0 (preview) Pre-release
Pre-release
chore: revert overridden starter config changes

v2.7.0

27 Jan 16:01
df23221

Choose a tag to compare

🎉 New features

Offline support (#141)

Zebar already works totally fine without an internet connections, but the current starter configs make web requests for their assets (e.g. CSS files, fonts, etc.). These requests will now be cached so that they don't have to be re-fetched on the next launch (also improving performance!). The default caching duration is 1 week and can be configured in the widget's settings.

Since some requests should not be cached, there's also a way to add rules for URL's that match a given regex. For example, if you make a fetch for stock market data or social feeds, you'd likely want to cache it for less time than something like a font file.

caching

Running shell commands (#160)

It’s now possible to run shell commands! This means you can now launch programs and scripts programmatically. There’s 2 new API’s:

  • shellExec - Executes a program and waits till exit. Returns its stdout, stderr, and exit status.
  • shellSpawn - Executes a program without waiting for exit. Allows for interaction with the spawned process (e.g. listening to stdout/stderr, writing to stdin, and killing the process).
import * as zebar from 'zebar';

const curl = await zebar.shellExec('curl', 'https://www.google.com');
console.log(curl.stdout);

const ping = await zebar.shellSpawn('ping', '127.0.0.1 -n 10 -w 3000');
ping.onStdout(output => console.log('stdout', output));
ping.onStderr(output => console.log('stderr', output));
ping.onExit(output => console.log('exit', output));

// Interacting with the spawned process:
ping.write('hello world!');
ping.kill();

Since shell commands can run destructive actions, there’s a UI to configure which commands a widget is allowed to run. This is mainly for the sake of an upcoming feature (see below!), so that if a widget is shared with others, they can check what shell privileges it uses.

shell

Other features

  • Add pause button to with-glazewm starter config (#180).
  • Make the text in the starter examples non-selectable (#176).

🐛 Bug fixes

  • Export audio provider TypeScript types.

📘 Docs improvements

  • Add docs for media provider functions.
  • Add docs for isPaused to glazewm provider (#182).

Upcoming feature: community/marketplace 🚀

Currently in development is a new community/marketplace feature where you can download and run widgets that other people submit. Widgets would be uploadable through a community GitHub repo. And then through the settings UI, there will be a tab where all widgets are listed and instantly downloadable.

If you have ideas/feedback on the feature, drop a message in the #zebar-chat channel on Discord!


Big thanks to @HolbyFPV, @michidk, and @veryard for contributing to this release 💛

/ @lars-berger