A tiling window manager for macOS written in Rust, inspired by sway and yabai.
- Advanced Tiling Layouts: 7 layout algorithms (BSP, Stack, Grid, Spiral, Column, Monocle, Float)
- Smart Focus Management: Directional navigation, focus-follows-mouse, intelligent window filtering
- Real macOS Integration: Native Accessibility API bindings for window control and monitoring
- Global Hotkeys: System-wide keyboard shortcuts with customizable key bindings
- Multi-Display Support: Automatic display detection and per-monitor layout management
- IPC Communication: Full CLI-daemon communication for seamless control
- Robust Configuration: TOML, JSON, and YAML support with comprehensive validation
- Plugin System: Extensible with Lua scripting support
- CLI Interface: Complete command-line tools for control and automation
- Production Ready: Comprehensive error handling, logging, and clean architecture
skew/
├── Cargo.toml              # Project configuration and dependencies
├── src/
│   ├── main.rs             # Main CLI entry point
│   ├── lib.rs              # Library exports and common types
│   ├── daemon.rs           # Background daemon service
│   ├── config.rs           # Configuration loading and management
│   ├── window_manager.rs   # Core window management logic
│   ├── layout.rs           # Window layout algorithms
│   ├── focus.rs            # Window focus management
│   ├── hotkeys.rs          # Keyboard shortcut handling
│   ├── ipc.rs              # Inter-process communication
│   ├── plugins.rs          # Plugin system and Lua integration
│   ├── bin/                # Additional binary targets
│   └── macos/              # macOS-specific implementations
│       ├── mod.rs
│       ├── accessibility.rs # Accessibility API bindings
│       ├── cgwindow.rs     # Core Graphics window operations
│       └── window_system.rs # Window system abstractions
└── target/                 # Build artifacts
- Rust: Install from rustup.rs
- macOS: Requires macOS 10.12+ with Accessibility API support
- Permissions: Critical - Accessibility permissions must be granted for window management
- Open System Preferences → Security & Privacy → Privacy → Accessibility
- Click the lock icon and enter your password
- Add the Skew binary to the list and enable it
- Restart Skew after granting permissions
Without accessibility permissions, Skew will run in limited mode with reduced functionality.
# Clone the repository
git clone https://github.com/plyght/skew.git
cd skew
# Build the project
cargo build --release
# Install binaries
cargo install --path .# Start with default configuration
skew start
# Start with custom config file
skew --config ~/.config/skew/custom.toml start# Check status
skew status
# Reload configuration
skew reload
# Stop the service
skew stopDefault configuration location: ~/.config/skew/config.toml
Example configuration:
[general]
gap = 10.0
border_width = 2.0
border_color = "#cccccc"
active_border_color = "#0080ff"
[layout]
default_layout = "bsp"  # bsp, stack, grid, spiral, column, monocle, float
split_ratio = 0.6
[focus]
follows_mouse = true
mouse_delay_ms = 100
[hotkeys]
mod_key = "alt"
[hotkeys.bindings]
"alt+h" = "focus_left"
"alt+j" = "focus_down"
"alt+k" = "focus_up"
"alt+l" = "focus_right"
"alt+shift+h" = "move_left"
"alt+shift+j" = "move_down"
"alt+shift+k" = "move_up"
"alt+shift+l" = "move_right"
"ctrl+alt+space" = "toggle_layout"
"alt+return" = "exec:terminal"
"alt+w" = "close_window"
[ipc]
socket_path = "/tmp/skew.sock"
[plugins]
enabled = []
plugin_dir = "~/.config/skew/plugins"Skew supports 7 different tiling algorithms:
- BSP (Binary Space Partitioning): Recursively splits screen space in half
- Stack: Master window on left, others stacked vertically on right
- Grid: Arranges windows in a grid pattern
- Spiral: First window takes main area, others spiral around it
- Column: All windows arranged in equal-width columns
- Monocle: Full-screen mode for focused window
- Float: Traditional floating window mode
Switch between layouts with Ctrl+Alt+Space or via IPC commands.
| Hotkey | Action | 
|---|---|
| Alt+H/J/K/L | Focus window left/down/up/right | 
| Alt+Shift+H/J/K/L | Move window left/down/up/right | 
| Ctrl+Alt+Space | Toggle between layouts | 
| Alt+Enter | Launch terminal | 
| Alt+W | Close focused window | 
| Alt+Shift+Space | Swap with main window | 
| Alt+Shift+R | Restart/reload configuration | 
All hotkeys are fully customizable in the configuration file.
# Debug build
cargo build
# Release build
cargo build --release
# Run tests
cargo test
# Check code formatting
cargo fmt --check
# Run clippy lints
cargo clippy- default: Includes scripting support
- scripting: Lua plugin system (requires- mlua)
# Build without scripting support
cargo build --no-default-features- Main CLI (main.rs): Command-line interface and entry point
- Daemon (daemon.rs): Background service for window management
- Window Manager (window_manager.rs): Core logic for window operations
- Layout Engine (layout.rs): Algorithms for window arrangement
- Plugin System (plugins.rs): Lua scripting integration
- IPC (ipc.rs): Communication between CLI and daemon
- macOS Integration (macos/): Platform-specific window system bindings
- skew: Main CLI interface
- skewd: Background daemon service
- skew-cli: Additional command-line utilities
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Run cargo testandcargo clippy
- Submit a pull request
Skew is inspired by and builds upon ideas from:
- sway: A Wayland compositor and i3-compatible window manager for Linux
- yabai: A tiling window manager for macOS based on binary space partitioning
- i3wm: The foundational tiling window manager that influenced many others
Special thanks to the maintainers and contributors of these projects for pioneering tiling window management.
MIT License - see LICENSE file for details.
- Complete Accessibility API integration
- Implement hot-key handling with rdev
- Add IPC communication between CLI and daemon
- Develop comprehensive layout algorithms (7 layouts)
- Add configuration validation
- Implement window focus management
- Add support for multiple displays
- Implement proper directional focus with current window
- Implement proper window movement
- Get current focused window functionality
- Implement application launching
- Send stop/reload/status commands via IPC
- Enhanced global hotkey system (currently in simulation mode)
- Create plugin API documentation
- Add comprehensive test coverage
- Create installation scripts and homebrew formula
- Add window animations and smooth transitions
- Implement workspace/virtual desktop support
- Add window rules and application-specific configurations
- Create GUI configuration tool
- Add integration with popular macOS apps (Finder, Dock)
- Implement custom layout scripting
- Add performance monitoring and metrics
- Create comprehensive user documentation
- Add support for window shadows and visual effects
- Implement advanced gesture support
- Add backup and restore for configurations