[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-75694":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":9,"totalLinesOfCode":9,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":9,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":9,"rankLanguage":9,"license":9,"archived":22,"fork":22,"defaultBranch":23,"hasWiki":22,"hasPages":22,"topics":9,"createdAt":9,"pushedAt":9,"updatedAt":24,"readmeContent":25,"aiSummary":26,"trendingCount":16,"starSnapshotCount":16,"syncStatus":27,"lastSyncTime":28,"discoverSource":29},75694,"paneru","karinushka\u002Fpaneru","karinushka","A sliding, tiling window manager for MacOS.",null,"https:\u002F\u002Fgithub.com\u002Fkarinushka\u002Fpaneru","Rust",1652,72,10,36,0,11,39,145,33,100.09,false,"main","2026-06-12 04:01:18","\u003Cdiv align=\"center\">\n  \u003Cimg src=\".\u002Fimages\u002Fpaneru.png\" alt=\"Paneru\" width=\"600\"\u002F>\n\u003C\u002Fdiv>\n\n##\nA sliding, tiling window manager for MacOS.\n\n## About\n\nPaneru is a MacOS window manager that arranges windows on an infinite strip,\nextending to the right. A core principle is that opening a new window will\n**never** cause existing windows to resize, maintaining your layout stability.\n\nEach monitor operates with its own independent window strip, ensuring that\nwindows remain confined to their respective displays and do not \"overflow\" onto\nadjacent monitors.\n\n\u003Cvideo src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Fcbc2e820-635f-408b-923a-6cb47c44704c\">\u003C\u002Fvideo>\n\n## Why Paneru?\n\n- **Niri-like Behavior on MacOS:** Inspired by the user experience of [Niri],\n  Paneru aims to bring a similar scrollable tiling workflow to MacOS.\n- **Works with MacOS workspaces:** You can use existing workspaces and switch\n  between them with keyboard or touchpad gestures - with a separate window strip\n  on each. Drag and dropping windows between them works as well.\n- **Virtual Workspaces (Experimental):** Group your windows into tasks by\n  stacking multiple horizontal strips (rows) within a single space. Use native\n  macOS workspaces for broad segregation (e.g., 'Work', 'Personal') and virtual\n  workspaces to stay organized within each context.\n- **Menu bar workspace indicator:** Shows the currently active virtual\n  workspace in the macOS menu bar.\n- **Focus follows mouse on MacOS:** Very useful for people who would like to\n  avoid an extra click.\n- **Sliding windows with touchpad:** Using a touchpad is quite natural for\n  navigation of the window pane.\n- **Native macOS tabs support:** Applications like Ghostty use these, so\n  Paneru manages them on the layout strip like other windows.\n- **Optimal for Large Displays:** Standard tiling window managers can be\n  suboptimal for large displays, often resulting in either huge maximized\n  windows or numerous tiny, unusable windows. Paneru addresses this by\n  providing a more flexible and practical arrangement.\n- **Improved Small Display Usability:** On smaller displays (like laptops),\n  traditional tiling can make windows too small to be productive, forcing users\n  to constantly maximize. Paneru's sliding strip approach aims to provide a\n  better experience without this compromise.\n\n## Inspiration\n\nThe fundamental architecture and window management techniques are heavily\ninspired by [Yabai], another excellent MacOS window manager. Studying its\nsource code has provided invaluable insights into managing windows on MacOS,\nparticularly regarding undocumented functions.\n\nThe innovative concept of managing windows on a sliding strip is directly\ninspired by [Niri] and [PaperWM.spoon].\n\n## Installation\n\n### Recommended System Options\n\n- Like all non-native window managers for MacOS, Paneru requires accessibility\n  access to move windows. Once it runs you may get a dialog window asking for\n  permissions. Otherwise check the setting in System Settings under \"Privacy &\n  Security -> Accessibility\".\n\n- Check your System Settings for \"Displays have separate spaces\" option. It\n  should be enabled - this allows Paneru to manage the workspaces independently.\n\n- **Multiple displays**. Paneru is moving the windows off-screen, hiding them\n  to the left or right. If you have multiple displays, for example your laptop\n  open when docked to an external monitor you may experience weird behavior.\n  The issue is that when MacOS notices a window being moved too far off-screen\n  it will relocate it to a different display - which confuses Paneru! The\n  solution is to change the spatial arrangement of your additional display -\n  instead of having it to the left or right, move it above or below your main\n  display.\n  A [similar situation](https:\u002F\u002Fnikitabobko.github.io\u002FAeroSpace\u002Fguide#proper-monitor-arrangement)\n  exists with Aerospace window manager.\n  An option exists (`horizontal_mouse_warp`) which can make a vertical\n  arrangement of displays \"feel\" horizontal.\n\n- **Off-screen window slivers**. Because macOS will forcibly relocate windows\n  that are moved fully off-screen, Paneru keeps a thin sliver of each\n  off-screen window visible at the screen edge. The `sliver_width` and\n  `sliver_height` options control the size of this sliver. This is a\n  workaround for a macOS limitation, not a design choice.\n\n### Installing from Crates.io\n\nPaneru is built using Rust's `cargo`. It can be installed directly from\n`crates.io` or if you need the latest version, by fetching the source from Github.\n\n```shell\n$ cargo install paneru\n```\n\n### Installing from Github\n\n```shell\n$ git clone https:\u002F\u002Fgithub.com\u002Fkarinushka\u002Fpaneru.git\n$ cd paneru\n$ cargo build --release\n$ cargo install --path .\n```\n\nIt can run directly from the command line or as a service.\nNote that you will need to grant accessibility privileges to the binary.\n\n### Installing with Homebrew\n\nIf you are using Homebrew, you can install from the formula with:\n\n```shell\n$ brew install paneru\n```\n\nOr by first adding the tap and then installing by name:\n\n```shell\n$ brew tap karinushka\u002Fpaneru\n$ brew install paneru\n```\n\n### Installing with Nix\n\nSee [`nix\u002FREADME.md`](\u002Fnix\u002FREADME.md).\n\n### Configuration\n\nPaneru checks for configuration in following locations:\n\n- `$HOME\u002F.paneru`\n- `$HOME\u002F.paneru.toml`\n- `$XDG_CONFIG_HOME\u002Fpaneru\u002Fpaneru.toml`\n\nAdditionally it allows overriding the location with `$PANERU_CONFIG` environment variable.\n\nYou can use the following basic configuration as a starting point. For a\ncomplete guide to all available options, keybindings, and window rules, see the\n**[Configuration Guide](.\u002FCONFIGURATION.md)**.\n\n```toml\n# basic .paneru.toml\n[options]\nfocus_follows_mouse = true\nmouse_follows_focus = true\n\n[bindings]\nwindow_focus_west = \"cmd - h\"\nwindow_focus_east = \"cmd - l\"\nwindow_resize = \"alt - r\"\nwindow_center = \"alt - c\"\nquit = \"ctrl + alt - q\"\n```\n\n### Live reloading\n\nConfiguration changes made to your `~\u002F.paneru` file are automatically reloaded\nwhile Paneru is running. This is useful for tweaking keyboard bindings and\nother settings without restarting the application.\n\n### Running as a service\n\n```shell\n$ paneru install\n$ paneru start\n```\n\n### Running in the foreground\n\n```shell\n$ paneru\n```\n\n### Sending Commands\n\nPaneru exposes a `send-cmd` subcommand that lets you control the running\ninstance from the command line via a Unix socket (`\u002Ftmp\u002Fpaneru.socket`). Any\ncommand that can be bound to a hotkey can also be sent programmatically:\n\n```shell\n$ paneru send-cmd \u003Ccommand> [args...]\n```\n\n#### Available commands\n\n| Command                    | Description                                      |\n| -------------------------- | ------------------------------------------------ |\n| `window focus \u003Cdirection>` | Move focus to a window in the given direction    |\n| `window swap \u003Cdirection>`  | Swap the focused window with a neighbour         |\n| `window center`            | Center the focused window on screen              |\n| `window resize`            | Cycle through `preset_column_widths`             |\n| `window grow`              | Grow to the next preset width                    |\n| `window shrink`            | Shrink to the previous preset width              |\n| `window fullwidth`         | Toggle full-width mode for the focused window    |\n| `window manage`            | Toggle managed\u002Ffloating state                    |\n| `window equalize`          | Distribute equal heights in the focused stack    |\n| `window stack`             | Stack the focused window onto its left neighbour |\n| `window unstack`           | Unstack the focused window into its own column   |\n| `window nextdisplay`       | Move the focused window to the next display      |\n| `window nextdisplaysend`   | Move the window to the next display but stay here |\n| `window virtual \u003Cdir>`     | Switch to the previous\u002Fnext virtual workspace     |\n| `window virtualnum \u003Cn>`    | Switch directly to numbered virtual workspace    |\n| `window virtualmove \u003Cdir>` | Move the window to a different virtual workspace  |\n| `window virtualmovenum \u003Cn>` | Move the window to numbered virtual workspace and follow it |\n| `window virtualsend \u003Cdir>` | Send the window to a virtual workspace but stay  |\n| `window virtualsendnum \u003Cn>` | Send the window to numbered virtual workspace but stay |\n| `window snap`              | Snap the focused window into the visible viewport |\n| `mouse nextdisplay`        | Warp the mouse pointer to the next display       |\n| `printstate`               | Print the internal ECS state to the debug log    |\n| `quit`                     | Quit Paneru                                      |\n\nWhere `\u003Cdirection>` is one of: `west`, `east`, `north`, `south`, `first`, `last`.\n\n#### Examples\n\n```shell\n# Move focus one window to the right.\n$ paneru send-cmd window focus east\n\n# Swap the current window to the left.\n$ paneru send-cmd window swap west\n\n# Center and resize in one shot (two separate calls).\n$ paneru send-cmd window center && paneru send-cmd window resize\n\n# Cycle backward through preset widths.\n$ paneru send-cmd window shrink\n\n# Jump to the left-most window.\n$ paneru send-cmd window focus first\n\n# Switch directly to virtual workspace 3.\n$ paneru send-cmd window virtualnum 3\n\n# Send the focused window to virtual workspace 3 without following it.\n$ paneru send-cmd window virtualsendnum 3\n```\n\n### Querying and Subscribing to State\n\nPaneru also exposes structured JSON state for scripts and status bars:\n\n```shell\n$ paneru query state --json\n$ paneru query virtual-workspaces --json\n$ paneru query active --json\n$ paneru subscribe --json\n```\n\n`query` prints a JSON snapshot and exits. `subscribe --json` keeps the socket\nopen and emits line-delimited JSON events for changes that integrations usually\ncare about, including focus changes, virtual workspace changes, window-list\nchanges, title changes, and display changes. See\n[`QUERY_AND_SUBSCRIBE_FORMAT.md`](.\u002FQUERY_AND_SUBSCRIBE_FORMAT.md) for the\nfull payload contract.\n\n#### Scripting ideas\n\nBecause `send-cmd` works over a Unix socket, you can drive Paneru from shell\nscripts, `cron` jobs, or other automation tools:\n\n- **Launch-and-arrange workflow.** Open an application and immediately position\n  it: `open -a Safari && sleep 0.5 && paneru send-cmd window resize`.\n- **One-key layout reset.** Bind a script that focuses the first window, resizes\n  it, then moves east and resizes the next one — recreating a preferred layout\n  after windows get shuffled.\n- **Integration with other tools.** Pipe focus events from tools like\n  [Hammerspoon](https:\u002F\u002Fwww.hammerspoon.org) or\n  [skhd](https:\u002F\u002Fgithub.com\u002Fkoekeishiya\u002Fskhd) into `paneru send-cmd` for\n  compound actions that go beyond a single hotkey.\n- **Multi-display orchestration.** Move a window to the next display and\n  immediately warp the mouse there:\n  ```shell\n  paneru send-cmd window nextdisplay && paneru send-cmd mouse nextdisplay\n  ```\n- **Status bar integration.** Use `paneru query state --json` to render the\n  initial workspace labels, then keep them current with `paneru subscribe --json`.\n\n\n## Future Enhancements\n\n- More commands for manipulating windows: finegrained size adjustments, touchpad resizing, etc.\n- Scriptability. For example using Lua for configuration or automation of window handling,\n  like triggering and positioning specific windows or applications.\n\n## Communication\n\nThere is a public Matrix room\n[`#paneru:matrix.org`](https:\u002F\u002Fmatrix.to\u002F#\u002F%23paneru%3Amatrix.org). Join and\nask any questions.\n\n## Architecture Overview\n\nFor a detailed high-level overview of Paneru's internal design, data flow, and\nECS patterns, please refer to the **[Architecture Guide](.\u002FARCHITECTURE.md)**.\n\nPaneru's architecture is built around the **Bevy ECS (Entity Component\nSystem)**, which manages the window manager's state as a collection of entities\n(displays, workspaces, applications, and windows) and components.\n\nThe system is decoupled into three primary layers:\n\n1.  **Platform Layer (`src\u002Fplatform\u002F`)**: Directly interfaces with macOS via `objc2` and Core Graphics. It runs the native Cocoa event loop and pumps OS events into a channel consumed by Bevy.\n2.  **Management Layer (`src\u002Fmanager\u002F`)**: Defines OS-agnostic traits (`WindowManagerApi`, `WindowApi`) that abstract window manipulation. The macOS-specific implementations (`WindowManagerOS`, `WindowOS`) bridge these traits to the Accessibility and SkyLight APIs.\n3.  **ECS Layer (`src\u002Fecs\u002F`)**: The \"brain\" of the application. Bevy systems process incoming events, handle input triggers, and manage animations.\n\n### Repository Structure\n\n- **`main` branch**: Contains the stable, released code.\n- **`testing` branch**: Used for experimental features and architectural refactors. This branch is volatile and may be force-pushed.\n\n## Tile Scrollably Elsewhere\n\nHere are some other projects which implement a similar workflow:\n\n- [Niri]: a scrollable tiling Wayland compositor.\n- [PaperWM]: scrollable tiling on top of GNOME Shell.\n- [karousel]: scrollable tiling on top of KDE.\n- [papersway]: scrollable tiling on top of sway\u002Fi3.\n- [hyprscroller] and [hyprslidr]: scrollable tiling on top of Hyprland.\n- [PaperWM.spoon]: scrollable tiling on top of MacOS.\n\n[Yabai]: https:\u002F\u002Fgithub.com\u002Fkoekeishiya\u002Fyabai\n[Niri]: https:\u002F\u002Fgithub.com\u002FYaLTeR\u002Fniri\n[PaperWM]: https:\u002F\u002Fgithub.com\u002Fpaperwm\u002FPaperWM\n[karousel]: https:\u002F\u002Fgithub.com\u002Fpeterfajdiga\u002Fkarousel\n[papersway]: https:\u002F\u002Fspwhitton.name\u002Ftech\u002Fcode\u002Fpapersway\u002F\n[hyprscroller]: https:\u002F\u002Fgithub.com\u002Fdawsers\u002Fhyprscroller\n[hyprslidr]: https:\u002F\u002Fgitlab.com\u002Fmagus\u002Fhyprslidr\n[PaperWM.spoon]: https:\u002F\u002Fgithub.com\u002Fmogenson\u002FPaperWM.spoon\n","Paneru 是一款适用于 macOS 的滑动平铺窗口管理器。它通过将窗口排列在一个无限延伸的水平条带上，确保新打开的窗口不会改变现有布局，从而保持界面的稳定性。每个显示器都有独立的窗口条带，防止窗口溢出到相邻屏幕。Paneru 支持 macOS 工作区，并提供了实验性的虚拟工作区功能，可以将多个水平条带堆叠在同一空间内，帮助用户更好地组织任务。此外，它还支持触摸板滑动导航、原生 macOS 标签页管理和焦点跟随鼠标等功能。这款工具特别适合需要高效利用大屏幕空间或在小屏幕上保持生产力的用户使用。",2,"2026-06-11 03:53:03","trending"]