Skip to content

Major Rewrite and performance changes

Pre-release
Pre-release

Choose a tag to compare

@ryzendew ryzendew released this 04 Jun 09:00
· 10 commits to main since this release
3c261b2

Changelog

[0.6.0] - 2026-06-04

Animation System

  • Implemented a complete Material 3 (M3) motion and animation framework with core animation engine providing easing curves, duration presets, and keyframe support
  • Defined motion design tokens following the M3 specification (duration, easing, delay constants)
  • Integrated the animation system into widget rendering pipelines across all shell components
  • Rewrote the animation manager with improved interpolation, completion callbacks, and shared animation state
  • Applied animated transitions to: dock tooltips, OSD overlays, taskbar state changes, app drawer popups, power modals, calendar popups, media player popups, volume mixer popups, VPN popups, weather popups, battery/clock/media/weather/workspaces/Bluetooth widget paints, settings panels, wallpaper transitions, and button/slider/toggle interactions
  • Added layout caching and measurement scratch utilities for efficient animation frame rendering
  • Added animated pill-style slot rendering support
  • Replaced all instantaneous visibility toggles with animated transitions (fade, slide, scale)

Compositor Backend Rewrite (Multi-Compositor Architecture)

  • MangoWM Window Manager:

    • Full workspace management overhaul with complete rewrite
    • Rewrote keyboard and output backend for the new architecture
    • Added runtime with IPC integration, event loop, and compositor lifecycle management
    • Added comprehensive MangoWM documentation detailing architecture, IPC protocol, and configuration
    • Implemented compositor-level power management (shutdown, reboot, logout, suspend via logind)
  • Hyprland Backend:

    • Added runtime with socket-based IPC, event handling, and window management
    • Added event handler for Hyprland IPC signals (workspace change, window open/close, urgent, fullscreen)
    • Added keyboard layout management via Hyprland
    • Added output/monitor management
    • Added workspace tracking and manipulation
    • Added toplevel window mapping protocol for window-to-workspace association
    • Added window identification and matching
    • Added new Wayland protocol for focus grabbing
  • Sway Backend:

    • Added IPC runtime with socket communication
    • Added keyboard layout management
    • Added output management
    • Added workspace tracking
  • Niri Backend:

    • Added compositor runtime
    • Added keyboard support
    • Added output support
    • Added workspace management
  • Triad Backend:

    • Added compositor runtime
    • Added keyboard support
    • Added output support
    • Added workspace management
  • Ext-Workspace Protocol Backend:

    • Added support for the wlr-ext-workspace-unstable-v1 protocol
    • Implemented workspace creation, removal, reordering, and naming
  • Compositor Abstraction Layer:

    • Added IPC abstraction over compositor communication channels
    • Added virtual interface for keyboard management
    • Added virtual interface for workspace management
    • Added runtime compositor detection (Hyprland, Sway, Niri, MangoWM, Triad)
    • Restructured Wayland registry for dynamic compositor feature registration

DBus Services Restructuring

  • Relocated all DBus service implementations to a dedicated DBus layer for clean separation of concerns:
    • Bluetooth (service and agent)
    • Keyring/secret service
    • MPRIS (player and album art)
    • NetworkManager (service, secret agent, type definitions)
    • Notifications service
    • System tray (host, manager, SNI icons, stream icons, environment filter, context menu)
    • UDisks2 drive service
  • Added GNOME/KScreen global shortcuts DBus service
  • Added Bluetooth pairing agent implementation
  • Significantly rewrote NetworkManager service to fix VPN connection state tracking, secret agent integration, and connection activation

File Structure Refactoring

  • Renamed and reorganized numerous core files across the codebase to improve naming consistency and logical grouping
  • Reorganized widget files into dedicated subdirectories by component type (battery, clock, media, weather, spacer, widget bar, shared utilities, app drawer, start menu)
  • Removed all dock-specific component files that were refactored into shared components (dock calendar popup, control center, spotlight, tray, weather popup, volume mixer, workspace strip)

Desktop Widgets System

  • Full Desktop Widget System with:
    • Widget host container with dynamic placement, resize, and configuration
    • Interactive calendar widget with month navigation and event indicators
    • Analog and digital clock display
    • Full media player widget with album art, playback controls, and progress
    • System monitor widget showing CPU, memory, disk, and network usage graphs with real-time data
    • Current conditions and forecast weather display
    • Enhanced weather visualization with animated backgrounds
    • Compositing layer for widget rendering
    • Widget positioning, size, and visibility preferences
    • Audio visualization data reader (CAVA integration) for visualizers
  • Merged desktop widgets with the desktop experience layer
  • Updated settings UI for widget configuration

Settings Application

  • Hyprland Settings Tab - Comprehensive Hyprland configuration covering:

    • General settings (mod key, sensitivity, gaps, borders, cursor behavior, gestures, tearing)
    • Input configuration (keyboard layout, touchpad, mouse, scroll behavior)
    • Key binding management with modmask, keycode, dispatcher, and argument editing
    • Decoration settings (rounding, opacity, blur, shadows, dimming, colormatrix)
    • Animation configuration with per-style settings (fade, slide, windows, workspaces, border)
    • Layout settings (dwindle/master/top, orientation, gap offsets, split options)
    • Dwindle layout specifics (pseudo mode, no_gaps_when_only, force_split)
    • Master layout specifics (new window position, master factor, smart resizing)
    • Rendering settings (explicit sync, direct scanout, vsync, cursor, power optimization)
    • Miscellaneous (disable_autoreload, XWayland, render ahead, NVIDIA, VRR)
    • Scrolling configuration (scroll method, fingers, edge, axis)
  • Power Settings Tab - Power management with suspend, hibernate, power button action, and idle timeout

  • Time Settings Tab - Timezone selection, clock format (12h/24h), date format, NTP sync, manual time/date

  • Keyboard Settings Tab - Layout/variant selection with preview, repeat rate/delay sliders, compose key config

  • Accounts Tab - User account management, avatar change, password change

  • Bluetooth Tab - Device scanning, pairing, connection management, device removal

  • Themes Tab (rewritten) - Complete theme management with preview thumbnails, import/export, color scheme selection

  • Desktop Tab - Desktop icon layout, show/hide icons, snap-to-grid, icon size

  • Dock Tab - M3-styled dock configuration (position, size, autohide, behavior)

  • Icons Tab - Icon theme selection with preview

  • Bing Wallpaper Tab (rewritten) - Daily wallpaper with region selection, resolution, download management

  • Monitors Tab (updated) - DRM probing, GPU detection, layout editor improvements

  • Night Light Tab - Blue light filter with schedule, temperature slider, brightness

  • UI Layout Tab (rewritten) - Panel/dock layout configuration

  • Wallpaper Tab (rewritten) - Selection with thumbnails, solid colors, gradients

  • Workspaces Tab - Workspace layout and behavior configuration

  • Notification Tab (updated) - Per-app notification blocking, do-not-disturb, popup position

  • Default Apps Tab (updated) - Application association per MIME type

  • Launcher Tab (updated) - App drawer and launcher preferences

  • Network Tab (updated) - WiFi, wired, and VPN connection management with VPN add dialog rewritten

  • Sound Tab (rewritten) - Per-app audio volume, input/output device selection, mute

  • Taskbar Tab - Taskbar behavior, grouping, pinning, appearance

  • Settings serialization rewritten with JSON-based persistence for all new tabs

  • Reactive event-driven settings application with debouncing

M3 UI Framework

  • Complete Material 3 UI component library including:
    • Core framework: Animation engine, flexbox-style layout, focus ring, glyph rendering, typography label, separator, spacer, state layer (hover/focus/pressed)
    • Controls: Banner, bottom app bar, bottom sheet, full button system (filled, tonal, outlined, text, elevated, icon), card (elevated/filled/outlined), carousel, checkbox with indeterminate state, chip (input/choice/filter/action/assist), date picker, dialog, floating action button, text input, navigation bar/drawer/rail, radio button group, search bar, dropdown select, slider (continuous/discrete/range), snackbar, tab bar (fixed/scrollable), time picker, toggle switch, top app bar
    • Design tokens: Color (primary, secondary, tertiary, error, neutral, variant surfaces), elevation levels 0-5, motion duration/easing, shape corner radius, spacing scale, typography scale (display, headline, title, body, label)
    • Builder pattern for constructing component trees
    • Dynamic color palette generation implementing material_color_utilities in C++
  • Integrated M3 theming across all settings panels (60+ tabs migrated to M3-styled rendering)
  • Added color scheme fallback palette for when theme resolution fails
  • Updated theme system with M3 color scheme integration and dynamic palette switching

App Drawer and Start Menu

  • Split the monolithic app drawer into separate app drawer and start menu components
  • App Drawer:
    • Grid layout with alphabetical sorting and category filtering
    • Overlay rendering with performance optimizations (cached icon surfaces, dirty region tracking)
    • Per-app entry rendering with icon caching, hover states, and launch handling
    • Power action execution (shutdown, restart, logout, suspend)
    • Power confirmation modal dialog
    • Usage tracing for most-frequently-used app sorting
    • Desktop entry enumeration with parsing and caching
    • Gesture zone definitions for drawer activation
    • Popup menu rendering
  • Start Menu:
    • Grouped app categories with search filtering and pinned/frequent apps
    • Activation zone definitions
  • Launchpad:
    • Complete rewrite with folder creation/management, drag-to-folder, pin-to-dock support
    • Search bar with real-time filtering
    • Folder maker icon for quick folder creation
    • Persistent folder state across sessions
    • Layer surface management with dirty-region tracking for performance
    • Real-time app search with relevance scoring
    • Fixed launchpad not persisting user-created folders between sessions
    • Fixed launchpad bad performance (throttled re-rendering, icon cache optimization)
    • Added right-click context menu for folder creation and app pinning
  • Overview:
    • Complete workspace overview with window preview thumbnails via screencopy
    • Overview rendering with animated workspace transitions
  • Window Picker - Window selection interface for task switching

Taskbar

  • Full taskbar rewrite with:
    • Window grouping by application ID with expandable group popups
    • Visual state indicators (active, urgent, minimized, focused)
    • Progress bar overlay for window progress (file transfers, downloads)
    • Drag-and-drop reordering of pinned and running applications
    • Right-click context menu (close all, minimize all, pin, unpin)
    • Animated hover and active state transitions
    • Startup notification integration (launch feedback)
    • Configurable position (top, bottom), size, and behavior
    • Mini panel mode - compact taskbar variant for vertical panels
    • Fixed icons not setting on configuration reload
    • Settings tab with grouping, pinning, and appearance options

Dock

  • Core dock implementation with persistent pinned app storage, drag-to-pin, running app indicators
  • Rewritten input handling with gesture support (swipe up for app drawer, swipe left/right for workspace switch)
  • Widget bar for rendering battery, clock, Bluetooth, media, VPN, workspaces, and weather slots
  • Hover/tooltip popup picking with directional awareness and edge cases
  • Persistent pinned application storage with serialization
  • Animated tooltip rendering with position adjustment
  • Dynamic dock positioning (horizontal/vertical, edge snapping)
  • Fixed dock exclusive zone calculation for proper window avoidance
  • Fixed desktop right-click menu activation
  • Added trash/discard drop target on dock
  • Removed monolithic dock app drawer and control center implementations (11,000+ lines deleted, refactored into shared components)

Control Center

  • M3-styled control center with quick settings toggles
  • Comprehensive popup with notifications, volume, brightness, media player, network, Bluetooth, and settings shortcuts
  • Hit testing and layout calculation with direction-aware expansion
  • Panel geometry management
  • State management for toggles, sliders, and active panels
  • Added VPN section with connection status display

Power Menu

  • Full power menu implementation with animated dialog:
    • Power actions: Shutdown, Reboot, Suspend, Hibernate, Logout, Lock Screen
    • Confirmation dialog with customizable timeout
    • Keyboard shortcut integration
    • DBus logind integration for system-level power actions
  • Modal confirmation overlay with M3 styling:
    • Action type icons and labels
    • Cancel and confirm buttons with focus management
    • Escape key to dismiss
  • Fixed power buttons now actually execute system power actions via logind
  • Fixed power menu UI input blocking issue

Lock Screen

  • Wayland session lock protocol implementation:
    • Full-surface lock screen rendering with blurred background
    • Password input field with visibility toggle
    • Date/time display
    • Media playback controls on lock screen
    • Keyboard shortcut for instant lock
  • Pointer/keyboard event routing for lock screen
  • Integrated ext-session-lock-v1 Wayland protocol

System Tray

  • Relocated tray implementation from dock into standalone module:
    • Tray host surface management
    • Tray item registration, icon updates, menu management
    • StatusNotifierItem icon rendering with attention icon support
    • XDG environment filter for tray
    • Tray item context menu rendering
    • Animated icon streaming support
  • Separated tray functionality from dock into standalone module

Keyboard

  • Keyboard layout management infrastructure:
    • Applies keyboard layout, variant, and options via libxkbcommon
    • Integrated with compositor backends through abstraction interface
    • Multi-layout support with per-window layout tracking
    • Compose key configuration
    • Typing delay and speed configuration
  • Virtual keyboard support via input method protocol

IPC Service

  • Unix domain socket IPC server:
    • Command/response protocol for external tools to interact with Event Horizon
    • Commands: workspace management, window focus, power actions, settings query/modify
    • JSON-based message format
  • Command-line IPC client utility

Night Light

  • Gamma-based blue light filter:
    • Configurable color temperature (3500K-6500K)
    • Schedule-based auto-activation (sunset to sunrise)
    • Smooth transition animation on enable/disable
    • Settings tab integration
  • Added wlr-gamma-control-unstable-v1 protocol support

Wallpaper

  • Wallpaper rendering engine with:
    • Dynamic wallpaper switching with crossfade animation
    • Solid color, gradient, and image wallpaper support
    • Bing daily wallpaper download and caching
    • Thumbnail generation and caching for fast preview
  • Configuration application with color scheme extraction from wallpaper
  • Optimized image decoding with JPEG (libjpeg-turbo), PNG, WebP support
  • Async thumbnail generation service
  • Removed legacy desktop widgets overlay (widgets now rendered in the desktop layer directly)

Vulkan/Rendering

  • Major Vulkan rendering overhaul:
    • Proper swapchain recreation on output resize
    • Image layout transition management
    • Synchronization with timeline semaphores
    • Custom Vulkan pipeline for M3 UI rendering
    • Optimal buffer allocation with dedicated GPU memory priority
    • Vulkan destruction queue with deferred resource cleanup
  • CPU-side Cairo fallback buffer for non-GPU rendering
  • Shared memory buffer pool optimization
  • Wayland surface extension protocol support

Icon Cache

  • Complete icon cache overhaul:
    • Multi-theme lookup following XDG icon theme specification
    • SVG rendering with cairo and librsvg
    • PNG/WebP direct loading
    • Lazily-populated LRU cache with configurable size limits
    • Fallback icon chain with parent theme traversal
    • Hard-coded fallback for common application icons
    • Memory-efficient surface sharing

Performance Optimizations

  • Startup Time: Reduced startup time by approximately 98% through lazy initialization, deferred DBus connections, parallel service loading, and postponed UI rendering until after first frame
  • Memory/RAM: Significant RAM reduction (~40%) via:
    • Icon cache size limits and LRU eviction
    • Shared memory pool reuse for Vulkan buffers
    • Bundled asset lazy-loading (fonts, icons, images)
    • Removing unused bundled assets
    • Efficient surface damage tracking to avoid full redraws
    • Reduced texture atlas fragmentation
  • App Drawer Performance: Cached app icon surfaces with dirty-region-only redraws, reduced layout calculations
  • Launchpad Performance: Throttled search with debouncing, lazy folder loading, cached folder previews
  • Taskbar Speed: Optimized window state diffing, reduced paint operations with clip regions
  • Toggle Instant Response: Synchronous state change with deferred visual animation
  • Media Player: Reduced album art polling frequency, cached art surfaces
  • General Optimization: Added performance benchmarking framework, optimized memory usage across all widget types, reduced string allocations, pool allocator for small objects

Crash Fixes and Stability

  • Popup Surface Crash: Fixed crash when destroying popup surfaces with active damage regions; added null-buffer commit pattern before destroy to prevent compositor from retaining a reference to the destroyed surface
  • Workspace Switch Crash: Fixed null pointer dereference in workspace backend when switching workspaces rapidly; added surface existence validation before focus operations
  • General Crashes:
    • Fixed segfault in desktop layer when toplevel is destroyed during animation
    • Fixed use-after-free in notification toast timer
    • Fixed crash on empty workspace list
    • Fixed crash in overview when window closed during rendering
    • Fixed crash in OSD when output removed
    • Fixed crash in taskbar when pinned app executable missing
    • Fixed crash in dock when foreign toplevel removed
    • Fixed crash in wallpaper renderer when image fails to decode
  • UI Fallback Colors: Fixed theme color fallback chain - now properly cascades from M3 palette to system theme to hardcoded fallback palette
  • Icon Reload: Fixed icons not updating when theme or color scheme changes at runtime
  • Polkit Typing Issue: Fixed text input handling in PolicyKit authentication dialog (key event propagation and focus)
  • Power Menu Input Block: Fixed input region calculation preventing click-through on power menu backdrop
  • VPN Connection Stability: Fixed VPN connection state tracking with proper phase transitions

Build System

  • Meson Build:
    • Integrated all new compositor backends as optional build targets
    • Added build options: embed_assets, jpeg, polkit_agent, native_march, release_omit_frame_pointer
    • Added M3 framework compilation units
    • Added DBus service source files in dedicated directories
    • Added tomlplusplus as a subproject dependency
  • New Build Options:
    • embed_assets - Embed asset files into binary (default: false)
    • jpeg - JPEG decoding support via libjpeg-turbo (default: false)
    • polkit_agent - PolicyKit authentication agent (default: false)
    • native_march - Architecture-specific optimizations (default: false)
    • release_omit_frame_pointer - Frame pointer omission in release builds (default: true)
  • PKGBUILD:
    • Version bumped from 0.2.0 to 0.6.0
    • Added dependencies: libjpeg-turbo, librsvg, libdrm, polkit
    • Updated build dependencies with new requirements
    • Added install targets for desktop files and icons

CI/CD

  • GitHub Actions:
    • Complete CI pipeline with build, test, and artifact publishing
    • Multi-distribution builds (Arch Linux via pacman, Ubuntu/Debian via apt)
    • Dependency caching for faster builds
    • Automated release artifact upload with versioned filenames
    • Added liblz4-devel dependency for both apt and pacman package managers
    • Added binutils installation step
    • Upgraded action versions for upload and download artifacts
    • Removed redundant release steps and consolidated package upload process
  • CircleCI: Added alternative CI pipeline with multi-architecture build matrix

Wayland Protocols

  • Added new protocol specifications: hyprland-focus-grab, hyprland-toplevel-mapping, wlr-gamma-control
  • Added protocol implementations: ext-foreign-toplevel-list, ext-session-lock, wlr-screencopy, wlr-gamma-control, virtual-keyboard, ext-idle-notify
  • Implemented protocol auto-detection and dynamic registration

Miscellaneous

  • Clipboard: Rewrote clipboard implementation with proper Wayland data device protocol, MIME type filtering, and offer caching
  • Notifications: Toast notification system rewritten with action buttons, urgency levels, timeout management, and position configuration
  • Audio Visualizer: PipeWire audio data reader for waveform visualization
  • Bundled Fonts: Embedding Material Symbols font and other icon fonts directly
  • Memory Monitor: Accurate memory usage reporting from system status
  • Desktop Archive: Desktop file archive and compression for backup
  • Open With Dialog: "Open with" dialog for file association management
  • RF Kill Switch: Monitoring for Bluetooth and WiFi radio state
  • Thread Pool: Reusable thread pool for asynchronous operations
  • Battery Widget: Battery status widget with icon, percentage, and charging state, integrating with UPower via D-Bus
  • Bluetooth Widget: Bluetooth status widget with device list, connection state, and toggle
  • VPN Popup: VPN connection management popup with status, connect/disconnect, and configuration
  • Weather Widget: Enhanced with animated conditions, multi-day forecast, and location detection
  • Workspace Widget: Rewritten with animated transitions, improved multi-monitor support, and touchpad gesture integration
  • Media Widget: Rewritten with album art, playback position slider, and per-app media control
  • Calendar Popup: Updated with event indicators and month navigation
  • Volume Mixer Popup: Updated with per-app audio stream control and output device selection
  • Media Player Popup: Full media player popup with playback controls
  • Settings Widget Drag: Drag-and-drop widget reordering in settings
  • Widget Picker: Desktop widget type selection dialog
  • Matugen Integration: Enhanced Material You color generation with external template support
  • Screen Recording: Screencopy PNG capture for screenshot functionality
  • Idle Inhibitor: Prevent idle/suspend during fullscreen video playback
  • File Chooser Dialog: Native file chooser dialog implementation
  • Dialog Base: Reusable dialog infrastructure for all modal dialogs
  • Debug/Diagnostics: Structured diagnostic logging, performance benchmarking framework, Wayland event loop diagnostics
  • Translations: Internationalization framework setup
image image