{"id":28394785,"url":"https://github.com/plyght/skew","last_synced_at":"2026-04-25T21:31:06.392Z","repository":{"id":295474288,"uuid":"990203291","full_name":"plyght/skew","owner":"plyght","description":"a tiling window manager for macOS, written in Rust","archived":false,"fork":false,"pushed_at":"2025-07-24T19:19:51.000Z","size":295925,"stargazers_count":18,"open_issues_count":1,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-07-24T23:54:02.527Z","etag":null,"topics":["mac","macos","rust","sway","tiling-window-manager","window-manager","wm","yabai"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/plyght.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-05-25T17:54:19.000Z","updated_at":"2025-07-18T13:21:59.000Z","dependencies_parsed_at":"2025-06-27T00:38:27.125Z","dependency_job_id":"5c7116a9-6c23-494b-8794-68c54e004011","html_url":"https://github.com/plyght/skew","commit_stats":null,"previous_names":["plyght/skew"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/plyght/skew","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plyght%2Fskew","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plyght%2Fskew/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plyght%2Fskew/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plyght%2Fskew/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/plyght","download_url":"https://codeload.github.com/plyght/skew/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plyght%2Fskew/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32278249,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-25T18:29:39.964Z","status":"ssl_error","status_checked_at":"2026-04-25T18:29:32.149Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["mac","macos","rust","sway","tiling-window-manager","window-manager","wm","yabai"],"created_at":"2025-05-31T19:00:20.658Z","updated_at":"2026-04-25T21:31:06.374Z","avatar_url":"https://github.com/plyght.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Skew\n\nA tiling window manager for macOS written in Rust, inspired by [sway](https://swaywm.org/) and [yabai](https://github.com/koekeishiya/yabai).\n\n## Features\n\n- **Advanced Tiling Layouts**: 7 layout algorithms (BSP, Stack, Grid, Spiral, Column, Monocle, Float)\n- **Smart Focus Management**: Directional navigation, focus-follows-mouse, intelligent window filtering\n- **Real macOS Integration**: Native Accessibility API bindings for window control and monitoring\n- **Global Hotkeys**: System-wide keyboard shortcuts with customizable key bindings\n- **Multi-Display Support**: Automatic display detection and per-monitor layout management\n- **IPC Communication**: Full CLI-daemon communication for seamless control\n- **Robust Configuration**: TOML, JSON, and YAML support with comprehensive validation\n- **Plugin System**: Extensible with Lua scripting support\n- **CLI Interface**: Complete command-line tools for control and automation\n- **Production Ready**: Comprehensive error handling, logging, and clean architecture\n\n## Project Structure\n\n```\nskew/\n├── Cargo.toml              # Project configuration and dependencies\n├── src/\n│   ├── main.rs             # Main CLI entry point\n│   ├── lib.rs              # Library exports and common types\n│   ├── daemon.rs           # Background daemon service\n│   ├── config.rs           # Configuration loading and management\n│   ├── window_manager.rs   # Core window management logic\n│   ├── layout.rs           # Window layout algorithms\n│   ├── focus.rs            # Window focus management\n│   ├── hotkeys.rs          # Keyboard shortcut handling\n│   ├── ipc.rs              # Inter-process communication\n│   ├── plugins.rs          # Plugin system and Lua integration\n│   ├── bin/                # Additional binary targets\n│   └── macos/              # macOS-specific implementations\n│       ├── mod.rs\n│       ├── accessibility.rs # Accessibility API bindings\n│       ├── cgwindow.rs     # Core Graphics window operations\n│       └── window_system.rs # Window system abstractions\n└── target/                 # Build artifacts\n```\n\n## Installation\n\n### Prerequisites\n\n- **Rust**: Install from [rustup.rs](https://rustup.rs/)\n- **macOS**: Requires macOS 10.12+ with Accessibility API support\n- **Permissions**: **Critical** - Accessibility permissions must be granted for window management\n\n### Granting Accessibility Permissions\n\n1. Open **System Preferences** → **Security \u0026 Privacy** → **Privacy** → **Accessibility**\n2. Click the lock icon and enter your password\n3. Add the Skew binary to the list and enable it\n4. Restart Skew after granting permissions\n\nWithout accessibility permissions, Skew will run in limited mode with reduced functionality.\n\n### Build from Source\n\n```bash\n# Clone the repository\ngit clone https://github.com/plyght/skew.git\ncd skew\n\n# Build the project\ncargo build --release\n\n# Install binaries\ncargo install --path .\n```\n\n## Usage\n\n### Starting Skew\n\n```bash\n# Start with default configuration\nskew start\n\n# Start with custom config file\nskew --config ~/.config/skew/custom.toml start\n```\n\n### Managing the Service\n\n```bash\n# Check status\nskew status\n\n# Reload configuration\nskew reload\n\n# Stop the service\nskew stop\n```\n\n### Configuration\n\nDefault configuration location: `~/.config/skew/config.toml`\n\nExample configuration:\n\n```toml\n[general]\ngap = 10.0\nborder_width = 2.0\nborder_color = \"#cccccc\"\nactive_border_color = \"#0080ff\"\n\n[layout]\ndefault_layout = \"bsp\"  # bsp, stack, grid, spiral, column, monocle, float\nsplit_ratio = 0.6\n\n[focus]\nfollows_mouse = true\nmouse_delay_ms = 100\n\n[hotkeys]\nmod_key = \"alt\"\n\n[hotkeys.bindings]\n\"alt+h\" = \"focus_left\"\n\"alt+j\" = \"focus_down\"\n\"alt+k\" = \"focus_up\"\n\"alt+l\" = \"focus_right\"\n\"alt+shift+h\" = \"move_left\"\n\"alt+shift+j\" = \"move_down\"\n\"alt+shift+k\" = \"move_up\"\n\"alt+shift+l\" = \"move_right\"\n\"ctrl+alt+space\" = \"toggle_layout\"\n\"alt+return\" = \"exec:terminal\"\n\"alt+w\" = \"close_window\"\n\n[ipc]\nsocket_path = \"/tmp/skew.sock\"\n\n[plugins]\nenabled = []\nplugin_dir = \"~/.config/skew/plugins\"\n```\n\n## Layout Algorithms\n\nSkew supports 7 different tiling algorithms:\n\n- **BSP (Binary Space Partitioning)**: Recursively splits screen space in half\n- **Stack**: Master window on left, others stacked vertically on right\n- **Grid**: Arranges windows in a grid pattern\n- **Spiral**: First window takes main area, others spiral around it\n- **Column**: All windows arranged in equal-width columns\n- **Monocle**: Full-screen mode for focused window\n- **Float**: Traditional floating window mode\n\nSwitch between layouts with `Ctrl+Alt+Space` or via IPC commands.\n\n## Default Hotkeys\n\n| Hotkey | Action |\n|--------|--------|\n| `Alt+H/J/K/L` | Focus window left/down/up/right |\n| `Alt+Shift+H/J/K/L` | Move window left/down/up/right |\n| `Ctrl+Alt+Space` | Toggle between layouts |\n| `Alt+Enter` | Launch terminal |\n| `Alt+W` | Close focused window |\n| `Alt+Shift+Space` | Swap with main window |\n| `Alt+Shift+R` | Restart/reload configuration |\n\nAll hotkeys are fully customizable in the configuration file.\n\n## Development\n\n### Building\n\n```bash\n# Debug build\ncargo build\n\n# Release build\ncargo build --release\n\n# Run tests\ncargo test\n\n# Check code formatting\ncargo fmt --check\n\n# Run clippy lints\ncargo clippy\n```\n\n### Features\n\n- `default`: Includes scripting support\n- `scripting`: Lua plugin system (requires `mlua`)\n\n```bash\n# Build without scripting support\ncargo build --no-default-features\n```\n\n## Architecture\n\n### Components\n\n- **Main CLI** (`main.rs`): Command-line interface and entry point\n- **Daemon** (`daemon.rs`): Background service for window management\n- **Window Manager** (`window_manager.rs`): Core logic for window operations\n- **Layout Engine** (`layout.rs`): Algorithms for window arrangement\n- **Plugin System** (`plugins.rs`): Lua scripting integration\n- **IPC** (`ipc.rs`): Communication between CLI and daemon\n- **macOS Integration** (`macos/`): Platform-specific window system bindings\n\n### Binaries\n\n- `skew`: Main CLI interface\n- `skewd`: Background daemon service\n- `skew-cli`: Additional command-line utilities\n\n## Contributing\n\n1. Fork the repository\n2. Create a feature branch\n3. Make your changes\n4. Add tests if applicable\n5. Run `cargo test` and `cargo clippy`\n6. Submit a pull request\n\n## Acknowledgments\n\nSkew is inspired by and builds upon ideas from:\n\n- **[sway](https://swaywm.org/)**: A Wayland compositor and i3-compatible window manager for Linux\n- **[yabai](https://github.com/koekeishiya/yabai)**: A tiling window manager for macOS based on binary space partitioning\n- **[i3wm](https://i3wm.org/)**: The foundational tiling window manager that influenced many others\n\nSpecial thanks to the maintainers and contributors of these projects for pioneering tiling window management.\n\n## License\n\nMIT License - see LICENSE file for details.\n\n## Roadmap\n\n### ✅ **Completed Features**\n- [x] Complete Accessibility API integration\n- [x] Implement hot-key handling with rdev\n- [x] Add IPC communication between CLI and daemon\n- [x] Develop comprehensive layout algorithms (7 layouts)\n- [x] Add configuration validation\n- [x] Implement window focus management\n- [x] Add support for multiple displays\n- [x] Implement proper directional focus with current window\n- [x] Implement proper window movement\n- [x] Get current focused window functionality\n- [x] Implement application launching\n- [x] Send stop/reload/status commands via IPC\n\n### 🚧 **In Progress / Future Features**\n- [ ] Enhanced global hotkey system (currently in simulation mode)\n- [ ] Create plugin API documentation\n- [ ] Add comprehensive test coverage\n- [ ] Create installation scripts and homebrew formula\n- [ ] Add window animations and smooth transitions\n- [ ] Implement workspace/virtual desktop support\n- [ ] Add window rules and application-specific configurations\n- [ ] Create GUI configuration tool\n- [ ] Add integration with popular macOS apps (Finder, Dock)\n- [ ] Implement custom layout scripting\n- [ ] Add performance monitoring and metrics\n- [ ] Create comprehensive user documentation\n- [ ] Add support for window shadows and visual effects\n- [ ] Implement advanced gesture support\n- [ ] Add backup and restore for configurations","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fplyght%2Fskew","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fplyght%2Fskew","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fplyght%2Fskew/lists"}