site: review — Loop radial window manager (graduates from find)

4-slide carousel (radial menu, preview, cycles, stash) sourced from the
project's GitHub assets/graphics directory and re-encoded at 1280p.
This commit is contained in:
2026-05-09 11:13:14 -04:00
parent c998a88934
commit 60d6a676c5
8 changed files with 63 additions and 0 deletions
@@ -9,6 +9,7 @@ topics:
- macos-apps
tags: [window-management, indie, open-source, keyboard]
description: "Hold a key, flick the cursor in a direction, and Loop snaps the active window. A radial menu instead of a hotkey grid."
promotedTo: loop-radial-window-manager
---
Loop replaces the Rectangle/Magnet hotkey grid with a radial menu: hold the trigger key, move the cursor toward the half/quarter/edge you want, release. The preview window shows the resize before commit, so muscle memory builds without overshoot. Free, GPLv3, macOS 13+.
@@ -0,0 +1,53 @@
---
name: Loop
subtitle: Window snapping by gesture, not by hotkey
date: 2026-05-09
category: interface
tags: [macos, window-management, indie, open-source, keyboard]
description: "A free, open-source macOS window manager that swaps the Rectangle/Magnet hotkey grid for a radial menu — hold a key, flick the cursor toward an edge, release."
link: https://github.com/MrKai77/Loop
linkText: github.com/MrKai77/Loop
source: "r/macapps"
fromFind: loop-radial-window-manager
---
import slide1 from './radial-menu.mp4';
import slide2 from './preview.mp4';
import slide3 from './cycles.mp4';
import slide4 from './stash.mp4';
<div class="carousel">
<figure id="s1">
<video src={slide1} autoplay loop muted playsinline />
<figcaption>Hold the trigger key and flick the cursor toward a half, quarter, or edge — release to commit.</figcaption>
</figure>
<figure id="s2">
<video src={slide2} autoplay loop muted playsinline />
<figcaption>The live preview outlines the destination frame as you aim, so a wrong flick can be aborted before the resize fires.</figcaption>
</figure>
<figure id="s3">
<video src={slide3} autoplay loop muted playsinline />
<figcaption>Cycles: re-flick in the same direction to step through halves, thirds, and quarters without picking new keys.</figcaption>
</figure>
<figure id="s4">
<video src={slide4} autoplay loop muted playsinline />
<figcaption>Stash: tuck a window to a screen edge for quick recall later.</figcaption>
</figure>
</div>
<nav class="carousel-nav" aria-label="Carousel navigation">
<a href="#s1">1</a>
<a href="#s2">2</a>
<a href="#s3">3</a>
<a href="#s4">4</a>
</nav>
> A free, open-source macOS window manager that replaces the Rectangle/Magnet hotkey grid with a radial menu. Hold a trigger key, move the cursor toward the half, quarter, or edge you want, release to commit.
Hold the trigger key and Loop pops a translucent radial menu over the active window. Move the cursor toward a half, quarter, or edge; release to commit. A live preview outlines the destination frame as you aim, so a wrong flick can be corrected before the resize fires.
Rectangle and Magnet ask you to memorize a grid: a chord per position, more chords as you add halves, thirds, and quarters. The chord is symbolic — you have to remember which modifier you mapped to "left third." Loop's gesture *is* the position. A "cycles" feature lets you re-flick in the same direction to step through halves → thirds → quarters without picking new keys for each.
The radial menu, preview, and theming are tunable (width, shape, color, padding); a stash gesture tucks a window to a screen edge for quick recall. Per-app behavior and keyboard shortcuts are still there for people who want both. GPLv3, Swift, signed and notarized, macOS 13+.
The trade-off versus a grid-based manager is a day or two of muscle-memory rebuild — flicking is fast once it's in your hands, but coming from a decade of `⌃⌥←` makes the first afternoon feel slower. Free, with no nags or telemetry.
+2
View File
@@ -24,6 +24,7 @@ import cotypist from '../content/reviews/cotypist/hero.mp4';
import dockdoor from '../content/reviews/dockdoor/alttab.mp4';
import fluxMarkdown from '../content/reviews/flux-markdown/demo.mp4';
import homerow from '../content/reviews/homerow/overlay.mp4';
import loop from '../content/reviews/loop-radial-window-manager/radial-menu.mp4';
import monocle from '../content/reviews/monocle/spotlight.mp4';
import shottr from '../content/reviews/shottr/text-erase.mp4';
import typewhisper from '../content/reviews/typewhisper/demo.mp4';
@@ -56,6 +57,7 @@ export const heroes: Record<string, Hero | undefined> = {
dockdoor: { kind: 'video', src: dockdoor },
'flux-markdown': { kind: 'video', src: fluxMarkdown },
homerow: { kind: 'video', src: homerow },
'loop-radial-window-manager': { kind: 'video', src: loop },
monocle: { kind: 'video', src: monocle },
shottr: { kind: 'video', src: shottr },
typewhisper: { kind: 'video', src: typewhisper },