Releases: glzr-io/glazewm
v3.6.0
🦀 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 forshell-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
.
- e.g.
- 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
.
- e.g.
- 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 💛
v3.5.0
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']
🎉 New features
- Add
not_equals
andnot_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
andfocus --prev-workspace
to focus by config order (#783).- Add new
focus —next-active-workspace
andfocus —prev-active-workspace
commands with the old behavior offocus --next-workspace
andfocus --prev-workspace
.
- Add new
🐛 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
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']
🎉 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
- Add new
scaleFactor
property to monitors in IPC responses. Fixdpi
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
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']
🎉 New features
- Add window effects for hiding the title bar and changing corner style (#735).
- Configurable via
window_effects.hide_title_bar
andwindow_effects.corner_style
. - Add to sample config.
- Configurable via
🐛 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
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']
🎉 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
andgeneral.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.
- Prevents Start Menu from popping up when using
🐛 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
🐛 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 forfocus --workspace <WORKSPACE>
andmove --workspace <WORKSPACE>
commands.
v3.1.0
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.
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 likealt+å
). 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 calledexec
) 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
- Fixed crashes and inconsistencies on display setting changes, system standby, and monitor disconnections.
- Improved reliability when restoring hidden windows on crash.
- Start menu no longer opens when pressing a keybinding that used the Windows key.
- Fixed crash in certain tiling layouts.
- Fixed crash if the config is reloaded with errors.
- And many more...
🚨 All breaking changes
- Removed the built-in bar and any bar-related config options.
- Commands and keybindings now always use the
commands
andbindings
config options. Removedcommand
andbinding
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 viawindow_behavior.state_defaults.floating.centered
. - Removed
general.show_floating_on_top
. This is instead changed viawindow_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 newgeneral.cursor_jump
config option.
Thanks again to those who helped with the V3 update, particularly @HolbyFPV, @ehellman, and @LucaCoduriV! 💛
v3 Preview
Preview build of v3 (aka. the Rust rewrite)
v2.1.1
Come join the Discord server⚡ for news on GlazeWM or if you're interested in desktop customization in general.
🐛 Bug fixes
- Crash when detaching monitor on display settings change (thanks @maxle5, @lars-berger in #519).
📘 Docs improvements
- Add table of contents to readme (thanks @robertmoelker in #509).
v2.1.0
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
- Add readme section for using LWin keybindings (thanks @Sebastian-Nielsen in #459).