radialsan
Cross-platform radial pie-menu launcher. Inspired by AutoHotPie.
Features
- Radial Menu — Hold a hotkey to show a pie menu at your cursor, release to execute
- 13+ Actions — Send keys, open URLs, run commands, Lua scripts, clipboard, media control, and more
- Visual Editor — WYSIWYG menu editor with live Canvas preview, drag-and-drop slice reordering
- App Profiles — Automatic menu switching based on the active window (title / process name)
- Hierarchical Submenus — Nest menus up to 3 levels deep
- Icon System — Lucide Icons + emoji picker
- Lua Scripting — Embedded Lua 5.4 for custom automation
- Import/Export —
.radialsan.json packages, AutoHotPie settings import
- i18n — English and Japanese
- Cross-platform — Windows, macOS, Linux
Tech Stack
| Layer |
Technology |
| Framework |
Tauri v2 (Rust) |
| Frontend |
React + TypeScript + Vite |
| Styling |
Tailwind CSS |
| Menu Rendering |
HTML5 Canvas |
| Input Capture |
rdev (global key press/release) |
| Input Simulation |
enigo |
| Window Detection |
x-win |
| Scripting |
mlua (Lua 5.4) |
Development
Prerequisites
- Node.js 20+
- Rust (stable)
- Platform dependencies:
- Linux:
sudo apt install libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf libx11-dev libxdo-dev libxcb-shape0-dev libxcb-xfixes0-dev
- macOS: Xcode Command Line Tools, Accessibility permission for input capture
- Windows: WebView2 (included in Windows 10/11)
Setup
git clone https://github.com/uboar/radialsan.git
cd radialsan
npm install
Run (development)
cargo tauri dev
Test
# Rust tests
cd src-tauri && cargo test
# Frontend tests
npx vitest run
# TypeScript check
npx tsc --noEmit
Build
cargo tauri build
Permissions
| OS |
Permission |
Required For |
| macOS |
Accessibility |
Global hotkey capture (rdev) |
| macOS |
Screen Recording |
Window title detection (optional) |
| Linux (Wayland) |
input group |
Global input via /dev/input |
Project Structure
src/ # React frontend
components/
PieMenu/ # Canvas rendering, geometry, animation
Editor/ # Visual editor components
Layout/ # Sidebar, layout
pages/ # Dashboard, MenuEditor, Profiles, Settings
stores/ # Zustand state management
i18n/ # Translations (en, ja)
utils/ # Sharing, AutoHotPie import
src-tauri/ # Rust backend
src/
actions.rs # Action execution (sendKey, openUrl, Lua, etc.)
commands.rs # Tauri IPC commands
input_listener.rs # Global hotkey capture (rdev)
lua_engine.rs # Embedded Lua scripting
profiles.rs # Active window monitoring
settings.rs # Settings persistence (JSON)
tray.rs # System tray
License
MIT