{
    "releases": [
        {
            "version": "3.0.15",
            "date": "2026-05-28",
            "highlights": [
                "Fixed the zone-selector popup switching the active layout on hover when snap-assist was up — dragging a window past the top of the screen no longer resnaps every other tiled window into a different layout (#542)",
                "Removed: switching the autotile algorithm by hovering the zone-selector popup. Use NextLayout / QuickLayout1–9 / Layout Picker (Meta+Alt+Space) instead (#542)"
            ]
        },
        {
            "version": "3.0.14",
            "date": "2026-05-27",
            "highlights": [
                "Fixed intermittent DPMS-wake autotile orphan reassignment on dual-monitor setups — KWin's screenAdded/screenRemoved signals now latch the screen-change-in-progress flag early enough to catch the per-window outputChanged race (#527, #536)"
            ]
        },
        {
            "version": "3.0.13",
            "date": "2026-05-26",
            "highlights": [
                "Fixed windows from disabled monitors being pulled into the active autotile zone after DPMS sleep — the autotile path now skips KWin's orphan-window reassignment, matching the existing snapping-side guard (#527, #528)"
            ]
        },
        {
            "version": "3.0.12",
            "date": "2026-05-25",
            "highlights": [
                "Fixed focus-follows-mouse stealing focus from active floating and overflow windows when the cursor wandered onto an underlying tiled window — pauses until a tiled window becomes active (#461, #525)"
            ]
        },
        {
            "version": "3.0.11",
            "date": "2026-05-24",
            "highlights": [
                "Fixed focus-follows-mouse activating tiled windows underneath an active emoji picker, notification popup, or krunner — pauses until a tileable window becomes active (#461, #521)",
                "Fixed stale pending-restore entries for excluded apps growing session.json and logging on every daemon start (#461, #521)",
                "Fixed drag artifacts, post-snap flicker, and a gray decoration ring during snap drags on hybrid Intel+NVIDIA setups (#516, #523)",
                "Skip redundant layer-shell setter messages across virtual-desktop switches (#522)"
            ]
        },
        {
            "version": "3.0.10",
            "date": "2026-05-23",
            "highlights": [
                "Fixed focus-follows-mouse stopping after any OSD, snap preview, or layout picker was shown on an autotile monitor (#461, #517)",
                "Fixed popups and dialogs consuming the main window's saved zone on reopen — snap-restore now matches structural window kind (#461, #518)",
                "Fixed the passive overlay shell staying mapped and prewarmed even with effects disabled (#515, #519)",
                "Fixed animation shader pattern features (sparkle, streak, smoke) scaling inconsistently across different monitor sizes (#520)"
            ]
        },
        {
            "version": "3.0.9",
            "date": "2026-05-22",
            "highlights": [
                "Fixed per-virtual-desktop and per-activity assignment toggles being unable to re-enable once turned off — the row's disabled state was cascading to the nested switch (#461, #514)"
            ]
        },
        {
            "version": "3.0.8",
            "date": "2026-05-22",
            "highlights": [
                "Fixed a KWin crash (SIGSEGV) that could take down the whole compositor, closing every open application, when snapping a window to a zone on certain monitors (#511, #513)",
                "Fixed a window snapped near a monitor boundary jumping onto the wrong screen after a fast cross-monitor drag (#513)",
                "Fixed the \"Cancel Zone Overlay\" Escape shortcut grabbing Esc system-wide, including over fullscreen games, after an unexpected daemon exit (#461, #510)",
                "Fixed per-monitor virtual-desktop and activity disable toggles getting stuck in the off position (#461, #510)",
                "Fixed windows opened on monitors or desktops with snapping disabled still being auto-snapped until the daemon was restarted (#461, #510)",
                "Fixed Electron child popups such as Steam image previews polluting focus tracking and routing real windows into the popup's zone (#461, #510)",
                "Fixed session-restored windows being missing from zone-occupancy tracking, so snap assist and empty-zone placement treated filled zones as free (#461, #510)",
                "Fixed snap assist appearing for every empty zone after a bulk resnap that placed nothing (#461, #510)"
            ]
        },
        {
            "version": "3.0.7",
            "date": "2026-05-21",
            "highlights": [
                "Window open and close animations (bounce, fly-in) no longer render as ghosted, multi-copy trails on KWin (#475)",
                "New windows no longer flash at their spawn position before animating into their zone or tile (#475)",
                "Snap-restored windows now play their open animation into the resolved zone instead of from the screen center (#475)",
                "The soft glow behind the OSDs now animates with the card instead of popping in when the transition ends (#475)",
                "Fixed a faint grey halo painted around OSDs during the bounce and fly-in transitions (#475)",
                "bounce now drops the window in from above its frame, matching niri's original motion (#475)",
                "The layout OSD, navigation OSD, layout picker, and zone selector now share one card style with a consistent soft glow (#475)",
                "Removed the crosswarp transition — its front-speed control is now a frontSpeed parameter on wave-warp (#475)",
                "Removed the plasma-flow transition, which duplicated soft-warp-fade (#475)"
            ]
        },
        {
            "version": "3.0.6",
            "date": "2026-05-20",
            "highlights": [
                "Fixed the settings window (and any 5th+ window) being left tiled when toggling autotile → snapping with more autotiled windows than zones in the manual layout (#504)",
                "Fixed the 250 ms+ stall before windows start moving on autotile → snap — windows now animate to their snap positions within ~2 ms of the toggle (#504)",
                "Fixed focus-follows-mouse not re-focusing a window after focus was stolen by a keyboard shortcut, click, or new window (#461)",
                "Fixed tiling assignments saved on the settings page silently dropping — the dropdown selection now persists across navigation (#497)",
                "Fixed the daemon toggle re-enabling itself after disable — the unit is now masked so window-lifecycle D-Bus calls can't reactivate it (#497)",
                "Fixed the Snapping Assignments Monitor row reverting to its old value after Save when a per-desktop or per-activity entry masked the screen-level slot (#497)",
                "Fixed the OSD announcing the wrong layout name after editing a non-current-context assignment slot (#497)",
                "Fixed windows on disabled monitors / desktops still being tracked and resurrected after restart (#461)",
                "Fixed re-enabling a disabled virtual desktop sometimes silently failing after a screen redetect (#461)",
                "Fixed popup menus and Steam image previews being snapped to weird zones (#461)",
                "Fixed stale snap assignments from deleted layouts lingering across first-launch (and dangling zone IDs in multi-zone windows) (#461)",
                "Fixed critical-notification windows triggering focus tracking and appearing in the app picker (#461)"
            ]
        },
        {
            "version": "3.0.5",
            "date": "2026-05-19",
            "highlights": [
                "Fixed the shader picker dropdown being disabled in the layout editor after enabling shader effects (#494)",
                "Fixed newly-opened windows still auto-snapping to zones when snapping was turned off globally (#461)",
                "Fixed keyboard snap-to-zone shortcuts still firing when snapping was turned off globally — Snapping.Enabled=false is now a total kill-switch at parity with autotiling (#461)",
                "Fixed Electron/CEF child surfaces (Steam image previews, Discord popups, VS Code dialogs) being snapped to zones (#461)",
                "KWin effect-load failures now name the exact build-vs-running KWin version and the remediation, instead of a generic 'effect not running' message (#481)",
                "Nix flake hardened: new overlays.default output, and module/install docs explicitly steer users toward the NixOS/Home Manager modules and away from the unsafe `nix profile install` path (#481)"
            ]
        },
        {
            "version": "3.0.4",
            "date": "2026-05-18",
            "highlights": [
                "Fixed maximized windows ballooning in size when autotiled (#461)",
                "Fixed snapping and keyboard snap-to-zone ignoring the per-monitor, per-desktop, and per-activity disable settings (#461)",
                "Fixed windows with a blank window class restoring into each other's saved zones (#461)",
                "Fixed windows staying tiled after switching onto a desktop where autotiling is disabled (#461)",
                "Fixed the KWin desktop effect not appearing on NixOS — the flake now builds PlasmaZones against your system's KWin so the effect always matches the running compositor (#481)",
                "Fixed support report generation crashing on Qt 6.11+ — plasmazones-report and the bug-report instructions now use busctl, which is unaffected (#481)"
            ]
        },
        {
            "version": "3.0.3",
            "date": "2026-05-17",
            "highlights": [
                "Fixed zones sliding underneath a top panel, with the bottom edge over-reserved — the daemon now uses the compositor's authoritative work area for panel struts (#461, #472)"
            ]
        },
        {
            "version": "3.0.2",
            "date": "2026-05-17",
            "highlights": [
                "Fixed layouts shifting toward the desktop origin after a monitor powered off and back on, such as on DPMS wake or hotplug (#465, #467)",
                "Fixed windows being laid out over panels on the first layout pass at startup (#466)",
                "Support reports and the daemon now show whether the KWin effect bridge is connected",
                "openSUSE packages are now published to the openSUSE Build Service"
            ]
        },
        {
            "version": "3.0.0",
            "date": "2026-05-16",
            "highlights": [
                "Virtual screens for ultrawide monitors: subdivide a physical monitor into independent logical screens, each with its own layouts, autotile state, snap-assist, OSDs, shortcuts, and per-desktop or per-activity assignments. New swap and rotate actions with a confirmation OSD",
                "Animation App Rules let you assign motion curves, shader overrides, and per-event timings to specific apps. A two-layer resolver with leaf seeds gives widgets distinctive tunings even when they share a parent rule",
                "New animation engine with vertex-shader plumbing and live-texture sampling, plus 47 ported transition shaders: 28 from niri, 9 from Burn-My-Windows, 10 BMW-inspired originals, an audio-reactive neon-city cityscape, a Matrix rain port, a 3D chrome-protocol rewrite, and user-texture support",
                "Unified PassiveOverlayShell: OSDs, snap-assist, layout picker, zone selector, and zone overlay all run in one click-through shell with independent slot animations and explicit z-order, replacing the legacy NotificationOverlay",
                "Krohnkite-style autotile: drag a tiled window onto another to reorder slots live, and a new Unlimited overflow lets the stack grow past the algorithm's natural cap instead of evicting windows",
                "Animations settings overhauled into drill-down sub-pages with motion sets for themed override bundles, a per-event shader picker, a generic shader browser, and a separate Snapping Shaders page",
                "Layout ordering for cycling: cycle shortcuts follow a user-configurable order set per-mode under Settings → Snapping or Tiling → Ordering, instead of the implicit save-time order",
                "Per-mode disable lists: snapping and autotiling each have their own exclusion lists for monitors, virtual desktops, and activities, with the disabled-context OSD pointing the user at the right toggle",
                "Hold and toggle controls now work in always-active mode (#249): a binding like Right Mouse Button activates when always-active is off and deactivates when on, FancyZones-style",
                "Global \"auto-assign new windows for all layouts\" master toggle (#370) and a separate \"Desktop switch OSD\" toggle (#372)",
                "Drag protocol rewritten so the daemon owns all drag routing decisions (#310), eliminating the ~40s dead-drag stalls reported when settings reload mid-drag",
                "Meta-F float toggle now runs daemon-local (#310): sub-50ms keypress to toggle instead of stalling on D-Bus backpressure across four hops",
                "Native-feeling wheel scroll across every settings page (#405) using Kirigami.WheelHandler for Plasma-aware scroll speed",
                "Phosphor SDK: core services are extracted into reusable LGPL libraries covering engine, layout-api, animation, shaders, workspaces, placement, tiles, zones, screens, snap-engine, tile-engine, config, fsloader, shell-patterns, wayland, and layer. A new phosphor-compositor SDK lets third-party Wayland compositors host the placement, tiling, and overlay services without depending on KWin",
                "Fixed brand-new virtual desktops not picking up the user's default mode and layout (#368)",
                "Fixed snap-assist showing windows from other virtual desktops as occupied (#323)",
                "Fixed per-activity layout assignments losing to per-monitor defaults in the layout registry precedence order (#413)",
                "Fixed the Layouts context menu eventually failing to open after enough show and hide cycles (#406)",
                "Fixed autotile shortcut adjustments to master ratio and master count not persisting across reloads (#271)",
                "Fixed a cycle-triggered resnap that affected windows on other virtual desktops"
            ]
        },
        {
            "version": "2.8.7",
            "date": "2026-04-14",
            "highlights": [
                "New BUILD_KWIN_EFFECT CMake option (default ON) lets packagers build PlasmaZones on distros with KWin < 6.6 (Debian 13, Ubuntu 24.04, Fedora 40) by skipping just the C++ effect plugin (#321, thanks @iubayb)",
                "Fixed Qt 6.8 build failure from a Qt 6.9-only QWaylandWindow::updateExposure() call — now guarded with a QT_VERSION check and a public-API fallback (#321)"
            ]
        },
        {
            "version": "2.8.6",
            "date": "2026-04-11",
            "highlights": [
                "Fixed Emby and other Electron/CEF apps silently breaking after mid-session WM_CLASS rename (#271) — float toggle, focus navigation, and snap operations now survive class mutations",
                "New WindowRegistry decouples runtime state from mutable app classes; daemon always reads the live class instead of a frozen first-seen string"
            ]
        },
        {
            "version": "2.8.5",
            "date": "2026-04-10",
            "highlights": [
                "Fixed master window ballooning to 100% on every notification (#271) — 75ms debounce coalesces spurious KWin minimize/unminimize cycles triggered by plasmashell popups",
                "Filtered Plasma shell surfaces (notification popups, emoji picker, krunner) out of autotile tracking entirely",
                "Settings toggle now recovers the systemd unit from failed state, so users can re-enable PlasmaZones after killing a terminal-run daemon without logging out"
            ]
        },
        {
            "version": "2.8.4",
            "date": "2026-04-09",
            "highlights": [
                "Fixed startup race where ephemeral windows (Steam splash, Electron notifications) bypassed the autotile size filter",
                "New --log-file flag for easy file-based log capture",
                "Autotile eligibility diagnostics show window properties at debug level"
            ]
        },
        {
            "version": "2.8.3",
            "date": "2026-04-09",
            "highlights": [
                "New --debug flag for easy diagnostic log capture (plasmazonesd --debug)",
                "Deeper autotile debug logging for diagnosing the intermittent ratio bug (#271)"
            ]
        },
        {
            "version": "2.8.2",
            "date": "2026-04-08",
            "highlights": [
                "Fixed autotile windows being pushed off-screen when their minimum size exceeds the assigned zone",
                "Reverted min-size clearing regression from 2.8.1 that triggered the off-screen centering",
                "Added diagnostic logging for autotile retiles, min-sizes, zone geometries, and window eligibility"
            ]
        },
        {
            "version": "2.8.1",
            "date": "2026-04-08",
            "highlights": [
                "Fixed autotile ratio getting stuck after notification auto-dismiss (e.g., media player notifications)",
                "Stale window min-sizes are now cleared on screen geometry changes to prevent split ratio override"
            ]
        },
        {
            "version": "2.8.0",
            "date": "2026-04-07",
            "highlights": [
                "Support report generator for quick bug report archives",
                "Autotiled windows now survive layout switches, mode toggles, and daemon restarts",
                "Visual OSD feedback when toggling on a disabled desktop or screen",
                "Config migrated to v2 nested schema with automatic migration from v1",
                "Assignments and session state split to dedicated files for cleaner configs",
                "Daemon toggle now enables systemd service for autostart on login",
                "Fixed assignment persistence and tiling order across daemon restarts",
                "Fixed window restore after config v2 migration"
            ]
        },
        {
            "version": "2.7.1",
            "date": "2026-04-06",
            "highlights": [
                "Scripted algorithms with @param metadata now get auto-generated UI controls (sliders, switches, combo boxes)",
                "Configurable ratio step size for master ratio keyboard adjustments",
                "Per-screen master ratio and count overrides now persist correctly",
                "Fixed shader dark band at adjacent zone edges in Aretha Shell",
                "Reset to defaults now clears per-algorithm autotile settings",
                "Editor shader error box restored, shader category duplication fixed"
            ]
        },
        {
            "version": "2.7.0",
            "date": "2026-04-04",
            "highlights": [
                "Config migrated from INI to JSON format with automatic migration on first launch",
                "Dragging a window off autotile now keeps it where you dropped it",
                "Master ratio and count shortcuts show actual values in the OSD",
                "Shortcut-adjusted ratio and count now persist across reboots",
                "Small utility windows like the emoji picker no longer enter the autotile tree",
                "Focus-follows-mouse no longer steals focus through under-size windows",
                "Tumbleweed Drift shader gains sand streams, stronger audio reactivity, and faster animation",
                "Snap assist, overlay, and shortcut stability improvements"
            ]
        },
        {
            "version": "2.6.0",
            "date": "2026-04-03",
            "highlights": [
                "Tumbleweed Drift shader with openSUSE desert landscape and audio-reactive dust effects",
                "Neon Venom and Chrome Protocol shaders",
                "Voxel terrain now uses depth buffer and multipass rendering",
                "Shader engine gains depth buffer support, per-channel filter/wrapping, and presets",
                "Autotile JS API adds per-window context, custom parameters, and lifecycle hooks",
                "Layout ordering settings for snapping and tiling cycle",
                "Focus-follows-mouse no longer steals focus through excluded or overlay windows",
                "Shortcut-adjusted master ratio and count now save to disk",
                "Layout picker no longer overwrites the global default when selecting per-screen",
                "What's New dialog shown on first launch after update",
                "Vulkan and rendering pipeline stability fixes"
            ]
        },
        {
            "version": "2.5.3",
            "date": "2026-04-01",
            "highlights": [
                "Fixed autotile split ratio expanding to full width with some apps",
                "Overlay tools like Spectacle and color pickers are no longer auto-tiled",
                "Fixed trigger settings reverting after daemon restart"
            ]
        },
        {
            "version": "2.5.2",
            "date": "2026-03-31",
            "highlights": [
                "Algorithm previews in zone selector now respect metadata",
                "Fixed window picker exclusion lists not saving",
                "Fixed autotile split ratio corruption on state load"
            ]
        },
        {
            "version": "2.5.1",
            "date": "2026-03-30",
            "highlights": [
                "Separate autotile sticky window handling setting",
                "Fixed editor shader and undo crashes",
                "Fixed Arch Linux packaging"
            ]
        },
        {
            "version": "2.5.0",
            "date": "2026-03-30",
            "highlights": [
                "All 24 tiling algorithms are now JavaScript with hot-reload and custom user scripts",
                "Dwindle (Memory) algorithm with persistent split positions across window close/reopen",
                "Works on Hyprland, Sway, Wayfire, niri, COSMIC, and other Wayland compositors",
                "Vulkan rendering backend with automatic OpenGL fallback",
                "New Layout and Algorithm creation wizards",
                "Layout filter bar with group-by, sort-by, and search",
                "Disable PlasmaZones per virtual desktop or activity",
                "Per-algorithm settings storage for split ratio and master count",
                "Settings redesign with collapsible cards and consolidated footer",
                "Single-instance settings app with unsaved changes confirmation"
            ]
        },
        {
            "version": "2.4.7",
            "date": "2026-03-27",
            "highlights": [
                "Center-distance zone selection for overlapping zones",
                "Fixed window picker inserting unmatchable values",
                "Fixed keyboard shortcuts moving excluded windows",
                "Fixed drag-out unsnap not clearing persisted zone"
            ]
        },
        {
            "version": "2.4.6",
            "date": "2026-03-27",
            "highlights": [
                "New Plasma Sigil shader with animated energy effects",
                "Fixed System Settings crash when opening PlasmaZones KCM"
            ]
        },
        {
            "version": "2.4.5",
            "date": "2026-03-26",
            "highlights": [
                "SVG support for shader textures with configurable resolution",
                "Fixed exclusions UI not being able to add new entries",
                "Fixed Neon Phantom shader white-out"
            ]
        },
        {
            "version": "2.4.3",
            "date": "2026-03-26",
            "highlights": [
                "Fixed identical monitors showing as duplicates in settings",
                "Fixed App-to-Zone rules not matching some app IDs",
                "Fixed exclusions ignored by auto-snap and keyboard shortcuts",
                "New Ember Trace and Neon Phantom shaders"
            ]
        },
        {
            "version": "2.4.2",
            "date": "2026-03-25",
            "highlights": [
                "Fixed multi-zone span pulling in background zones",
                "Settings UI now refreshes when daemon starts from toggle"
            ]
        },
        {
            "version": "2.4.1",
            "date": "2026-03-25",
            "highlights": [
                "ConfigDefaults is now the single source of truth for all settings",
                "Settings bounds exposed to QML via SettingsController",
                "Fixed edge threshold resetting to 100px",
                "Fixed per-screen autotile split ratio using wrong default"
            ]
        },
        {
            "version": "2.4.0",
            "date": "2026-03-25",
            "highlights": [
                "KZones layout import",
                "Aspect ratio layouts with auto-detection and filtering",
                "Portable Wayland build for non-KDE compositors",
                "Standalone settings app with sidebar navigation, search, and shortcuts overlay",
                "New Arch Drift and EndeavourOS Drift branded shaders",
                "Fixed synchronous D-Bus calls freezing compositor"
            ]
        },
        {
            "version": "2.3.16",
            "date": "2026-03-21",
            "highlights": [
                "Fixed layout card button flicker on hover",
                "Improved zone selector edge scrolling speed and trigger zone"
            ]
        },
        {
            "version": "2.3.15",
            "date": "2026-03-21",
            "highlights": [
                "Fixed shader preview crash on hover",
                "Fixed CAVA settings not applied dynamically"
            ]
        },
        {
            "version": "2.3.14",
            "date": "2026-03-21",
            "highlights": [
                "Fixed flickering icons on layout card hover"
            ]
        },
        {
            "version": "2.3.13",
            "date": "2026-03-21",
            "highlights": [
                "Fixed resnap buffer empty on layout change",
                "Per-screen mode toggle and layout cycle scoped to target screen",
                "Unified layout change resnap path"
            ]
        },
        {
            "version": "2.3.12",
            "date": "2026-03-21",
            "highlights": [
                "Fixed EDID serial mismatch between KWin effect and daemon"
            ]
        },
        {
            "version": "2.3.11",
            "date": "2026-03-20",
            "highlights": [
                "Fixed Move/Swap hotkeys on dual same-model monitors"
            ]
        },
        {
            "version": "2.3.10",
            "date": "2026-03-20",
            "highlights": [
                "Fixed Move/Swap hotkeys using wrong screen's layout"
            ]
        },
        {
            "version": "2.3.9",
            "date": "2026-03-20",
            "highlights": [
                "Fixed modifier key settings zeroed on save"
            ]
        },
        {
            "version": "2.3.8",
            "date": "2026-03-19",
            "highlights": [
                "Batch settings D-Bus method for applying multiple settings at once",
                "Per-screen settings D-Bus methods",
                "Zone previews in autotile dropdowns",
                "Daemon is now the sole config writer, eliminating race conditions"
            ]
        },
        {
            "version": "2.3.7",
            "date": "2026-03-19",
            "highlights": [
                "Fixed windows unsnapping when monitor enters standby"
            ]
        },
        {
            "version": "2.3.6",
            "date": "2026-03-19",
            "highlights": [
                "Fixed navigation shortcuts snapping to wrong screen on multi-monitor"
            ]
        },
        {
            "version": "2.3.5",
            "date": "2026-03-19",
            "highlights": [
                "Fixed KCM assignment save rewriting modes",
                "Resnap/retile on KCM assignment changes",
                "Per-screen resnap buffer for multi-monitor setups"
            ]
        },
        {
            "version": "2.3.3",
            "date": "2026-03-17",
            "highlights": [
                "Fixed autotile not activating when snapping disabled first"
            ]
        },
        {
            "version": "2.3.2",
            "date": "2026-03-17",
            "highlights": [
                "Batched D-Bus signals for autotile transitions, reducing messages from ~45 to 3"
            ]
        },
        {
            "version": "2.3.1",
            "date": "2026-03-17",
            "highlights": [
                "Fixed window state lost on daemon reload",
                "Fixed screen not found on Wayland due to hex serial mismatch",
                "Fixed autotile window order lost on rapid mode toggle"
            ]
        },
        {
            "version": "2.3.0",
            "date": "2026-03-17",
            "highlights": [
                "Stable EDID-based screen identifiers that survive replug and reboot",
                "Per-screen layout filtering in cycle, picker, and zone selector",
                "Per-screen layout locking with Meta+Ctrl+L shortcut",
                "Shader parameter locking in editor",
                "Hot reload for shaders",
                "Fixed snap assist sending windows to wrong monitor"
            ]
        },
        {
            "version": "2.2.1",
            "date": "2026-03-14",
            "highlights": [
                "Fixed primary screen detection on Wayland",
                "Complete German translations"
            ]
        },
        {
            "version": "2.2.0",
            "date": "2026-03-14",
            "highlights": [
                "Independent border and title bar toggles",
                "Border corner radius setting",
                "Right-click context menu for layouts",
                "Monitor selector for layout editor",
                "Fixed double toggle-float on multi-monitor setups"
            ]
        },
        {
            "version": "2.1.0",
            "date": "2026-03-13",
            "highlights": [
                "Per-desktop/activity tiling state isolation",
                "Assignment storage migrated from JSON to KConfig",
                "New Fedora, NixOS, openSUSE, and KDE Neon zone shaders",
                "Fixed editor zones not reaching canvas edges during drag"
            ]
        },
        {
            "version": "2.0.2",
            "date": "2026-03-11",
            "highlights": [
                "Fixed missing retileAllScreens D-Bus slot",
                "Fixed negative zone geometries from constraint solver"
            ]
        },
        {
            "version": "2.0.1",
            "date": "2026-03-11",
            "highlights": [
                "Fixed Arch lib64 file conflict with generic tarball",
                "Fixed global show-zone-numbers toggle ignored when layout active",
                "Easing preset dropdown UX improvements"
            ]
        },
        {
            "version": "2.0.0",
            "date": "2026-03-10",
            "highlights": [
                "Autotiling engine with 10 algorithms including Master+Stack, BSP, Dwindle, and Spiral",
                "Per-screen algorithm selection with independent settings",
                "Hide title bars on tiled windows with configurable focus border",
                "Translate-only slide animations with staggered cascading",
                "Cubic bezier easing curve editor with live preview",
                "Dual-view layout picker with Snapping/Tiling modes",
                "Comprehensive unit tests for all algorithms"
            ]
        },
        {
            "version": "1.15.15",
            "date": "2026-03-09",
            "highlights": [
                "Fixed shortcuts not working until window is manually snapped"
            ]
        },
        {
            "version": "1.15.14",
            "date": "2026-03-09",
            "highlights": [
                "Fixed Nix build failure after systemd service template change"
            ]
        },
        {
            "version": "1.15.13",
            "date": "2026-03-08",
            "highlights": [
                "Fixed login freeze with many shortcuts via async D-Bus registration"
            ]
        },
        {
            "version": "1.15.12",
            "date": "2026-03-08",
            "highlights": [
                "Fixed global shortcuts broken after v1.15.9/v1.15.10"
            ]
        },
        {
            "version": "1.15.11",
            "date": "2026-03-08",
            "highlights": [
                "Fixed release workflow retry loop"
            ]
        },
        {
            "version": "1.15.10",
            "date": "2026-03-08",
            "highlights": [
                "Fixed login freeze with async D-Bus shortcut key grabs"
            ]
        },
        {
            "version": "1.15.9",
            "date": "2026-03-08",
            "highlights": [
                "Fixed login freeze with autostart apps via deferred shortcut registration",
                "Systemd service ordering for KGlobalAccel"
            ]
        },
        {
            "version": "1.15.8",
            "date": "2026-03-08",
            "highlights": [
                "Fixed RPM requiring exact KWin version pin"
            ]
        },
        {
            "version": "1.15.7",
            "date": "2026-03-06",
            "highlights": [
                "KWin 6.6.2 compatibility rebuild"
            ]
        },
        {
            "version": "1.15.6",
            "date": "2026-02-28",
            "highlights": [
                "Fixed Debian package build using KDE Neon container"
            ]
        },
        {
            "version": "1.15.5",
            "date": "2026-02-27",
            "highlights": [
                "Fixed multi-zone snap cascade in tiling layouts"
            ]
        },
        {
            "version": "1.15.4",
            "date": "2026-02-26",
            "highlights": [
                "Fixed overlapping zone multi-zone cascade",
                "Edge tolerance now respects settings instead of hardcoded 5px"
            ]
        },
        {
            "version": "1.15.3",
            "date": "2026-02-26",
            "highlights": [
                "KWin effect plugin version lock for reliable loading"
            ]
        },
        {
            "version": "1.15.2",
            "date": "2026-02-22",
            "highlights": [
                "Fixed overlapping zone snapping so the smallest zone at cursor wins"
            ]
        },
        {
            "version": "1.15.1",
            "date": "2026-02-22",
            "highlights": [
                "Fixed RPM packaging for translation files"
            ]
        },
        {
            "version": "1.15.0",
            "date": "2026-02-22",
            "highlights": [
                "Mosaic Pulse audio-reactive shader",
                "User-supplied image textures for shaders, up to 4 images",
                "Shared GLSL utilities extracted for all shaders",
                "Fixed system layout restore after deleting user override"
            ]
        },
        {
            "version": "1.14.1",
            "date": "2026-02-21",
            "highlights": [
                "Fixed zone persistence on daemon restart"
            ]
        },
        {
            "version": "1.14.0",
            "date": "2026-02-21",
            "highlights": [
                "Per-side edge gaps for independent top/bottom/left/right spacing",
                "Per-zone fixed pixel geometry for pixel-perfect layouts",
                "Full screen geometry toggle to ignore panels and taskbars",
                "AlwaysActive zone activation mode with no modifier key needed"
            ]
        },
        {
            "version": "1.13.0",
            "date": "2026-02-20",
            "highlights": [
                "Layout Picker Overlay for full-screen interactive layout browsing",
                "Snap Assist after resnap when switching layouts",
                "Fixed zone activation broken when Zone Selector disabled"
            ]
        },
        {
            "version": "1.12.2",
            "date": "2026-02-19",
            "highlights": [
                "Fixed audio visualizer CAVA process failing with odd bar counts",
                "Fixed audio shader data losing native type through QML binding"
            ]
        },
        {
            "version": "1.12.1",
            "date": "2026-02-18",
            "highlights": [
                "Fixed KCM Editor tab loading failure on NixOS system installs",
                "Fixed KWin effect metadata warning"
            ]
        },
        {
            "version": "1.12.0",
            "date": "2026-02-18",
            "highlights": [
                "Reapply window geometries after panel changes",
                "Fixed zones and windows shifting after editing KDE panel"
            ]
        },
        {
            "version": "1.11.8",
            "date": "2026-02-16",
            "highlights": [
                "Signal-driven drag detection replaces poll timer entirely"
            ]
        },
        {
            "version": "1.11.7",
            "date": "2026-02-16",
            "highlights": [
                "Event-driven cursor tracking during drag",
                "Throttled drag signals to ~30Hz",
                "Eliminated QDBusInterface for WindowDrag calls"
            ]
        },
        {
            "version": "1.11.6",
            "date": "2026-02-16",
            "highlights": [
                "Dynamic poll timer: 500ms idle, 32ms during drag",
                "Reduced D-Bus traffic during drag from 60Hz to 30Hz"
            ]
        },
        {
            "version": "1.11.5",
            "date": "2026-02-16",
            "highlights": [
                "Deferred D-Bus calls during drag until trigger detected",
                "Fixed KCM tab button resizing"
            ]
        },
        {
            "version": "1.11.4",
            "date": "2026-02-16",
            "highlights": [
                "Fixed layout grid card text alignment"
            ]
        },
        {
            "version": "1.11.3",
            "date": "2026-02-16",
            "highlights": [
                "Master toggle for zone span",
                "Master toggle for snap assist",
                "Fixed Nix flake evaluation error"
            ]
        },
        {
            "version": "1.11.2",
            "date": "2026-02-15",
            "highlights": [
                "Snap Assist trigger override: hold modifier to enable per-snap"
            ]
        },
        {
            "version": "1.11.1",
            "date": "2026-02-15",
            "highlights": [
                "Fixed drag stutter from redundant D-Bus calls at 60-144+ calls/sec",
                "Fixed login hang from synchronous D-Bus in exclusion settings"
            ]
        },
        {
            "version": "1.11.0",
            "date": "2026-02-15",
            "highlights": [
                "EDID-based monitor identification so layouts survive port changes",
                "Nix flake with NixOS module and Home Manager module",
                "Fixed NixOS KCM loading failure"
            ]
        },
        {
            "version": "1.10.6",
            "date": "2026-02-14",
            "highlights": [
                "Toggle activation mode: single press instead of hold",
                "Proximity snap always active without modifier"
            ]
        },
        {
            "version": "1.10.5",
            "date": "2026-02-13",
            "highlights": [
                "Fixed Snap Assist D-Bus calls freezing compositor"
            ]
        },
        {
            "version": "1.10.4",
            "date": "2026-02-13",
            "highlights": [
                "Fixed session restore placing windows on wrong display",
                "Escape during drag now dismisses overlay without cancelling drag"
            ]
        },
        {
            "version": "1.10.3",
            "date": "2026-02-13",
            "highlights": [
                "Fixed CAVA audio visualizer not starting without restart",
                "Default layout now selected on fresh install"
            ]
        },
        {
            "version": "1.10.2",
            "date": "2026-02-13",
            "highlights": [
                "CI-generated RPM spec and Debian changelog from CHANGELOG.md"
            ]
        },
        {
            "version": "1.10.0",
            "date": "2026-02-13",
            "highlights": [
                "Multiple binds per action, up to 4 independent triggers",
                "Click-to-edit existing triggers in settings",
                "AND semantics for combined modifier+button triggers",
                "Conflict detection for duplicate triggers"
            ]
        },
        {
            "version": "1.9.5",
            "date": "2026-02-13",
            "highlights": [
                "Zones can overlap autohide/dodge panels",
                "Fixed compositor freeze from processEvents() during drag",
                "Fixed snap assist not dismissing properly"
            ]
        },
        {
            "version": "1.9.3",
            "date": "2026-02-12",
            "highlights": [
                "Fixed proximity snap bypassing overlay activation"
            ]
        },
        {
            "version": "1.9.2",
            "date": "2026-02-12",
            "highlights": [
                "Proximity snap always-on option",
                "Escape key cancels overlay during window drag"
            ]
        },
        {
            "version": "1.9.1",
            "date": "2026-02-12",
            "highlights": [
                "Snap Assist: Aero Snap style window picker to fill empty zones",
                "Fixed zone padding and outer gap not persisting in layout settings"
            ]
        },
        {
            "version": "1.8.4",
            "date": "2026-02-11",
            "highlights": [
                "Shader preset load/save in editor",
                "Preview shader effects in zone editor",
                "Restore window size immediately when dragging between zones",
                "Overlay follows cursor when dragging to another monitor"
            ]
        },
        {
            "version": "1.8.2",
            "date": "2026-02-09",
            "highlights": [
                "Full zone label font customization with family, size, weight, and style",
                "Font picker dialog with live preview and search",
                "New Sonic Ripple audio-reactive shader"
            ]
        },
        {
            "version": "1.8.1",
            "date": "2026-02-09",
            "highlights": [
                "Paint-to-span zone modifier: progressively paint across zones while dragging"
            ]
        },
        {
            "version": "1.8.0",
            "date": "2026-02-09",
            "highlights": [
                "CAVA audio visualization for audio-reactive shaders",
                "Spectrum Pulse shader with bass glow and spectrum aurora",
                "Auto-assign windows to first empty zone per layout",
                "App-to-zone auto-snap rules per layout",
                "Window picker dialog for exclude lists",
                "Per-monitor zone selector settings",
                "Snap-all-windows shortcut (Meta+Ctrl+S)"
            ]
        },
        {
            "version": "1.7.0",
            "date": "2026-02-06",
            "highlights": [
                "Layout visibility filtering per screen, desktop, and activity",
                "Layout cycling respects visibility filters",
                "OSD style defaults to visual preview"
            ]
        },
        {
            "version": "1.6.2",
            "date": "2026-02-06",
            "highlights": [
                "Fixed editor not moving to selected screen"
            ]
        },
        {
            "version": "1.6.1",
            "date": "2026-02-06",
            "highlights": [
                "New Liquid Metal shader with mercury-like fluid surface"
            ]
        },
        {
            "version": "1.6.0",
            "date": "2026-02-05",
            "highlights": [
                "Multi-zone snapping support in window tracking",
                "Fixed shader parameters accumulating across shader switches"
            ]
        },
        {
            "version": "1.5.9",
            "date": "2026-02-05",
            "highlights": [
                "Release pipeline generates Debian and RPM notes from CHANGELOG.md"
            ]
        },
        {
            "version": "1.5.2",
            "date": "2026-02-05",
            "highlights": [
                "Multi-pass shader rendering with up to 4 buffer passes",
                "Zone labels rendered as shader textures",
                "Voronoi Stained Glass shader with 3D raymarching",
                "Mouse button zone activation as alternative to modifier keys",
                "Zone selector auto-scroll",
                "Update notification banner with GitHub release checking"
            ]
        },
        {
            "version": "1.3.4",
            "date": "2026-02-03",
            "highlights": [
                "RHI/Vulkan zone overlay renderer replaces OpenGL path",
                "#include directive support in shaders"
            ]
        },
        {
            "version": "1.3.3",
            "date": "2026-02-03",
            "highlights": [
                "Resnap-to-new-layout shortcut",
                "Shortcut consolidation"
            ]
        },
        {
            "version": "1.3.2",
            "date": "2026-02-03",
            "highlights": [
                "KWin PlasmaZones effect enabled by default on install"
            ]
        },
        {
            "version": "1.3.1",
            "date": "2026-02-02",
            "highlights": [
                "Debian releases now include debug symbol packages"
            ]
        },
        {
            "version": "1.3.0",
            "date": "2026-02-02",
            "highlights": [
                "Fixed build paths for Arch and Debian packaging",
                "Session restore validates layout matches before restoring"
            ]
        },
        {
            "version": "1.2.6",
            "date": "2026-02-02",
            "highlights": [
                "Float/unfloat preserves geometry across window close/reopen",
                "Autotiling settings page in KCM"
            ]
        },
        {
            "version": "1.2.5",
            "date": "2026-02-01",
            "highlights": [
                "Navigation OSD with multi-monitor support"
            ]
        },
        {
            "version": "1.2.4",
            "date": "2026-02-01",
            "highlights": [
                "All synchronous D-Bus calls converted to async to prevent compositor freezes"
            ]
        },
        {
            "version": "1.2.2",
            "date": "2026-02-01",
            "highlights": [
                "Async D-Bus for floating toggle prevents compositor freeze"
            ]
        },
        {
            "version": "1.2.1",
            "date": "2026-02-01",
            "highlights": [
                "GitHub Actions CI/CD for Arch, Debian, and Fedora builds",
                "Floating state persisted across sessions"
            ]
        },
        {
            "version": "1.2.0",
            "date": "2026-02-01",
            "highlights": [
                "Initial packaged release for Wayland-only KDE Plasma 6",
                "Drag windows to zones with modifier key activation",
                "Custom zone layouts with visual editor",
                "Multi-monitor support",
                "Custom shader overlays for zone visualization",
                "Snap-to-zone shortcuts (Meta+Ctrl+1-9)",
                "Swap and rotate windows between zones",
                "Per-activity layout assignments",
                "Autotiling with Master-Stack, Columns, and BSP",
                "German translation",
                "Systemd user service and D-Bus interface"
            ]
        }
    ]
}
