Skip to content

Releases: y3owk1n/mimi

Mimi Nightly

Mimi Nightly Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 13 Oct 02:38
e5c0bb1

The nightly workflow builds this pre-release from the latest commit on main.

Warning

This is a nightly build, not a tagged release. It can include unfinished changes and regressions. Install a tagged release if you need mimi to keep working day to day.

Build details

  • Commit: e5c0bb1
  • Branch: main
  • Full SHA: e5c0bb1743fa4c73c82c59cef467d46684a61b61

Artifacts

  • mimi-darwin-arm64.zip for macOS on Apple Silicon
  • mimi-darwin-amd64.zip for macOS on Intel

Feedback

If a nightly breaks something, include the commit above when you file an issue. It tells us which change to look at.

v0.21.1

Choose a tag to compare

@y3owk1n y3owk1n released this 15 Oct 07:13
b0f3eb5

0.21.1 (2026-10-13)

Bug Fixes

  • action: switch off enhanced accessibility while resizing or moving a window (#421) (62bc311)
  • native: log a failed enhanced interface write only when the setting stayed (#422) (6f2c319)
  • tiling: switch off enhanced accessibility while placing windows without animation (#419) (22075a0)

Documentation

  • installation: install the nightly build with Homebrew (#424) (9c220e8)

v0.21.0

Choose a tag to compare

@y3owk1n y3owk1n released this 10 Oct 14:11
c31726b

0.21.0 (2026-10-10)

Features

  • cli: cycle spaces on one display with --same-display (#400) (e33fd98)
  • cli: focus a window on another space with focus_window --number (#401) (ee1fdaf)
  • cli: print status and doctor as JSON with --json (#402) (64aaf31)
  • cli: report how a config reload went (#399) (8007016)
  • cli: report the frontmost window in full from query window (#394) (c703e71)
  • cli: take --number on resize_window and the move actions (#396) (b07d616)
  • hooks: pass the window's number to window hooks (#395) (0a8db18)
  • hooks: report the closed window's number on window_closed (#397) (87c040b)
  • hooks: watch every event kind while hooks tail is connected (#398) (eb5d10c)

Bug Fixes

  • border,action: detect Mission Control and App Expose properly (#361) (f470f1f)
  • build: fill the Info.plist versions in just bundle and the nix build (#385) (7ef416b)
  • build: stamp the man pages with the release version (#408) (3b7f32e)
  • cli: list every subcommand in the query and action help (#409) (9ff5dab)
  • cli: make -v print debug logs (#378) (5f790aa)
  • cli: make the apply_frames example pick out a layout's frames (#410) (32cff0f)
  • cli: print command results on stdout (#407) (bf484fe)
  • config: keep a 0 drop zone or stack bar size instead of the default (#406) (063887c)
  • config: reject a hook title filter that is not a regular expression (#372) (074fbf2)
  • config: reject an unknown field in a [[hooks]] table entry (#404) (51b0fdd)
  • config: stop mimi config init replacing an existing config (#373) (81ffc16)
  • daemon: never follow a link when emptying the captured logs (#388) (91044dd)
  • daemon: refuse to start a second daemon and stop signalling stale PIDs (#370) (5e5b18b)
  • daemon: warn about each subscriber's first dropped event (#380) (ae42aa3)
  • doctor: suggest a layout command that works when the layout check fails (#412) (47630a1)
  • hooks,tiling: kill everything a hook or layout started when it times out (#366) (ea566c7)
  • hooks: leave mimi_PID empty when the event has no app (#405) (1c07df6)
  • hooks: stop a window title running as code inside a quoted hook variable (#364) (19b1c30)
  • logging: make the event log opt-in and rotate it (#381) (15d757e)
  • observe: read whether window observers are enabled under the lock (#389) (363589e)
  • service: make mimi services stop keep the service stopped (#371) (b2b462c)
  • space: stop a cross-display space switch clicking into the target display (#368) (33a5a45)
  • space: stop a space switch reporting success when it posted no swipe (#367) (d4069fb)
  • status,doctor: report the daemon's own Accessibility grant (#379) (a85ac25)
  • tiling: report a resident layout that exited as a layout failure (#392) (44e56b9)
  • tiling: rewrite a refused frame through the serializer (#390) (00c8edb)
  • tiling: stop a layout pass delaying hooks and borders until it ends (#365) (04507e7)
  • tiling: write the learned minimums through a renamed temp file (#391) (d6632f0)
  • window: report no active window instead of a frame error for an app with none (#369) (e68daf9)

Performance Improvements

  • tiling: reuse window titles when reading frames back (#376) (b7f0303)
  • tiling: stop waiting on new windows the rules keep out (#374) (5cc4f2f)
  • tiling: stop writing frames to windows already at them (#375) (e6dc6f9)

Improvements

  • tiling: log what a pass spent and which windows it left out (#382) (9ce5cf1)

Documentation

  • bring the architecture, hook, and troubleshooting docs in line with the code (#393) (e4c227b)
  • correct the docs and skills against the code before the beta release (#413) (941ea9d)
  • readme: mark mimi as beta (#403) (ea8fcec)
  • tiling: note that drag previews run a oneshot layout up to 25 times a second (#377) (479a33e)

v0.20.3

Choose a tag to compare

@y3owk1n y3owk1n released this 07 Oct 15:24
cca19cb

0.20.3 (2026-10-07)

Bug Fixes

  • border: keep the focused border off a floating picture in picture window (#359) (a70d6e1)
  • observe: tile the first window of an app that was slow to accept the observer (#356) (72bea91)
  • space: switch spaces on macOS 27 when natural scrolling is off (#354) (367fe06)
  • tiling: forget a window's minimum size once it takes a smaller frame (#351) (4bf00ef)
  • tiling: keep a native tab group in place when its tabs switch (#355) (c0672c6)
  • tiling: leave browser extension popups untiled (#358) (c024b84)
  • tiling: recognize a new native tab while its frame is still settling (#357) (5d51a7f)

v0.20.2

Choose a tag to compare

@y3owk1n y3owk1n released this 04 Oct 02:39
f91547f

0.20.2 (2026-10-03)

Bug Fixes

  • config: keep reloading after the config file is deleted and recreated (#342) (e070a84)
  • config: report misspelled keys instead of ignoring them (#343) (fbed2e8)
  • ipc: stop the daemon spinning when it cannot accept connections (#345) (70cb524)
  • space: find the cursor's display when SkyLight cannot read the cursor (#344) (d8d519a)
  • space: judge a window-to-space move by where the window lands (#346) (bda6330)
  • tiling: keep Safari's video full-screen window out of the layout (#332) (7556650)
  • tiling: keep the layout when the Dock switches spaces (#334) (ac82793)

Performance Improvements

  • border: keep each border to thin strips around its window (#335) (0e9fc2e)
  • border: stop resizes leaving the daemon's memory high (#336) (6d8d87f)

Improvements

  • log: log what failed silently and quiet the drag noise (#341) (c011642)
  • log: put daemon logs at the right level and wording (#338) (0a04e1b)
  • log: readable one-line console logs (#337) (87b5f8b)
  • native: log the native failures that were silent (#340) (ce44559)
  • native: route native logs through the daemon logger (#339) (d840fb4)

v0.20.1

Choose a tag to compare

@y3owk1n y3owk1n released this 27 Sep 05:35
9d53738

0.20.1 (2026-09-27)

Bug Fixes

  • quiet the console and skip animating windows already in place (#327) (5ed2781)

v0.20.0

Choose a tag to compare

@y3owk1n y3owk1n released this 18 Sep 02:46
d661499

0.20.0 (2026-09-17)

TLDR:

  • added mimi doctor for some troubleshooting
  • added mimi hooks <list|fire|tail> for better hooks management
  • added display information in window and workspace hooks
  • added hooks for light or dark mode switches
  • added hooks for screen locked and unlocked
  • added hooks for display connected or disconnected
  • hooks stdin changes from /dev/null to json
  • update example to support custom paddings on top of usable/visible screen size
  • more robust window drag and drop logic and ui
  • add modifiers keys into tiling input to enable more robust use cases like alt and drop makes it float or some sort
  • borders are now resync when closing a window with x or cmd+w
  • some other small fixes

Features

  • cli: add mimi doctor to run the troubleshooting checks (#304) (3c65173)
  • cli: add mimi hooks list and mimi hooks fire (#313) (010d205)
  • cli: add mimi hooks tail to stream the daemon's events (#317) (5fbf9e0)
  • cli: check every layout answers a sample input in mimi doctor (#306) (0b57cb6)
  • cli: report the daemon's build in mimi status and mimi doctor (#305) (7d1f59f)
  • hooks: filter window and workspace hooks by display (#318) (07db30b)
  • hooks: fire on_appearance_changed when light or dark mode switches (#308) (ed86d41)
  • hooks: fire on_screen_locked and on_screen_unlocked (#309) (fc5cebb)
  • hooks: give every hook the event as JSON on stdin (#312) (b07d8d0)
  • hooks: tell on_display_changed hooks which displays are connected (#310) (8395b0f)
  • tiling: change the padding at runtime with mimi tiling cmd padding (#302) (e8fd9e0)
  • tiling: keep a display edge clear with PADDING in rules.py (#300) (24da94c)
  • tiling: mark the window a drop would act on while dragging (#314) (20bcc5d)
  • tiling: tell the layout which modifier keys a drag was held with (#315) (658c13e)
  • tiling: tile a floated window again with an option-drag (#320) (f05d0c8)

Bug Fixes

  • border: drop the border of a window closed with Command-W (#303) (a8320d3)
  • space: fail a space switch the Dock did not take (#307) (3137dec)
  • tiling: leave focus on a window a rule keeps out after a close (#321) (0bc6805)
  • tiling: let a floated window tile again after togglefloat (#319) (ad8a0cb)

Documentation

  • add the layout contract reference and the hook environment matrix (#311) (e12e8dd)

v0.19.0

Choose a tag to compare

@y3owk1n y3owk1n released this 15 Sep 09:41
cfb1e84

0.19.0 (2026-09-15)

TLDR:

  • added support for border placement via border.placement = <inside | outside>
  • added support to hide border if only 1 window in the space via border.hide_when_single
  • rewritten border to draw on window server's window instead of appkit
  • more border related fixes that interfaces macOS systems
  • ensure focus_follow_mouse behave properly
  • adds 2 layer of detection before settling with a minimum window size to prevent weird bugs

Features

  • border: draw the border inside the window with placement = "inside" (#292) (c99bcb5)
  • border: skip the border for a window alone on its space (#293) (6a7274b)

Bug Fixes

  • border: hide borders with their windows in Mission Control and Show Desktop (#291) (b662a26)
  • border: keep an inside border above a window its app raises (#295) (11fc6b9)
  • border: stop an inside border flashing on every click (#296) (32b095b)
  • border: stop an inside border flashing when its window is clicked (#299) (ec12358)
  • border: stop the border flashing and drifting while a window resizes (#297) (6e439ad)
  • focus: follow the mouse between two windows of one application (#298) (7c3dd53)
  • mouse: stop focus_follows_mouse focusing the window under a menu or panel (#294) (68a6c0f)
  • tiling: stop learning a window minimum from a clamped frame (#289) (5d79f5d)

v0.18.0

Choose a tag to compare

@y3owk1n y3owk1n released this 14 Sep 13:07
482cce1

0.18.0 (2026-09-14)

TLDR:

  • added mimi action focus_display <number>
  • added hooks for on_system_sleep, on_system_wake, on_display_changed
  • added mimi action close_window --number <id>
  • added mimi action minimize_window --number <id> and mimi action unminimize_window --number <id>
  • added mimi action fullscreen_window --number <id>
  • added relative resize for action resize_window
  • added mimi query spaces and mimi query displays
  • added focus_on_mouse
  • move rules from script to config with more built-in supports, e.g. app in certain space or display, managed or unmanaged and more
  • support multiple layout on different space or display
  • better minimum size window detection

Features

  • action,hooks: focus a display, and hook sleep, wake and display changes (#281) (62f7c7e)
  • action,query: list the windows in the Dock, and restore one by number (#283) (4d06869)
  • action: close, minimize and full-screen a window, and resize by a delta (#280) (3a74140)
  • mouse: give keyboard focus to the window the pointer rests on (#282) (6a30901)
  • query: list every space, and say which space and display a window is on (#278) (f172639)
  • rules: open a window on a chosen space or display (#285) (49a4645)
  • rules: place the windows already open when the daemon starts (#286) (2a6dbae)
  • tiling: keep windows out of every layout with rules in config.toml (#279) (1b60385)
  • tiling: run a different layout on a chosen display or space (#284) (b94e441)

Bug Fixes

  • build: pin the macOS 14.0 floor in cgo flags and the app bundle (#276) (55093c9)
  • tiling: read a window twice before taking its size as a minimum (#287) (116a874)

v0.17.0

Choose a tag to compare

@y3owk1n y3owk1n released this 14 Sep 04:07
60ee6b7

0.17.0 (2026-09-14)

TLDR:

  • added mimi-ask, mimi-setup-config and mimi-setup-layout to help in managing your mimi configs and layouts
  • now mimi's tiling engine and layouts respects windows minimum size, for screen that is small, this is the best effort to tile them properly be it in bsp or strip. Nothing mimi can do due to the fact that those window sizes are fixed at minimum by the window itself.

Features

  • tiling: give layouts the minimum size a window refuses to go under (#275) (05dd83a)

Documentation

  • cli: describe the per-display array that tiling preview prints (#272) (28439b9)
  • skills: add ask-mimi, setup-config and setup-layout skills for users (#270) (7e8fad7)
  • skills: cover changing an existing tiling setup in setup-layout (#273) (419dc41)