All notable changes to this project will be documented in this file.
This project adheres to Semantic Versioning.
- Create
LaunchAgents
folder in~/Library
when installing service file, if the directory does not already exist #1728
5.0.4 - 2023-05-01
- Added launch arguments to manage launchd service:
--install-service
,--uninstall-service
,--start-service
,--restart-service
,--stop-service
#1619 - Check for
-arm64e_preview_abi
bootflag on Apple Silicon before attempting to load scripting addition.
5.0.3 - 2023-03-28
- Updated scripting-addition to support macOS Ventura 13.3 #1297
- Fixed issue with window focusing caused by incorrectly intercepting a synthesized mouse event #1551
- Fixed issue with window warping across displays with only a single window tiled at both displays #1577
- Fixed issue preventing window split from being toggled for windwos on an inactive space/display #1557
- Make window zoom persistence configurable (config window_zoom_persist) #1481
- Make frame rate of window animations configurable (config window_animation_frame_rate) #148
5.0.2 - 2022-12-16
- Updated scripting-addition to support macOS Ventura 13.0.0-13.1.0 #1297
- Properly escape application name when returned in window queries #1489
- Remove window tags used for debugging purposes from result of window query because it could cause a crash under certain conditions when a window closes #1475
- Change window placement of warp command to be more natural when warping windows within the same space #1435
5.0.1 - 2022-09-26
- Only allow window_animation_duration to be set if System Integrity Protection is partially disabled #148
- Output useless dummy .plist file for scripting addition to silence weird AppleScript warning #1449
5.0.0 - 2022-09-23
- Support for animating window move/resize operations (config window_animation_duration) #148
- Command to manually specify the default split_type #1423
- Window borders are now placed below and outside the window; new commands to specify hidpi, blur to act as a backdrop, and corner radius #1430
- Add split-child to output of window query and introduce new options for WINDOW_SEL: sibling, first_nephew, second_nephew, uncle, first_cousin, second_cousin #192
- Implemented a workaround to support window_opacity_duration, bypassing the Apple bug #1406
- Fix regression causing a window to be moved to the active space of an inactive display when sent to an inactive space of an inactive display #1053
- Fix regression causing hidden windows to not show in window queries #1421
- Clamp split ratio instead of resetting when an out of range / invalid value is given #1401
- Applying rule with property manage=on would cause both minimized and hidden windows to be managed, even though the window is not visible #1418
- Fix regression causing window sticky to not work properly #1424
- Make window zoom more flexible, allow parent-zoomed window to enter fullscreen and vice versa #1429
- Fix border size issue when moving a window to a different display on macOS Big Sur #1229
- Check Dock.app isFinishedLaunching property before attempting to inject scripting addition #749
- Properly update window ordering when a window is added to the top of a stack #1311
- Properly update insertion point in a window stack when the marked window is removed from the stack #1275
- Window zoom will now persist through changes to the bsp layout #864
- Removed support for macOS High Sierra, Mojave, and Catalina.
- Removed launch arguments --install-sa and --check-sa. Running --load-sa will automatically install/update the scripting-addition when necessary #1287
4.0.4 - 2022-09-08
- Fix null-deref when an application is spawned with a non-standard window #1399
4.0.3 - 2022-09-07
- Allow combining commands for config, space, and window domains #1371
- Fallback to using the AX API for mouse_action move if the scripting-addition is not available #1376
- Add role and subrole filter to window rules #1398
4.0.2 - 2022-08-24
- Fixed an issue that in rare occasions caused yabai to freeze when focusing an inactve space on an inactive display #1309.
- Fixed an issue that caused a window to incorrectly become focused when assigned to a space through rules #1370
- Fixed an issue that caused windows to snap back to its original position when moved between displays (to an inactive space) using mission-control #820
4.0.1 - 2022-05-17
- The scripting-addition will now also remove the space switch animation when using cmd+tab, clicking on an item in the Dock, and using the numeric macOS mission-control keyboard shortcuts #1235
- Improved logic used to determine the target window in a given direction #1220
- Improve behaviour of focus_follows_mouse autoraise, preventing a window from being raised if it would occlude some other floating window #1246
- The rule option mouse_follows_focus should now work properly (values were inverted) #1267
- Remove minor shadow artifact from border windows #1056
4.0.0 - 2022-03-16
- New config window_origin_display to specify which display a window should become managed at upon creation #951
- Window borders no longer require SIP to be disabled #1054
- WINDOW_SEL prev should correctly identify the correct window in a nested tree #1114
- Fixed an issue with the way unix sockets were handled that would cause an incoming connection to drop in rare occasions #1107
- Update scripting addition to support macOS 12.0.0 -> 12.3 #1054
- Fixed an issue that would cause the target window to snap back to its previous position when moved between displays using the cursor inside mission-control #820
- Properly drain autoreleased objects (from Apple frameworks) #751
- Detect and manage windows that are moved into the first space of a display when a space with active windows on it is destroyed #813
- The command space --balance now takes an optional axis as its argument #985
- Malformed windows that are managed through rules should be eligible for window alpha, focus follows mouse, and window borders #788
- Improve behaviour of focus_follows_mouse autoraise, preventing a window from being raised if it would occlude some other window. autoraise is temporarily disabled while a menu is opened. #407
- Work around broken Apple code for retrieving menubar dimensions on Apple Silicon M1 #793
- Rework query attributes and define dataformat as part of the API #775
- Properly clear space.last-window and space.first-window query attributes when the last window is made floating #786
- Reworked signal system; events are no longer coupled 1-1 with observed system events. Some events are now eligible for a new filter, active, only triggering for the application/window with key-focus. The window_focused signal is now triggered when the key-window changes, regardless of whether its application is frontmost or not. The window_created signal is now triggered for windows that are implicitly created at application launch. The window_destroyed signal is now triggered for windows that are implicitly destroyed at application exit; it is also eligible for app filter #581
- The following signals have been removed: mouse_up, mouse_down, mouse_dragged, mouse_moved, mission_control_check_for_exit, menu_opened, system_woke, daemon_message
3.3.10 - 2021-05-26
- Update scripting addition to support macOS 10.15.7 Supplemental Update
3.3.9 - 2021-05-25
- Update scripting addition to support macOS 11.4
3.3.8 - 2021-04-28
- Update scripting addition to support macOS 11.3
3.3.7 - 2021-02-02
- Update scripting addition to support macOS 11.2 #823
3.3.6 - 2020-12-18
- Update scripting addition to support macOS 11.1 #762
- Try to workaround resizing issues in some applications due to weird undocumented accessibility properties #109
- A sticky window will implicitly be treated as floating, but should not actually set the floating property #760
3.3.5 - 2020-12-03
- Improved SIP detection logic #716
- Windows that do not report a title at all should be treated as having the empty string as its title #707
- Allow SPACE_SEL to be used instead of mission-control index when specifying config options for a specific space #705
- Native fullscreen transitions would freeze on macOS Mojave due to internal API differences between macOS version #690
- Report proper error message when trying to use absolute resizing on a managed window #661
- Space/Window commands that utilize the scripting addition should correctly return a non-zero exit code upon failure #181
- Undo #545 because it created weird issues with focus #660
- Allow enabling/disabling mouse_follows_focus for specific windows using rules, overriding the global setting #675
- Space labels are now allowed to start with a digit, as long as it is followed by at least one or more non-digit character(s) #739
3.3.4 - 2020-11-14
- Fixed an issue (exposed on Big Sur, maybe didn't exist on prior macOS versions ??) that caused yabai' message receiver to block in read #714
3.3.3 - 2020-11-13
- Prevent window_opacity_duration from being used on Big Sur, because of an Apple bug #277
3.3.2 - 2020-11-13
- Focusing a space incorrectly returned a non-zero exit code even when the operation succeeded #181
3.3.1 - 2020-11-13
- New self-signed certificate used to sign the released binaries. You will have to re-enable accessibility permissions after this install.
- Update scripting-addition to support macOS Big Sur 11.0.1 #589
- Return a non-zero exit code when focusing a space fails due to an issue with the scripting-addition #181
3.3.0 - 2020-09-03
- Implemented support for stacking multiple windows in the same region (bsp node) #203
- Implemented a fullscreen layout, using stacking as its backing mechanism #337
- Fixed an issue that caused a window to not become unmanaged when a space with a single window changed to float #586
- Restore opacity back to full if window_opacity is disabled #585
- Prevent window_opacity_duration from being used on Catalina, because of an Apple bug #277
- Update scripting-addition to support macOS Big Sur 11.0 Build 20A5354i #589
- Border windows should not have shadows #617
- external_bar should not have to be set before regular padding #615
- Adjust reported mouse location to use when synthesizing events for ffm autofocus #637
- Extend SPACE_SEL and DISPLAY_SEL to include the option mouse #644
3.2.1 - 2020-06-17
- Fixed a race condition upon receiving window destroy notifications from macOS because their API is garbage and reports duplicate notifications for the same window #580
- focus-follows-mouse autofocus needs to perform some validation in order to see if the window is focusable #578
- Properly set mouse location for synthesized events used by ffm autofocus #545
3.2.0 - 2020-06-14
- Re-introduce a more efficient window border system #565
- New command window --opacity to explicitly set the opacity of a window #503
- Re-construct application switched and window created events in the correct order when the window is moved through a rule upon creation #564
- Improve interaction between window_topmost and windows that enter native-fullscreen mode #566
- Properly set focused window id cache upon window detection at first space activation #567
- Don't modify the properties of AXUnknown and AXPopover windows #535
- The window attribute visible should be 0 for minimized windows #569
- Prevent mouse_action move from placing the y-coordinate of a window outside valid display boundaries #570
- Properly allow the user to float windows that are forced to tile using window rules (manage=on) #571
- Improve visual feedback effect of the window --insert message selection #572
- Fix inconsistencies when mixing floating and sticky properties on a window #574
3.1.2 - 2020-06-09
- Revert changes because they can trigger a loop, causing slow window move/resize #16
3.1.1 - 2020-06-08
- If focus follows mouse is enabled, moving the cursor to a different display will now focus that display even if it is empty #459
- Extend definition of DISPLAY_SEL to include DIR_SEL so that displays can be targetted using cardinal directions #225
- When an application is launched or a window is created; tile the window on the space that has focus, rather than the display it spawned at #467
- Properly re-adjust window frame of managed windows if they break the assigned region in response to an event not invoked directly by the user #16
- Cardinal directions for WINDOW_SEL will only consider managed windows due to various issues with detecting the correct window #562
3.1.0 - 2020-06-05
- New command to output list of registered rules and remove by index #511
- New command to output list of registered signals and remove by index #458
- Blacklist loginwindow and ScreenSaverEngine processes #537
- Resolve some issues with the lifetime of NSRunningApplication #543
- Resolve some obscure issue that would in some cases lead to a double-free upon process termination #543
- Properly clear insert feedback settings if active on the root node when it is closed #546
- Window selector recent should properly work across spaces #544
3.0.2 - 2020-05-22
- Properly clear focus-follows-mouse cache upon space change #528
- Revised process type restrictions and observation requirements to correctly track some applications that don't identify correctly #529
- Translate newline (0x0a) and carriage return (0x0d) when outputting window titles through the query system #533
3.0.1 - 2020-05-09
- Update scripting addition for macOS 10.15.5 Beta (19F72f) #501
- Allow calling
space --label
without an argument to intentionally remove a previously assigned label #514 - Fixed an issue where a window moved across displays using mouse action move would be invisible #506
- Fixed an issue where the last window on a display would not properly update the focused window of the original display upon move, causing selectors to not work as expected #505
3.0.0 - 2020-05-01
- The deprecated rule option topmost='<BOOL_SEL>' has been removed.
- The built-in status bar has been removed. #486
- Window borders have been removed. #487
- New window commands
--minimize
and--deminimize
. Minimized windows are now reported through window queries and there is a new attributeminimized
to identify the current state #379 - New config option
external_bar
to specify special padding compatible with thespace --toggle padding
option #454
- New self-signed certificate used to sign the released binaries because the previous one expired at april 21th, 2020. You will have to re-enable accessibility permissions after this install. Sorry about that.
- Window commands using cardinal directions use euclidean distance to identify best target window #301
- Config option
insert_window_border_color
changed toinsert_feedback_color
#487 - Fixed an issue that would invalidate a manual insertion point, if a mouse action triggered #492
2.4.3 - 2020-04-14
- Changed how mouse down events are handled to reduce cycles spent in macOS event tap callback #376
- Fixed an issue that would cause a border to persist on fullscreen videos playing in Safari #360
2.4.2 - 2020-04-12
- Fix memory leak that would occur if realloc failed when reading from a socket #436
- Increase number of window and space commands that return a non-zero exit code upon failure #187
- Fixed a repositioning issue that would occur when a managed window was moved through click & drag through macOS native titlebar #473
2.4.1 - 2020-03-01
- Fixed a crash that could occur when reading from a socket (EBADF) or writing to a socket (SIGPIPE) #430
2.4.0 - 2020-03-01
- Support exclusion for command arguments of type REGEX #173
- Add ability to specify window layers; below (desktop), normal, and above (topmost) #429
- Properly return focus to the active window on the current space when a window is moved through a rule #418
- Prevent space operations (create, destroy, focus, swap, move and send to display) from applying while mission-control is active or the display is animating #417
2.3.0 - 2020-02-14
- New command space --swap SPACE_SEL command to swap the selected space with a given space. The selected and given space must belong to the same display #127
- Allow use of DISPLAY_SEL and SPACE_SEL for specifying display and space in rules #378
- Extend space --move command to operate on SPACE_SEL instead of prev/next. However, the selected and given space must belong to the same display #127
- Fixed issue where some window event would trigger a signal with an invalid window causing an invalid memory access #412
2.2.3 - 2020-02-12
- Ignore minimized windows when an application is unhidden (required by some applications like Chrome..) #300
- Don't add window to the window tree when moved to a different space when the window is minimized (required by some applications like Chrome..) #382
- Config file is no longer required for yabai to start #393
- Clear umask before trying to install scripting addition #400
- Update scripting addition to work with macos Catalina 10.15.4 Beta #404
- Don't forward MOUSE_UP event to the target application if we consumed the corresponding MOUSE_DOWN event #376
- Only float small windows if they are NOT resizable #179
- Fixed an issue that caused filtering signals by window title to not work properly #410
2.2.2 - 2020-01-20
- Fix use after free.. #375
2.2.1 - 2020-01-19
- Specify minimum macOS target version 10.13 when compiling #371
2.2.0 - 2020-01-19
- Ability to do real picture-in-picture of any arbitrary window #286
- Disable live-resizing of bsp-layout when using mouse-drag so that we are consistent with other mouse-interactions #341
- Improved spin-lock while waiting for native-fullscreen enter/exit animation to end #339
- New attribute uuid returned through display queries #346
- Ignore window moved events for windows in native-fullscreen mode. This is necessary because of weird macOS behaviour where a window in fullscreen-mode would trigger a window_moved event upon entering mission-control #347
- Allow borders to join native-fullscreen spaces because some applications create sub-windows that are visible in fullscreen spaces #353
- Ignore mouse-up event after clicking on a window maximize button #354
- Proper error reporting for rules and signals #357
- Properly preserve layout of spaces belonging to 4k and 5k displays after waking from sleep #259
- Add guard to make sure that we cannot incorrectly tile a window twice in case of weird macOS event behaviour #348
- Properly detect when mission-control is exited (with dock visible, hidden, and while a fullscreen space is active) #319
2.1.3 - 2019-11-29
- Fix regression causing window_destroyed signal to not be triggered (after adding app and title filter) #308
- Fixed an invalid memory access when using mouse-drag to warp a window to another display when both displays contain only a single window #309
- Reset zoom of all nodes in the subtree of the node that got removed #289
- Adding/removing nodes to/from the tree should properly reset the zoom-state #227
- Ability to enable/disable debug output at runtime #312
- Fix improper calculation of overlapping parts of status_bar when truncating title, and resolve an invalid free if the title could not be truncated #313
- Automatically offset the position of the status_bar if the macOS Menubar is not set to autohide #220
- Remove the line drawn at the bottom of the status_bar in a poorly dimmed version of the background color.
2.1.2 - 2019-11-10
- Fix regression causing windows to be added more than once in some circumstances #297
2.1.1 - 2019-11-10
- Remove buffer-size restriction when reading data from socket #221
- Replace strtok with custom function to parse key-value arguments in rules and signals #307
2.1.0 - 2019-11-09
- Config option window_border_radius to specify roundness of corners #281
- Config option window_border_placement to specify placement of window borders (exterior, interior, inset) #216
- Config option active_window_border_topmost to specify if the active border should always stay on top of other windows (off, on) #216
- Ability to label spaces, making the given label an alias that can be passed to any command taking a
<SPACE_SEL>
parameter #119 - New command to adjust the split percentage of a window #184
- Don't draw borders for minimized or hidden windows when a display is (dis)connected #250
- Sticky windows are no longer automatically topmost. New option to toggle window always on top through command or rule. New attribute topmost returned in window queries. #255
- Prevent the last user-space from being destroyed or moved to another display, because macOS does not actually support this #182
- Properly read window titles on macOS Catalina #278
- Smart swap/warp for window drag actions - the decision to swap or warp is based on where in the window the cursor is #142
- Fix subtle lock-free multithreading bug in the event processing code #240
- Changing border properties should not cause borders of minimized windows or hidden applications to be redrawn #305
- Automatically truncate title of window drawn in status_bar if it would overlap with other parts of the bar #214
- Remove throttling for mouse-drag move and lessen throttling for mouse-drag resize #285
- Properly float/unfloat windows that are tiled/untiled when marked as managed=on|off with a rule #297
2.0.1 - 2019-09-04
- window_opacity_duration was a copy-pasta job #208
2.0.0 - 2019-09-03
- Commands to toggle mission-control, show-desktop, and application expose #147
- Command to close windows that provide a close button in its titlebar #84
- Expose window shadow as a property in window queries and add shadow as an option to window --toggle #171
- Config option to set the duration of the transition between active / normal window opacity #208
- Automatically restart Dock.app after installing the scripting-addition, and tweak messages shown when a payload gets loaded, is already loaded or does not support the version of macOS it's running on #135
- Work around macOS craziness so that we can properly tile a window after it leaves native fullscreen mode #36
- Return an error for queries with invalid, named selectors #158
- Resolve a potential multi-threaded issue due to "undefined behaviour" regarding x86 instruction ordering #153
- Fix space padding and gap underflow when modified with a relative value #141
- Window_* signals no longer pass the application pid #154
- Ignore all windows that report a main role of AXPopover #162
- Ignore all windows that report a sub role of AXUnknown #164
- Track when the Dock changes preferences #147
- Properly detect when mission-control is deactivated #169
- Pass arguments to signals through environment variables instead #167
- Revert change that made the status bar draw above other windows because of compatibility with "windowed fullscreen" applications #170
- Warping a window should respect insert direction in scenarios where the default warp is equal to a swap operation #146
- Exiting mission-control will invalidate the region assigned to Spaces/Views as because a Space may have been dragged to a different monitor #118
- Application_Launched signal incorrectly fired multiple times due to accessibility retries #175
- Global space settings should properly apply again #176
- Fixed an issue that could cause windows to be overlapped when tiled #183
- Verify that a message was given before trying to connect to the running yabai instance #197
- Properly re-zoom a window when toggling its border #211
- Workaround to make sure a window actually set the proper dimensions #226 #188
- Moving window to a different space using rules could leave an empty tile #232
- Windows spawned while the owning application is hidden should not cause an empty tile to be created #233
- Properly handle destruction and re-creation of view when layout changes between bsp and float #230
1.1.2 - 2019-07-15
- Float native macOS fullscreen spaces #130
- Write error messsages returned to the client through stderr #131
- Allow window focus command to work without the existence of a focused window #133
1.1.1 - 2019-07-14
- The status bar should be disabled by default, if setting is missing from the config #126
1.1.0 - 2019-07-14
- Make loading scripting-addition more robust - validating version and functionality #108
- Merge options for query constraints with command selectors to have a unified method for addressing displays, spaces, and windows, as well as allowing commands to specify both a selected and a given entity of its type #112
- Dragging a tiled window to another display using the mouse will cause the window to be warped to that display upon release #103
- Escape quotes in window titles returned through query commands #114
- Extend window, space and display properties exposed through query commands #116
- Native macOS fullscreen spaces can now be addressed using their mission-control index, and can also be moved #117
- Opacity changes only apply to windows that properly identify as "standard" or "dialog" windows #120
- The status bar should now properly draw above any potential window that overlaps its frame #124
- Support XDG_CONFIG_HOME when locating the config file #125
- Allow every single config setting to be applied at runtime with immediate effect. Run config asynchronously after initialization #122
1.0.6 - 2019-07-09
- No longer necessary to depend on the scripting-addition to focus a window #102
- Extend definition of WINDOW_SEL to include smallest and largest #105
1.0.5 - 2019-07-07
- Fix missing quotation of string value outputted through window query commands #90
1.0.4 - 2019-07-06
- Fixed an issue that prevented yabai from running under multiple users simultaneously #95
- Extend window properties exposed through query commands #90
- Extend definition of WINDOW_SEL, SPACE_SEL and DISPLAY_SEL to include first, last, and recent #85
1.0.3 - 2019-06-30
- Prevent status_bar and window borders from displaying in native fullscreen spaces #71
- Fixed an issue with the status_bar where has_battery and charging would not be default initialized when macOS report that there are zero power sources #60
- Properly destroy the underlaying view when a space changes layout #81
1.0.2 - 2019-06-25
- Hide power indicator from the status-bar if a battery could not be found #60
- Disable focus follows mouse while the mouse_modifier key is held down #62
- Silence meaningless warning reported by the scripting-bridge framework #55
- Extend definition of WINDOW_SEL to include mouse, targetting the window below the cursor #66
- Allow all config (except status_bar) settings to be edited at runtime #69
- Window should not be added to the window-tree twice when deminimized on an inactive display #70
- Expose window_placement as a config setting to specify if windows become the first or second child #65
1.0.1 - 2019-06-23
- First official release