github miracle-wm-org/miracle-wm v0.9.0

3 hours ago

Spring is here and so is Miracle 0.9 🌱 !

This release is all about our new WebAssembly Plugin System for window management, configuration, and beyond. Miracle is a truly hackable window manager now. Check out the demo here: https://youtu.be/Kohl9wy3S7g

The Debian and Snap releases will come out some time this weekend 🐦

Enjoy!

Features ⭐

Breaking Changes 💔 IMPORTANT

Bugs fixed 🐛

  • Fixed windows going into a tile when their not supposed to be tiled (e.g. dialogs, popups, etc.)
  • Fixed resize by pointer logic to improve consistency
  • Fixed bad timing of window open animations so that we wait for the first window buffer before animating
  • Fixed poor use of locking (I was being dumb!)

What's Changed

  • task: debian changelog 0.8.2 by @mattkae in #710
  • Feature/back and forth config by @eliasreid in #694
  • task: organize the public C API includes in preparation for adding more things to it by @mattkae in #713
  • task: remove the 'current' rectangle from animations by @mattkae in #714
  • New icons for miracle-wm by @TaseenA09 in #704
  • task: cache visible area in leaf containers by @mattkae in #715
  • task: add geometry helpers to facilitate going between mir and glm types by @mattkae in #716
  • task: update year from 2024 to 2025 by @mattkae in #717
  • task: remove version checks in order to assume latest by @mattkae in #720
  • task: remove unused compositor state by @mattkae in #719
  • task: rework parts of the Animation class to make it easier to work with by @mattkae in #722
  • task: refactor ParentContainer::create_space for a zero-allocation strategy by @mattkae in #724
  • feature: add wasmedge to the build and start it behind a feature flag by @mattkae in #725
  • bugfix: only install libmirrenderer-dev if it is available by @mattkae in #734
  • bugfix: disable the dev ppa in CI for now by @mattkae in #735
  • feature: implementation of an animation plugin using WebAssembly by @mattkae in #730
  • bugfix: add stdbool to config.h for generator's sakes by @mattkae in #736
  • task: use pch better and reduce include requirements by @mattkae in #737
  • (#732) bugfix: rotated monitors now have the right size on the clip area by @mattkae in #738
  • (#739) bugfix: no longer crashing when switching workspaces early by @mattkae in #741
  • feature: raise a floating tree when a leaf is focused by @mattkae in #744
  • feature: implementation of a background on floating containers by @mattkae in #745
  • Release/0.8.3 by @mattkae in #748
  • (#197) bugfix: one source of truth for the version by @mattkae in #749
  • feature: auto reload display configs on change by @aliihsancengiz in #747
  • task: improve feature flag management by @mattkae in #750
  • feature: implementation of resizing with the pointer by @mattkae in #752
  • task: remove output animation handle + virtual workspace by @mattkae in #755
  • bugfix: preferred index should be optional instead of int max when it cannot be found by @mattkae in #756
  • (#751) bugfix: desktop files should be in usr/share instead of usr/local/share by @mattkae in #757
  • bugfix: debian rules should run the build correctly by @mattkae in #758
  • bugfix: fix minor issue with resizing causing a crash by @mattkae in #761
  • task: simplify window placement algorithm in order to dispatch less by @mattkae in #763
  • task: run Github workflow on Fedora rawhide by @mattkae in #764
  • task: rename miracle-wm-config to miracle-wm-c by @mattkae in #765
  • feature: custom window management via WebAssembly plugins by @mattkae in #762
  • (#743) bugfix: manually fixing the rotated output saga once and for all by @mattkae in #766
  • task: no longer need mircommon internal by @mattkae in #767
  • refactor: remove the workspace layout strategy and place tiled windows directly into their parent by @mattkae in #768
  • feature: working tiled placement via WebAssembly plugins by @mattkae in #771
  • task: add plugin Rust builds to the project by @mattkae in #772
  • feature: able to request focus on workspaces from the plugins by @mattkae in #773
  • bugfix + feature: fading out animations can now set the rectangle on the surface by @mattkae in #774
  • feature: configure the function name per plugin function so that it can be anything by @mattkae in #775
  • feature: non-tiling windows can be placed on and associated with a workspace via the plugin system by @mattkae in #776
  • feature: making the Rust plugin API 1000x times better by @mattkae in #778
  • feature: implement a way to get the active workspace from the plugin by @mattkae in #779
  • I forgot my own email address by @TaseenA09 in #777
  • feature: adding mutablity to plugins and testing it by @mattkae in #781
  • feature: add window_deleted notification to the plugin API by @mattkae in #782
  • feature: saving the PluginHandle in the PluginManagedContainer by @mattkae in #783
  • feature: add the ability to query the windows that are managed by a particular plugin by @mattkae in #784
  • bugfix: fixed occlusion zones by @mattkae in #785
  • feature: plugins can handle keyboard input by @mattkae in #786
  • feature: letting plugins know when a window has been focused by @mattkae in #787
  • feature: replace scan code keybinds with human-readable XKB keysym names by @mattkae in #788
  • task: remove multi select experimental feature by @mattkae in #789
  • refactor: introduce the idea of a WindowContainer which has window-specific actions defined for it by @mattkae in #790
  • refactor: more containers refactor, specifically parent container by @mattkae in #791
  • feature: introduce the idea of ContainerEffects so that we can safely apply multiple effects to a container by @mattkae in #793
  • feature: adding transform and alpha to window placement in plugins by @mattkae in #792
  • feature: piping the current transform and alpha to the WindowInfo by @mattkae in #794
  • feature: modify managed windows from the plugins by @mattkae in #795
  • feature: plugins can now be notified about window unfocus by @mattkae in #796
  • feature: update set_size to set_rectangle in the plugin system by @mattkae in #797
  • feature: handle pointer events from the plugin by @mattkae in #798
  • feature: stable ids for plugin objects by @mattkae in #799
  • feature: adding a request focus method for plugins by @mattkae in #800
  • feature: notifying plugins when a workspace is added or deleted by @mattkae in #801
  • bugfix: fix deadlock potential in plugins by @mattkae in #802
  • feature: notifications about workspace resizes for plugins and allowing users to not always animate transitions by @mattkae in #803
  • feature: plugins can now read their little section of the configuration file by @mattkae in #804
  • feature: config now does NOT auto reload and must be reloaded with Meta + Shift + R by @mattkae in #805
  • feature: windows can now be resized from their corners by @mattkae in #806
  • feature: add animations to shell components by @mattkae in #807
  • feature: disable animations on shell components by @mattkae in #808
  • feature: notifying plugins when a workspace is added or deleted by @mattkae in #810
  • feature: fixing a ton of things with window placement by @mattkae in #812
  • feature: allow users to specify if the window is resizable and movable by @mattkae in #814
  • feature: plugins always get first pick at input handling by @mattkae in #815
  • bugfix: start all plugins at 8 instead of 0 because 0 is special null by @mattkae in #816
  • feature: plugins can now queue custom, arbitrary animations by @mattkae in #817
  • task: refactor the Rust plugin API for readability and understandability by @mattkae in #818
  • feature: add Rust docs for miracle-plugin by @mattkae in #819
  • task: make url docs.miracle-wm.org and add wrangler.toml by @mattkae in #820
  • feature: plugins can now configure miracle by @mattkae in #822
  • feature: use a proper enum for Placement in plugins by @mattkae in #823
  • bugfix: add ForwardingSurface alpha by @mattkae in #824
  • bugfix: make it so that miracle-plugin-rs can compile outside of its directory by @mattkae in #825
  • bugfix: fix gap logic being swapped in LeafContainer by @mattkae in #827
  • bugfix: fixing various shutdown issues by @mattkae in #826
  • bugfix: containers are now movable between outputs again by @mattkae in #828
  • bugfix: removing dying surfaces when they are done animating by @mattkae in #829
  • Lots and lots of new plugin work by @mattkae in #830
  • feature: add a unique ID to all containers to improve resolution by @mattkae in #831
  • bugfix: getting rid of this absolutely terrible global mutex by @mattkae in #832
  • bugfix: invoking window animation under lock by @mattkae in #833
  • feature: reload a plugin when its hash changes + tests by @mattkae in #834
  • feature: make it so that plugins reenter nicely on window focus and window unfocus by @mattkae in #835
  • feature: enable plugin system by default by @mattkae in #836
  • Add session wrapper script for Miracle WM snap by @mattkae in #780
  • task: libmircommon dev is no longer a dependency by @mattkae in #841
  • bugfix: fix locking issues around workspaces and timing issues by @mattkae in #840
  • bugfix: catching exception when using grimshot by @mattkae in #842
  • docs: update README by @mattkae in #843
  • task: remove animation duration from animation plugins by @mattkae in #844
  • bugfix: fixing bad ids for containers + improving animation significantly + fixing a bunch of silly deadlocks by @mattkae in #845
  • task: greatly improve the slide animation with a new clip area field by @mattkae in #846
  • bugfix: run open animation when window is ready, not when it is opened by @mattkae in #847
  • bugfix: windows now open with opacity 0 and get fullscreened at the right layer by @mattkae in #848
  • bugfix: make the container ID increment match the peeked number by @mattkae in #849
  • task: add flag for MIR_VERSION_2_26_OR_GREATER by @mattkae in #852
  • feature: early load the cursor theme so that it can be set from the config by @mattkae in #851
  • feature: improve animating of window movement + proper border sizing by @mattkae in #853
  • feature: removing mini trees in favor of floating single windows into freestyle mode by @mattkae in #854
  • task: make click to focus default instead of hover by @mattkae in #855
  • bugfix: only start moving and dragging when we selected the intersected window by @mattkae in #856
  • bugfix: fix inability to resize windows with the pointer by @mattkae in #858
  • task: bump version to 0.9.0 by @mattkae in #857

New Contributors

Full Changelog: v0.8.3...v0.9.0

Don't miss a new miracle-wm release

NewReleases is sending notifications on new releases.