Open source · Swift · MIT
Radial Menu
A tunable radial, vertical and horizontal menu for visionOS, macOS, iPadOS and iOS. One Swift file with no dependencies, plus the app you tune it in: live sliders, draggable measure guides, synthesised audio cues and code export.
The packing rule
R = pitch / (2·sin(step/2))
pitch = iconSize × (1 + gutter)One base unit, one constraint. Change the icon size, the item count or the arc and the spacing re-solves. Nothing overlaps because nothing can.
Why it exists
Radial menus are easy to draw and hard to get right
Parametric geometry
Spacing, hit targets and the distance a hand travels before a sub-menu opens are all numbers, and every number is wrong until you've felt it on a device. So the geometry is parametric and the export ships ratios, not points.
It does not scroll
Every item is on screen. Eight is comfortable, twelve is the ceiling. A radial menu's whole value is spatial constancy: Delete is at 7 o'clock, always, and your hand learns it in a week.
Four platforms, real hardware
One target runs on visionOS, macOS, iPadOS and iOS, and all four have been run on real devices rather than only a simulator, which is where the more interesting bugs in DESIGN.md came from.
The tuning app
Load your own menu, adjust icon size, gutter, arc, ring radius, sub-menu slide and easing with live sliders. Switch on measure guides to see the ring and the gutter it was solved for. Synthesised audio cues give each hover and commit a sound. When it feels right, export the ratios as Swift you can paste into your project.
Designed for pinch
Long pinch opens the dial, slide highlights, sub-items slide outward from their parent, release commits, and a short ease in and out keeps it from feeling jarring. It is the same interaction model that drives Quads' hold-menus in mid-air.