Skip to content

Releases: glzr-io/zebar

v2.7.0

27 Jan 16:01
df23221
Compare
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

v2.6.1

03 Dec 08:21
Compare
Choose a tag to compare

🐛 Bug fixes

  • Hotfix to crash due to paused state unavailable on glazewm provider.

/ @lars-berger

v2.6.0

02 Dec 19:52
Compare
Choose a tag to compare

🎉 New features

Media controls (#158) - Docs

  • Full media playback control (play, pause, skip) for all active sessions in media provider.
    • play, pause, togglePlayPause, next, and previous.
  • Add all active sessions (not just the currently playing session) via allSessions.
media-functions.mp4

New audio provider (#154, #170) - Docs

  • List all audio input/output devices via playbackDevices, recordingDevices, and allDevices.
  • Get the default input and output device via defaultPlaybackDevice and defaultRecordingDevice.
  • Adjust the volume of a device via setVolume function.

New widget APIs

  • New startWidget function for programmatically starting a widget at a given position.
  • Access the underlying window via currentWidget().window.

Misc features

  • Add new system tray "Edit" menu option for quickly accessing widget config (#163).
  • Real-time widget count display in settings UI sidebar.
  • Unique widget window titles - allows targeting with GlazeWM window rules (#164).
  • Add binding mode toggle to with-glazewm starter configuration (#155).
  • New WM pause state in glazewm provider (#167).

🐛 Bug fixes

  • Fix issue where CPU usage would sometimes get incorrectly reported as 100%.
  • Fix issue where keyboard and media providers would emit duplicate outputs (#162).

🛠️️ Internal changes

  • Add dev:local npm command (#171).
  • Structural changes to support functions on providers (#156).

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

/ @lars-berger

v2.5.1

14 Nov 17:44
Compare
Choose a tag to compare

🐛 Bug fixes

  • Hotfix to media provider for handling null sessions (#153).
  • Corrections to return types on new disk provider. Docs.

/ @lars-berger

v2.5.0

14 Nov 01:41
485b3bc
Compare
Choose a tag to compare

🎉 New features

  • New media provider for currently playing media info like song, album, artist, etc. (#136). Docs
  • New disk provider for hard-drive and storage capacity info (#138). Docs
  • Config option to dock Zebar windows to monitor edge (#131, #150). Only available on Windows for now.
dock-to-edge.mp4
  • Set "Open settings" as the default system tray menu option.
  • Add allWindows to glazewm provider (#149).

🐛 Bug fixes

  • Fix incorrect version number shown in system tray and CLI.

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

/ @lars-berger

v2.4.0

27 Oct 07:54
e394f9d
Compare
Choose a tag to compare

🎉 New features

  • Add settings UI for editing widget configs (#132).
  • Rename defaultPlacements -> presets in widget configs (non-breaking: configs will be automatically migrated).
image
New settings UI

🐛 Bug fixes

  • Fix issue where defaultGateway.signalStrength and defaultGateway.ssid on network provider were null on non-English systems (#125).

🚨 Breaking change

Not sure if anyone has used these API's yet, but the following have been changed:

  • Remove open-widget-default CLI command. Replaced with new start-widget and start-preset CLI commands for dynamically starting widgets.
  • Remove startWidgetDefault JS API. Replaced with startWidget and startPreset JS functions.

Big thanks to @SebasF1349 and @lars-berger for contributing to this release 💛

v2.3.0

04 Oct 19:33
Compare
Choose a tag to compare

🎉 New features

  • Adjust widget position for monitor DPI (#119).
    • Fixes issues where the widget window was getting positioned/sized incorrectly.
  • Account for window width and height in anchor position (#122).
    • e.g. "anchor": "bottom_left" would previously place the top left corner of the window at the bottom left of the monitor and would then have to be manually offset. Now, it places the bottom-left corner of the window in the bottom-left of the monitor.

🐛 Bug fixes

  • Fix incorrect casing in query monitors CLI command response.
  • Hide scrollbar on overflow in example templates (#120).

🛠️️ Internal changes

  • Bump glazewm package to latest.

Big thanks to @JonasWischeropp, @adriankarlen, and @lars-berger for contributing to this release 💛

v2.2.2

01 Oct 09:37
57c5584
Compare
Choose a tag to compare

🐛 Bug fixes

  • Fix query monitors CLI command not outputting anything.
  • Add empty favicon to suppress error logs for missing favicon (#114).
  • Correct positioning of battery charging icon in examples (#118).

Big thanks to @DreamMaoMao and @lars-berger for contributing to this release 💛

v2.2.1

29 Sep 08:07
Compare
Choose a tag to compare

Zebar V2: Production-Ready Release ⚡

With GlazeWM V3 and now, Zebar V2, the theme of the last few months has been big rewrites and breaking changes. This release is a large redesign of Zebar's core functionality based on community feedback.

New config files are generated on launch to %userprofile%/.glzr/zebar (no need to make backups of existing config - they won't conflict). This is a breaking change to existing configs.

Major changes

1. New config format

  • YAML config is gone, templating syntax is gone, and inline HTML/CSS in the config file is gone.
  • Instead, point to an HTML file with the markup and styling of your widget. Any frontend framework can be used (React, SolidJS, Angular, Vue, etc.).
  • Zebar now exposes providers via a JS library published as zebar on NPM.

2. No start script

  • Just launch the Zebar application normally.

3. Modular config files

  • Each widget now has its own config file. This makes it way easier to share widgets - just zip it up and then unzip it into the %userprofile%/.glzr/zebar folder.

4. Toggle active widgets

  • Choose which widgets to have active by enabling/disabling them in the system tray menu.
  • To choose which widgets should be opened when Zebar starts up, check the "Launch on startup" option.
    image

🎉 Other features

  • Be able to reload active widget configs via system tray menu.
  • Retry IPC connection on disconnect in glazewm provider.
    • Fixes issues where workspaces weren't shown correctly or got out of sync.
  • Add new keyboard provider for showing current keyboard layout (#105). Docs
  • Be able to dynamically open widgets via openWidgetDefault(configPath: string).
  • Improve received/transmitted traffic response in network provider (#107). Docs
  • Add JSON schemas for global settings file and widget configs.
    • This adds auto-completion and validation to the config files in editors like VSCode.
  • Be able to change the config directory via new --config-dir CLI flag.

🐛 Bug fixes

  • Scale the size of the window depending on the monitor's scale factor (#101).
  • Fix to timezone config option on date provider (#91).
  • Fix version number incorrectly being shown as 0.0.0. edit: still an issue
  • Fix crash with komorebi provider.
  • Fix crash with network provider.

Big thanks to @CtByte, @ehellman, @MoaidHathot, and @jawee for contributing to this release 💛

v2.2.0

28 Sep 12:07
Compare
Choose a tag to compare
v2.2.0 Pre-release
Pre-release

Final final build for v2. Still need to write some release notes for it