Releases: yashas-salankimatt/MacTile
Release list
v1.5.0 - Snappy Window Positioning
What's New
Snappy Window Positioning (AeroSpace-inspired)
MacTile now uses techniques from AeroSpace for significantly faster window tiling:
- Animation disabling: Temporarily disables
AXEnhancedUserInterfaceduring frame changes to suppress macOS window animations — windows now snap into place instantly - Size→Position→Size ordering: Uses AeroSpace's proven attribute-setting order to handle macOS AX quirks in a single pass, replacing the previous multi-step safe-zone strategy
- Zero-delay fire-and-forget: Removed all synchronous delays from the main positioning path — AX calls are issued back-to-back
- Cross-monitor moves: Still shrinks windows first (to bypass browser visibility protection), then applies the fast path on the target monitor
- Correction loop as safety net: The iterative correction loop is preserved but now only runs if the initial placement fails
Bug Fixes
- Fixed correction loop stuck detection off-by-one
- Correction loop now detects and bails when window closes mid-operation
- Consistent minimum-size acceptance logic across all code paths
- Cross-monitor shrink size uses
min()to avoid temporarily growing small windows
Cleanup
- Removed unused
setSizeWithRetry,setPositionWithRetry, andaxErrorStringdead code
MacTile v1.4.2
Per-Monitor Sketchybar Auto-Adjustment
Added
- Per-Monitor Sketchybar Auto-Adjustment: When sketchybar integration is enabled, MacTile now automatically queries sketchybar for its bar height and adjusts the overlay grid and window tiling per-monitor. Built-in displays (with notch) get minimal extra padding, while external displays get the full bar height offset — no manual inset configuration needed.
Fixed
- Overlay Grid Respects User Insets: The overlay grid now properly accounts for user-configured insets (e.g. for custom bars), so the grid visually matches the actual tiling area instead of drawing over reserved regions
- Overlay UI Label Positioning: Grid size indicator, monitor indicator, selection info, and help text are now positioned within the grid bounds, respecting all safe area insets
- Negative Inset Protection: EdgeInsets now clamps all values to non-negative, preventing invalid configurations from causing windows to tile off-screen
Improved
- Shared Sketchybar Binary Detection: Sketchybar executable path detection is now shared between the event notification system and bar info querying, eliminating duplicated code
Installation
- Download
MacTile-1.4.2.dmg - Open the DMG and drag MacTile to Applications
- On first launch, right-click → Open to bypass Gatekeeper (unsigned build)
- Grant Accessibility permissions when prompted (System Settings → Privacy & Security → Accessibility)
MacTile v1.4.1
What's Changed
Fixed
- Settings Apply Performance: Settings are now saved in a single atomic update instead of 15+ individual writes, eliminating redundant hotkey re-registration and intermediate state flicker
- Memory Leak in Preset Rows: Fixed retain cycle in tiling preset delete handler that prevented row views from being deallocated
- Event Monitor Cleanup: Recording keyboard shortcuts in preset/focus rows now properly cancels on row deletion, reset, and window close — prevents leaked NSEvent monitors
- Overlay Modifier Apply/Cancel Consistency: Overlay virtual space modifier changes now only persist when clicking Apply (previously saved immediately during recording)
- Reset Confirmation Dialogs: All per-tab reset buttons now show a confirmation dialog before reverting to defaults
- Safe Screen Access: Replaced unsafe
NSScreen.screens[0]with safe.firstaccess throughout, preventing potential crashes on headless/disconnected displays - Settings Corruption Alert: If stored settings fail to decode, the user now sees an alert instead of silently falling back to defaults
- Async Window Tiling: Window frame operations in the overlay are now dispatched off the main thread, preventing brief UI freezes during tiling
Improved
- Settings Window Layout: Removed misaligned card backgrounds from all settings tabs for a cleaner appearance
- Spaces Tab Scrolling: Spaces tab content is now in a scroll view, ensuring all settings and usage instructions are accessible
- Presets Tab Layout: Help text and buttons no longer overlap; coordinates field is wider to show full cycle position strings
- Scroll View Resizing: Settings scroll views now properly resize when the window dimensions change
Installation
- Download
MacTile-1.4.1.dmgbelow - Open the DMG and drag
MacTile.appto Applications - On first launch, macOS will block the app — go to System Settings > Privacy & Security, scroll to Security, and click Open Anyway
- Grant Accessibility permission in System Settings > Privacy & Security > Accessibility
MacTile v1.4.0
Added
- Virtual Spaces mode toggle in Settings to choose shared across monitors vs per-monitor spaces.
Changed
- Workspace management panel trigger changed from
Enterto pressing the overlay shortcut twice. - In shared mode, clear and rename now apply consistently across all monitor entries in the selected space number.
Fixed
- Multi-monitor virtual space save/restore now correctly handles connected monitor sets.
- Restoring with fewer connected monitors now restores only connected layouts while preserving disconnected monitor layouts.
- Shared mode active-space tracking now updates all restored/saved monitor entries.
MacTile v1.3.0
What's New
Virtual Workspace Management Overlay
View and manage your saved virtual workspace contents directly from the overlay:
- Press Enter without modifying the grid selection to open the management panel
- Browse all non-empty workspaces with their saved windows listed per workspace
- Navigate with arrow keys or vim bindings (J/K) between workspaces and individual windows
- Remove individual windows from a workspace with Backspace/Delete or X
- Native macOS blur panel with floating HUD appearance
Redesigned Settings Window
- Modern dark vibrancy sidebar navigation replaces the previous tab-based layout
- SF Symbols icons for each settings section
- Transparent titlebar with animated sidebar highlight transitions
Bug Fixes
- Fixed potential event monitor leaks for clear modifier and overlay save/clear modifier monitors
Installation
- Download
MacTile-1.3.0.dmg - Open the DMG and drag MacTile to Applications
- Launch MacTile and grant Accessibility permissions
Full Changelog: v1.2.0...v1.3.0
MacTile 1.2.0 - Sketchybar Integration
What's New
Sketchybar Integration
Display virtual space indicators in your menu bar with automatic setup:
- Deploys plugin scripts, helpers, and fonts when enabled
- Triggers
mactile_space_changeevent for each space action - Bundled resources:
mactile.sh,mactile_click.sh,mactile_space_name.sh,icon_map.sh - Automatically installs
sketchybar-app-font.ttffor app icon ligatures - IPC support via distributed notifications for restore/clear from sketchybar
Configurable Overlay Modifiers
Separate modifier keys for save/clear in the overlay:
- Save modifier (default: Shift) - hold while pressing number to save
- Clear modifier (default: Control) - hold while pressing number to clear
- Configurable in Settings → Virtual Spaces
Improvements
- Properly stops sketchybar when integration is disabled (instead of restarting)
- Space clear events now pass complete space information to sketchybar
Installation
- Download
MacTile-1.2.0.dmgbelow - Open the DMG and drag MacTile to Applications
- Open MacTile and grant Accessibility permissions when prompted
- To enable sketchybar integration, go to Settings → Virtual Spaces
See the Sketchybar Integration Guide for setup details.
MacTile 1.1.2
Fixed
-
Reliable Window Matching for Multi-Window Apps: Fixed virtual space restore failing for apps like Zen browser with multiple windows
- Now uses private
_AXUIElementGetWindowAPI for direct window ID matching - Falls back to frame-based heuristics when private API unavailable
- Eliminates ambiguity when multiple windows have similar frames
- Now uses private
-
Focus Restoration from Overlay: Fixed focus not returning correctly after save/restore
- Save: Returns focus to the window that triggered the overlay
- Restore: Returns focus to a window in the restored virtual space
- Properly handles overlay dismissal timing to prevent focus race conditions
Improved
- Window Matching Strategy: More robust multi-strategy approach
- Direct window ID via private API (most reliable)
- AXWindowNumber attributes (when exposed by apps)
- Frame-based matching with tolerance (fallback)
- Only matches when confident; returns nil for safety when ambiguous
Full Changelog: v1.1.1...v1.1.2
MacTile 1.1.1
What's New
Added
-
Virtual Space Overlay Triggers: Save and restore virtual spaces directly from the overlay
- Number keys (0-9) restore virtual spaces
- Shift+number saves current windows to a virtual space
- Auto-closes overlay after save/restore
-
Auto-Activate Matching Layouts: Virtual spaces automatically activate when window layout matches
- Detects when you return to a saved window arrangement
- Updates menu bar indicator without manual trigger
Fixed
- Focus Presets for Always-Running Apps: Fixed Finder and other system apps not opening new windows when "Open if not running" is enabled
- Virtual Space Window Restoration: Fixed full-screen windows requiring two triggers to restore
- Virtual Space Rename: Fixed rename not persisting in release builds
- Layout Detection Timing: Fixed layout matching requiring extra alt-tab to activate
Installation
- Download
MacTile-1.1.1.dmg - Open the DMG file
- Drag MacTile.app to the Applications folder
- Open MacTile from Applications
- Grant Accessibility permissions when prompted (System Settings → Privacy & Security → Accessibility)
MacTile 1.1.0
What's New
Virtual Spaces
Save and restore window arrangements per monitor:
- 10 virtual spaces (0-9) per monitor for organizing different workflows
- Save current window positions with customizable modifier keys + number
- Restore windows to saved positions with correct z-order (stacking)
- Rename spaces for easy identification (shown in menu bar)
- Only saves windows that are at least 40% visible (filters hidden windows)
- Persistent storage - spaces survive app restarts
Virtual Spaces Settings Tab
Full configuration in Settings > Spaces:
- Enable/disable virtual spaces feature
- Customizable save modifiers (default: Control+Option+Shift)
- Customizable restore modifiers (default: Control+Option)
- Record new modifiers by pressing modifier keys + Space
Default Tiling Presets
Quick window tiling without configuration:
R- Right side (cycles: half → third → quarter)E- Left side (cycles: half → third → quarter)F- Full screenC- Center (cycles: third → half)- All presets auto-confirm and have no modifiers (work in overlay)
Per-Tab Reset Buttons
Reset individual settings tabs to defaults:
- Each tab (General, Shortcuts, Appearance, Presets, Focus, Spaces) has its own reset button
- Replaces the global reset button for more granular control
Bug Fixes
- Cancel Button Now Discards Changes: Settings window properly reloads saved values when reopened after canceling
- Event Monitor Cleanup: Recording keyboard shortcuts no longer leaks event monitors when the settings window is closed
- Virtual Spaces Disable: Disabling virtual spaces now fully stops all background monitoring
Installation
- Download
MacTile-1.1.0.dmg - Open the DMG file
- Drag MacTile.app to the Applications folder
- Open MacTile from Applications
- Grant Accessibility permissions when prompted (System Settings → Privacy & Security → Accessibility)
MacTile v1.0.5
Bug Fix
- Finder Window Cycling: Fixed focus preset not cycling through Finder windows
- Finder's Desktop was being included in the window list, preventing proper cycling
- Now filters to only include windows with a close button, excluding the Desktop
- This fix also benefits other apps that may have similar non-standard windows
Installation
- Download
MacTile-1.0.5.dmgbelow - Open the DMG and drag MacTile to Applications
- Open MacTile and grant Accessibility permissions when prompted
See CHANGELOG.md for full details.