Skip to content

Releases: glzr-io/glazewm

v3.7.0

03 Dec 08:49
ac4ae08
Compare
Choose a tag to compare

🎉 New features

  • Add new wm-toggle-pause command for fully pausing the WM (#828, #870).
    • Replaced the alt+shift+p keybinding in the default config with this new command.
  • Configure whether to show all windows in the native Windows taskbar (#873, resolves #848).
    • The previous release changed windows to be hidden/shown via a new method called cloaking. Cloaking causes all windows to be shown in the taskbar, which is now configurable with general.show_all_in_taskbar.
  • Improve --centered flag behavior for set-floating and toggle-floating (#842).
  • Revert alt+s and alt+a in the default config to switch focus between prev/next active workspace (#865).

🐛 Bug fixes

  • Restore to previous tiling size from minimized/fullscreen (#876, fixes #506 #782).
  • move-workspace moves cursor if cursor_jump is enabled (#874, fixes #859).
  • Fix focus_follows_cursor on touchpads (#875, fixes #799).
  • Prevent moving tiling windows with mouse from affecting hidden workspaces (#877, fixes #829).
  • Fix path delimiters to CLI directory in PATH env variable (#872).

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

/ @lars-berger

v3.6.0

14 Nov 20:38
382c8a1
Compare
Choose a tag to compare

Join the Discord server

🦀 New method of switching between workspaces (#792)

We've implemented "cloaking" as the new default method for hiding/showing windows during workspace switches. This brings a few big improvements:

  • Instant transitions when switching between workspaces.
  • Better stability and compatibility with third-party apps (resolving issues like #250).
  • Consistency in which windows are shown in the taskbar.

Note: With cloaking enabled, windows from all workspaces appear in the Windows taskbar. The new method should hopefully feel much nicer, but the legacy method remains available via general.hide_method set to hide.

🎉 Other new features

  • New --hide-window flag for shell-exec to run commands in background (#819).
    • Makes it possible to run scripts without any terminal popup windows.
  • Add new position --x-pos <POS> --y-pos <POS> command for repositioning floating windows (#817).
    • e.g. position --x-pos 0 --y-pos 0.
  • Size and position can now be set with the set-floating command (#817)
    • e.g. set-floating --x-pos 0 --y-pos 0 --width 500px --height 500px.
  • Smoother restore from maximize into tiling/floating position (#852).

🐛 Bug fixes

  • Fix regression from v3.4.0 where some taskbar positions cause incorrect working area (#850, fixes #790).
  • Persist window animations setting across restarts (#832, fixes #651).
  • Prevent window flicker when toggling between fullscreen states (#851, fixes #640).
  • Set focus to valid desktop window in an empty workspace (#821).

🛠️️ Internal changes

  • Change cargo lib and bin path to enable build on WSL (#827).
  • Linting fixes and working doctests (#834, #831).

Big thanks to @rpop0, @DreamMaoMao, @Miitto, @veryard, @Dovias and @michidk for contributing to this release 💛

/ @lars-berger

v3.5.0

27 Oct 08:35
940bb4c
Compare
Choose a tag to compare

In case anyone missed it from the last release:

Zebar update & startup change

  • Zebar, which can optionally be installed through the standard installer below, has officially been updated to V2 ⚡For full details, check out the V2 release notes.
    • This new version is now included in the standard GlazeWM installer.
    • Existing installs can be updated by leaving "Install Zebar" checked.
    • Zebar start script has been removed - update your existing GlazeWM config (%userprofile%/.glzr/glazewm/config.yaml) as follows:
-  startup_commands: ['shell-exec %userprofile%/.glzr/zebar/start.bat']
+  startup_commands: ['shell-exec zebar']

Join the Discord server

🎉 New features

  • Add not_equals and not_regex window rule match types (#798).
  • Destroy empty workspaces when a window was killed while its workspace was not displayed (e.g. via task manager) (#801).
  • Change focus --next-workspace and focus --prev-workspace to focus by config order (#783).
    • Add new focus —next-active-workspace and focus —prev-active-workspace commands with the old behavior of focus --next-workspace and focus --prev-workspace.

🐛 Bug fixes

  • Prevent focus requests from being lost from windows on inactive workspaces (#797).

📘 Docs improvements

  • Fix link to "Config documentation" heading in readme (#811).

Big thanks to @DreamMaoMao, @RiceaRaul, and @azarmadr for contributing to this release 💛

v3.4.0

04 Oct 20:00
cc4952e
Compare
Choose a tag to compare

In case anyone missed it from the last release:

Zebar update & startup change

  • Zebar, which can optionally be installed through the standard installer below, has officially been updated to V2 ⚡For full details, check out the V2 release notes.
    • This new version is now included in the standard GlazeWM installer.
    • Existing installs can be updated by leaving "Install Zebar" checked.
    • Zebar start script has been removed - update your existing GlazeWM config (%userprofile%/.glzr/glazewm/config.yaml) as follows:
-  startup_commands: ['shell-exec %userprofile%/.glzr/zebar/start.bat']
+  startup_commands: ['shell-exec zebar']

Join the Discord server

🎉 New features

  • Scale inner and outer gaps by monitor DPI (#756, #768).
    • Add new gaps.scale_with_dpi option to toggle whether gaps should be scaled. This is enabled by default - no config changes necessary.
  • Add new scaleFactor property to monitors in IPC responses. Fix dpi property not returning a valid DPI (#769).

🐛 Bug fixes

  • Fix focus commands not working with focus_follows_cursor: true (#767).
  • Fix not being able to disable cursor jump (#763).
  • Add window rule to sample config for floating PowerToys Peek (#757).

🛠️️ Internal changes

  • Fix regex for detecting latest version in Winget release workflow (#758).

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

v3.3.0

01 Oct 10:44
c295669
Compare
Choose a tag to compare

In case anyone missed it from the last release:

Zebar update & startup change

  • Zebar, which can optionally be installed through the standard installer below, has officially been updated to V2 ⚡For full details, check out the V2 release notes.
    • This new version is now included in the standard GlazeWM installer.
    • Existing installs can be updated by leaving "Install Zebar" checked.
    • Zebar start script has been removed - update your existing GlazeWM config (%userprofile%/.glzr/glazewm/config.yaml) as follows:
-  startup_commands: ['shell-exec %userprofile%/.glzr/zebar/start.bat']
+  startup_commands: ['shell-exec zebar']

Join the Discord server

🎉 New features

  • Add window effects for hiding the title bar and changing corner style (#735).
    • Configurable via window_effects.hide_title_bar and window_effects.corner_style.
    • Add to sample config.

🐛 Bug fixes

  • Fix issue where focus was sometimes not being changed (#749, #754).
    • Remove input simulation to other processes.
  • Fix window border effect flickering (#752).
  • Redraw affected workspaces after move-workspace --direction <DIRECTION> (#755).

🛠️️ Internal changes

  • Fix Winget release workflow (#748).

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

v3.2.0

29 Sep 09:56
cc810e6
Compare
Choose a tag to compare

Zebar update & startup change

  • Zebar, which can optionally be installed through the standard installer below, has officially been updated to V2 ⚡For full details, check out the V2 release notes.
    • This new version is now included in the standard GlazeWM installer.
    • Existing installs can be updated by leaving "Install Zebar" checked.
    • Zebar start script has been removed - update your existing GlazeWM config (%userprofile%/.glzr/glazewm/config.yaml) as follows:
-  startup_commands: ['shell-exec %userprofile%/.glzr/zebar/start.bat']
+  startup_commands: ['shell-exec zebar']

Join the Discord server

🎉 New features

  • Winget support is back (thanks @Dragon1573) via winget install glzr-io.glazewm.
  • Add set-tiling-direction <vertical|horizontal> command (#702).
  • Add focus --monitor <MONITOR_INDEX> command (#683).
  • Add new config options general.shutdown_commands and general.reload_commands(#713).
    • Also update the sample config to kill Zebar when the WM is shut down.
  • Add support for using env variable GLAZEWM_CONFIG_PATH for config path (#696).
  • Improve how tiling windows are moved when dragged via mouse (#673).
  • Change focus between windows without simulating a keypress (#672).
    • Prevents Start Menu from popping up when using lwin in keybindings.
    • Also fixes #674.

🐛 Bug fixes

  • Jump to correct monitor when cursor jump is configured to trigger: 'monitor_focus' (#744).
  • Ensure windows aren't unmanaged when moved to workspace (#727).
  • Fix regression causing certain windows to not be managed (#726).
  • Ignore display change messages when resuming from sleep (#740).
    • Sometimes caused workspaces to get swapped between monitors.
  • Ignore focus events from windows that aren't the foreground window (#725).
  • Remove any empty workspaces after move-workspace command (#743).
  • Update ignore rule in sample config for Powertoys Quick Accent (#745).

Big thanks to @JonasWischeropp, @NikitaRevenco, @MoaidHathot, @hiszd, @tmsagarofficial, @LucaCoduriV, @AmineDjeghri, @Dragon1573, and @lars-berger for contributing to this release 💛

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