Releases: glzr-io/glazewm
v2.0.3
Come join the Discord server⚡ for news on GlazeWM or if you're interested in desktop customization in general.
Bug fixes
- Fix focus borders not being set. Use
focus_borders
in the config to configure the border surrounding active/inactive windows.
v2.0.2
Come join the Discord server⚡ for news on GlazeWM or if you're interested in desktop customization in general.
Bug fixes
- Fix background color and padding not working in volume component.
v2.0.1
Come join the Discord server⚡ for news on GlazeWM or if you're interested in desktop customization in general.
Bug fixes
- Fix crash with window title component.
- Fix regression where dragging a tiling window doesn't snap it back into place.
v2.0.0
It's been a long time coming, but a v2 release is finally ready and it's packed with new features and improvements 🎈
As always, come join the Discord server⚡ for news on GlazeWM or if you're interested in desktop customization in general.
Downloads for runnable .exe
files are attached below.
New features
- Restore hidden windows when the WM is killed unexpectedly (#360).
- Introduced a new "watcher" process, which restores all windows when the main process dies.
- Highlight the active window with a customizable border (thanks @HolbyFPV in #246). Docs
- Exclusively on Windows 11 due to the underlying API not being available on W10.
- Automatically focus windows underneath the cursor. Enabled via
general.focus_follows_cursor
(thanks @HolbyFPV in #245). - Cursor jumps to windows focused by the WM. Enabled via
general.cursor_follows_focus
(thanks @HolbyFPV in #247). - Introduce an IPC server and a CLI for querying GlazeWM's state and running WM commands (#350).
- Both the IPC server and CLI support the same commands. For instance:
# Get workspaces (alternatively send 'workspaces' to IPC server).
./GlazeWM.exe workspaces
# Run a WM command (alternatively send 'command "focus workspace 1"' to IPC server).
./GlazeWM.exe command "focus workspace 1"
- Create a JS/TS wrapper library for IPC with GlazeWM here. It's published on npm as
glazewm
. Example usage:
import { GwmClient } from "glazewm";
const client = new GwmClient();
const windows = await client.getWindows();
await client.runCommand("move left", windows[0]);
- Lots of new components for the bar:
- System tray component (thanks @HolbyFPV in #235). Docs
- WiFi/ETH stats component (thanks @HolbyFPV in #240). Docs
- CPU stats component (thanks @Sewer56 in #297). Docs
- GPU stats component (thanks @Sewer56 in #297). Docs
- Memory/RAM stats component (thanks @Sewer56 in #297). Docs
- Weather component (thanks @Sewer56 in #297). Docs
- Text file component (thanks @Sewer56 in #297). Docs
- Volume component (thanks @HolbyFPV, @AreamanM in #277, #241). Docs
- Image component (thanks @HolbyFPV in #323). Docs
- Further improvements to the bar include:
- Customizable border radius for components and the bar window itself (thanks @jovark in #265).
- Fully remove the bar via new
bar.disabled
option (thanks @Zinvoke in #260). - Show the bar above all other windows via new
bar.always_on_top
option (thanks @jayrfs in #341). - Support for mixing font family, font weight, font size, and foreground color within a label. This means that icons and text fonts can be used together in a label. To customize a part of the label, wrap it in an
<attr>
tag:
bar:
components_left:
- type: "cpu"
# Change font family (ie. ff) to Comic Sans for part of the label:
label: "<attr ff='Comic Sans'>CPU:</attr> {percent_usage}%"
- type: "battery"
# Show an icon by using an icon font:
label_draining: "<attr ff='Material Icons'></attr> {battery_level}%"
# Multiple attributes can be changed at once:
label_charging: "{battery_level}% <attr ff='Arial' fg='#228B22' fw='400' fs='13px'>(charging)</attr>"
- Add an equivalent to
workspace_auto_back_and_forth
from i3wm. The new optiongeneral.toggle_workspace_on_refocus
allows switching back and forth between the previously focused workspace when focusing the current workspace (thanks @s-v-o in #274). - Add new command for setting width/height of a window to a specific value. Example usage:
set height 30%
orset width 200px
(thanks @maxle5 in #268). - UWP windows now tile correctly (thanks @HolbyFPV in #257).
- Customize individual outer gaps, eg.
gaps.outer_gap: 10px 5px 10px 5px
(thanks @maxle5 in #282). - Floating windows can now be moved and resized. The amount of movement is controlled by
general.floating_window_move_amount
(thanks @Pamesta in #238). - Window transition animations can be disabled globally via
general.window_animations
. Ctrl
can be used instead ofControl
when defining keybindings (thanks @JK-Flip-Flop96 in #338).
Bug fixes
- Various improvements to stability and performance (@Zinvoke, @maxle5, @s-v-o, @groovyghoul).
- Fix issue where logs weren't showing up when debugging on Visual Studio and Rider.
What lies ahead?
The bar has been part of the WM since initial launch and it was mainly tacked on as a way to show what workspaces are active. But now it's a big part of the project and there's a lot of things that could've been done better. There's work in progress now to completely overhaul the bar and move it to its own repository. If you're a contributor, please hold off on large feature PRs for the bar in the meantime.
And also, the repo has been moved from my personal account (@lars-berger) to a GitHub org. @HolbyFPV (formerly @notblam) and I are teaming up on the MVP of the bar rework, and it made sense to house everything under one org. The bar overhaul will be open sourced in the coming months, and we've also got a future, unannounced project that's in the works (which will make the name "glazerdesktop" a bit clearer 👀).
Shoutout to our amazing contributors
A massive thanks to @HolbyFPV, @Sewer56, @maxle5, @s-v-o, @Zinvoke, @Pamesta, @AreamanM, @jayrfs, @jovark, @groovyghoul, and @JK-Flip-Flop96. It wouldn't have been possible without your fantastic support 🎉🙌
Quick heads up for contributors: there's been some changes to the repo's branching structure. Check #contributing on Discord for how to update your forks.
v1.11.1
⚡ Check out the Discord server
Downloads for runnable .exe
files are attached below.
Changelog
- Fix issue where the WM would occasionally crash with the message
Object reference not set to an instance of an object
. - Improve error logging by including a dump of the last few command invocations.
v1.11.0
⚡ Check out the Discord server
Downloads for runnable .exe
files are attached below.
Changelog
- Be able to specify multiple different bar styles (thanks to @notblam). For example, the below snippet lets you have a bar with a red background on monitor 1, and a green background on monitor 2. This can also be used to show different bar components across monitors.
bars:
- &default_bar
bind_to_monitor: 1 # The monitor's number as shown in the Windows display settings (eg. 1, 2, 3...).
height: "30px"
background: "red"
- <<: *default_bar # Copy the properties above.
bind_to_monitor: 2
background: "green" # Override `background: "red"` with green.
<<: *default_bar
is YAML syntax for copying all the properties from the block above labelled &default_bar
. This means that height: "30px"
is copied over to the 2nd bar, reducing the amount of repeated config.
- Improvements to the bar:
- Add a customizable separator between components in the bar (thanks to @AreamanM). Documentation on usage (see
component_separator
). - Be able to change the X and Y position of the bar from the edge of the workspace via new options
offset_x
andoffset_y
(thanks to @notblam). - Add a new bar component (
type: "battery"
) for showing the battery status (thanks to @AreamanM). Documentation on usage. - Add a new bar component (
type: "window title"
) for showing the title of the focused window (thanks to @notblam). - Be able to show calendar week via
time_formatting
option in the clock component (thanks to @s-v-o). Documentation on usage. - Be able to customize the text shown in the tiling direction component via new
label_horizontal
andlabel_vertical
options (thanks to @jovark). - Fix issue where tiling direction component wasn't updating correctly (thanks to @notblam).
- Add a customizable separator between components in the bar (thanks to @AreamanM). Documentation on usage (see
- Add option to show floating windows above all tiling windows. This can be enabled from a new
general
section of the config:
general:
# Whether to show floating windows as always on top.
show_floating_on_top: false
- Add new command (
tiling direction toggle
) for toggling between a horizontal/vertical tiling direction (thanks to @notblam). This is bound toAlt+V
in the default config (replacing the separate keybindings fortiling direction <horizontal|vertical>
). - Default to vertical tiling for workspaces on vertical monitors (thanks to @notblam).
- Improvements to focus behavior on window close. This fixes the issue some were having with Flow Launcher.
There's been a lot of help from the community for this release. For the last 2 weeks, there's been a new PR almost every day, so thank you for the unreal amount of support lately ❤️
** There's been a number of changes to the default config file. The latest version of the default config can be viewed here. If you want to simply reset your config file with the default, you can delete your config file located at C:\Users\<YOUR_USER>\.glaze-wm\config.yaml
and it'll be created on startup.
v1.10.0
⚡ Check out the Discord server
Downloads for runnable .exe
files are attached below.
Changelog
- Add binding modes. When a binding mode is active, only the keybindings defined for that binding mode are available (all other keybindings are disabled). Use
binding mode <NAME>
to activate a binding mode that has been defined in the newbinding_modes
section of the config. Usebinding mode none
to exit the binding mode and return to the default keybindings.- Added a binding mode to the default config for resizing windows via HJKL or arrow keys. This is bound to
Alt+R
in the default config.
- Added a binding mode to the default config for resizing windows via HJKL or arrow keys. This is bound to
- Rename
layout <horizontal | vertical>
command totiling direction <horizontal | vertical>
. The old command naming will still work, but will eventually be removed. - Changes to the bar:
- Improvements to the bar appearance in the default config.
- Transparency can now be set for any color-related properties in the bar config by specifying an RGBA color (eg.
background: #ffffff33
for white at 20% opacity). - Added a new bar component (
type: "binding mode"
) for showing whether a binding mode is currently active. - Added a new bar component (
type: "tiling direction"
) for showing the current tiling direction.
- Fix crash when window rules are run after a window has been ignored.
- Add new command
set tiling
for making a window tile (similar toset floating
,set minimized
, etc.). Can be useful for forcing a window to tile if it floats by default. - Changes to behavior of
focus workspace recent
command (thanks to @gtsherman). It will now switch back and forth between the last focused workspace, and should hopefully be more intuitive than before. It is also now mapped toAlt+Y
by default instead ofAlt+R
. - Add winget installer (thanks to @afermar). After installing via
winget install lars-berger.GlazeWM
, GlazeWM can then launched by runningglazewm
in a terminal (it gets added to $PATH by Winget). - Add new command
move workspace <DIRECTION>
for moving the focused workspace to a monitor in the given direction (thanks to @kuznetsovvj). These are bound by default toAlt+<ASDF>
(depending on the direction).
** There's been a number of changes to the default config file. The latest version of the default config can be viewed here. If you want to simply reset your config file with the default, you can delete your config file located at C:\Users\<YOUR_USER>\.glaze-wm\config.yaml
and it'll be created on startup.
v1.9.0
There is now a Discord server for GlazeWM, feel free to join at discord.gg/ud6z3qjRvM 🎉
The server might be pretty dead to start out with, but at least it'll be a good way to get announcements when new releases come out.
Downloads for runnable .exe
files are attached below.
Changelog
- Fix issue where workspaces sometimes wouldn't hide properly.
- Fix issue where windows could disappear if they were too thin when a new window is managed. Sibling windows are now resized proportionately when a new tiling window is managed.
- Add new command
"focus workspace <prev | next>"
for focusing the next or previous workspaces defined in the workspaces config (thanks to @kuznetsovvj). This is bound toAlt+T
/Alt+Shift+T
in the new default config. - Add new command
"focus workspace recent"
for focusing the last focused workspace (thanks to @kuznetsovvj). This is bound toAlt+R
in the new default config. - Show error message on invalid keybindings (thanks to @kuznetsovvj).
v1.8.1
Downloads for runnable .exe
files are attached below.
Changelog
- Fix crash with keybindings and window rules which ran multiple commands and changed the window type (eg.
["set floating", "resize borders 0px -7px -7px -7px"]
). - Fix issue where the WM would sometimes keep running after a fatal exception.
v1.8.0
Downloads for runnable .exe
files are attached below.
Changelog
- Fix issue where keybindings wouldn't fire if the desktop/bar was focused. Now keybindings will always fire unless a window that has explicitly been ignored (via
ignore
command) is focused. - Create new bar component for displaying text (thanks to @AgusArdizzone). Custom commands can optionally be run when the component is left/right-clicked.
bar:
components_left:
- type: "text"
text: "⊞"
left_click_command: "exec cmd"
right_click_command: "exec chrome"
- Add button to reload config from system tray icon.
- Allow
ignore
command to be run via keybindings. Previously theignore
command could only be used in window rules. - Fix inconsistencies when picking a window to focus after another window is closed, minimized, or moved out from the workspace.