Skip to content

Releases: glzr-io/glazewm

v3.1.1

07 Aug 14:51
Compare
Choose a tag to compare

🐛 Bug fixes

  • Fix issue where watcher process was shown on startup.
  • Fix Invalid window handle. (0x80070578) error.
  • Be able to focus fullscreen windows with focus --direction <DIRECTION> command.
  • Improve detection of where window should be dropped when moving a tiling window via drag.
  • Fix issue where the workspace config option bind_to_monitor was not used being used for focus --workspace <WORKSPACE> and move --workspace <WORKSPACE> commands.

v3.1.0

05 Aug 10:37
Compare
Choose a tag to compare

V3 of GlazeWM (aka. the Rust rewrite) is finally done 🎉🦀This includes a bunch of fixes from the V3 preview build from last week.

Thanks for all the patience, troubleshooting, and contributions during the last couple months. This update is a complete and total rewrite of GlazeWM, introducing a bunch of new features.

The installer can be downloaded from the release assets below. On launch, a new config is generated at %userprofile%/.glzr/glazewm/config.yaml. Since the config path has changed, it won't clash with previous versions of GlazeWM.

Discord server⚡

Changelog

New bar implementation

The built-in bar has been replaced with Zebar. This change addresses issues in the original WPF-based bar, and makes the bar significantly more customizable in appearance and functionality. Zebar is still in its fairly early stages, so there will be bugs and missing features, but it's quickly evolving past what was possible with the built-in bar (drop a message in the #dev-chat Discord channel if you're a dev keen to work on a Zebar feature💛).

Zebar can optionally be installed directly through the GlazeWM installer below. This will generate a sample config for Zebar at %userprofile%/.glzr/zebar/config.yaml.

Command changes

Commands have been renamed to be more consistent and can now take arguments or optional flags that modify the command's behavior. For example:

# Resize the window to have a 2% smaller width.
resize --width -2%

# Shift focus to the left.
focus --direction left

# Shift focus to a workspace with the name `1`.
focus --workspace 1

# Change the window to be floating, and show it above all other windows.
set-floating --shown-on-top

These changes also make it a lot more intuitive to call commands from the CLI. For example, to focus workspace 1 via the CLI, run the following in a terminal:

glazewm.exe command focus --workspace 1

Help menus exist to list all available commands and the flags/arguments that a command takes in. For example, glazewm.exe command --help to list all available commands, and glazewm.exe command focus --help for help with the focus command specifically.

Window behavior

There's been a number of changes to make window behavior more customizable. A new window_behavior config option exists:

window_behavior:
  # New windows are created in this state whenever possible.
  # Allowed values: 'tiling', 'floating'.
  initial_state: 'tiling'

  # Sets the default options for when a new window is created. This also
  # changes the defaults for when the state change commands, like
  # `set-floating`, are used without any flags.
  state_defaults:
    floating:
      # Whether to center floating windows by default.
      centered: true

      # Whether to show floating windows as always on top.
      shown_on_top: false

    fullscreen:
      # Maximize the window if possible. If the window doesn't have a
      # maximize button, then it'll be fullscreen'ed normally instead.
      maximized: false

      # Whether to show fullscreen windows as always on top.
      shown_on_top: false

The initial_state option can optionally float every window by default, essentially allowing GlazeWM to be used as a floating window manager instead.

The state_defaults option makes it possible to change window behavior on a global basis, as well as on a per-window basis. For example, if a fullscreen game is opened, it can by default be launched as maximized and shown on top depending on the state_defaults.fullscreen config. Window rules can be used to override these defaults for individual windows (e.g. to show certain windows as always on top).

Proper fullscreen support

Along with the window behavior changes above, V3 introduces support for handling fullscreen windows. There's now a separate "fullscreen" state that can be activated via alt+f in the default keybindings. GlazeWM will also detect whenever windows enter a fullscreen state.

A window can be fullscreen either if it's maximized, or if it takes up the full size of the monitor. There's a flag to choose between the two behaviors (i.e. set-fullscreen --maximized and set-fullscreen).

Moving windows

The way that tiling and floating windows are moved around via alt+hkl has been overhauled and made snappier. Quick demo of the new movement behavior for floating windows:

floating-window-move.mp4

Tiling window can also now be moved by dragging them around (thanks to #635 by @LucaCoduriV).

2024-08-05.18-01-55.mp4

🎉 Other features

  • Windows that are running as admin can now be managed by GlazeWM.
  • More flexible keys are allowed in keybindings (e.g. alt+;, and localized keys like alt+å). Details here.
  • The bind_to_monitor: <NUMBER> workspace option is now based off the monitor's position. 0 is your leftmost screen, 1 is the next one to the right, and so on.
  • Cursor jump has more intuitive behavior and can be configured via the new general.cursor_jump option.
  • Added general.startup_commands option for running commands when the WM has started up (e.g. to run a script, or launch another app).
  • The shell-exec command (previously called exec) no longer has issues with having to escape some characters or having to wrap paths in double quotes. These are all valid commands:
    • shell-exec chrome
    • shell-exec %ProgramFiles%/Git/git-bash.exe --cd="C:\"
    • shell-exec C:\Program Files\Microsoft VS Code\code.exe

🐛 Bug fixes

🚨 All breaking changes

  • Removed the built-in bar and any bar-related config options.
  • Commands and keybindings now always use the commands and bindings config options. Removed command and binding config options.
  • Window rules, gaps, and focus borders are defined in a different config format.
  • Significant changes to command names. See cheatsheet for an updated list of commands.
  • Minor changes to naming of CLI and IPC commands. The glazewm npm package has already been updated to reflect these changes.
  • Removed general.window_animations. This is instead changed via the system tray icon.
  • Removed general.center_new_floating_windows. This is instead changed via window_behavior.state_defaults.floating.centered.
  • Removed general.show_floating_on_top. This is instead changed via window_behavior.state_defaults.floating.show_on_top.
  • Removed general.floating_window_move_amount. Floating windows are not moved by a fixed percentage.
  • Removed general.cursor_follows_focus in favor of new general.cursor_jump config option.

Thanks again to those who helped with the V3 update, particularly @HolbyFPV, @ehellman, and @LucaCoduriV! 💛

v3 Preview

28 Jul 12:47
Compare
Choose a tag to compare
v3 Preview Pre-release
Pre-release

Preview build of v3 (aka. the Rust rewrite)

v2.1.1

25 Jan 11:31
0e9b289
Compare
Choose a tag to compare

Come join the Discord server⚡ for news on GlazeWM or if you're interested in desktop customization in general.

🐛 Bug fixes

📘 Docs improvements

v2.1.0

29 Dec 22:57
e7d3732
Compare
Choose a tag to compare

Come join the Discord server⚡ for news on GlazeWM or if you're interested in desktop customization in general.

🎉 New features

  • Maximized windows stay maximized (thanks @phisko in #421).
  • Option to disable floating windows initial centering via new general.center_new_floating_windows config option (thanks @Video-Nomad in #476).
  • New bar component for showing music status (thanks @AleGrz in #473). Docs
  • Add window rule to sample config for ignoring picture-in-picture windows (thanks @AmineDjeghri in #480).

🐛 Bug fixes

  • Fix hang that sometimes happened when closing windows via Alt+Shift+q keybinding(#462).
  • Fix crash when closing windows in certain split layouts (thanks @phisko in #425).
  • Fix issue where windows weren't redrawing after IPC commands (#463).
  • Various improvements to stability and performance (@Video-Nomad, @wis, @silvarc141).

📘 Docs improvements

v2.0.3

23 Sep 18:56
f292744
Compare
Choose a tag to compare

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

22 Sep 15:56
9065555
Compare
Choose a tag to compare

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

18 Sep 19:04
c6c57a0
Compare
Choose a tag to compare

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

17 Sep 19:15
6bac18b
Compare
Choose a tag to compare

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:
  • 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 option general.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% or set 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 of Control 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

06 Feb 16:06
1794416
Compare
Choose a tag to compare

⚡ 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.