An ultra-smooth, "select-to-pop" circular menu tool for macOS.
OpenFire draws inspiration from both GTA V and PopClip, then massively refactors and optimizes the UI, interaction model, and performance with native Core Animation and Swift Concurrency.
🚀 Esports-level Response Speed
Bottom-layer hit testing based on mouseDown / mouseDragged / mouseUp. Bid farewell to missed clicks. Once text is selected, the menu pops up instantly. Click and drag to execute functions immediately with zero-lag hover states that snap instantly to your cursor like GTA V's weapon wheel.
💫 Native Blur & 60FPS Animations
Uses NSVisualEffectView and CAShapeLayer buffer pool. Page flipping, hovering, and clicking animations are buttery smooth with no frame drops.
🎛️ Highly Customizable UI Adjust the radial menu's Ring Opacity and Max Items limit (6, 8, 12, or 16 items per page) directly from the Menu Bar. You can also toggle GTA Mode for a heavier weapon-wheel style presentation with a darker HUD-like look.
🔌 Hot-pluggable Plugin System
Supports custom .openfireext plugin packages. Features double-click installation, background thread asynchronous loading, and a package management mechanism supporting deletion and disabling.
🧠 Smart Trigger Context Rewritten Accessibility recognition logic at the foundation. The "paste" function only appears inside genuinely editable text fields, and Open URL can reserve a slot without hijacking space from context-matching actions.
✂️ Cleaner Quick Actions
When OpenFire detects an empty editable field, it can show a lightweight Paste / Clear capsule near the cursor for faster text entry cleanup without opening the full wheel.
🚫 Customizable App Blacklist
Built-in automatic blacklist management UI. Supports dragging and dropping apps, or browsing via the + button to precisely block specific software.
- Download the latest
.dmgfrom the Releases page. - Open the downloaded file and drag the OpenFire app into your
Applicationsfolder. - Launch OpenFire.
- Open System Settings → Privacy & Security → Accessibility and grant permissions to OpenFire (required for text selection detection).
OpenFire lives in the macOS menu bar and exposes the main controls there:
- Ring Opacity:
0% (Opaque)to100% (Transparent) - GTA Mode: swaps the wheel into a heavier GTA V-style HUD presentation
- Max Items in Menu:
6 / 8 / 12 / 16 - Plugin Management and App Blacklist
Note: when GTA Mode is enabled, the wheel is intentionally rendered fully opaque and the opacity menu is disabled.
OpenFire's true power lies in its plugin system. Plugins exist as .openfireext packages containing a simple Config.json.
| 🔌 Plugin | 📝 Description |
|---|---|
| Copy / Cut / Paste | System clipboard management (intelligently recognizes input box context) |
| Search / Translate / Dict | Jump to Google, invoke macOS native dictionary |
| Open Link | Automatically identifies URLs in selected text and attempts to open them |
Built-in plugins are filtered by current context before pagination, so irrelevant actions do not crowd out actually usable slots.
Built into the package, they can be enabled or removed at any time via the "Plugin Management" interface:
- 🔍 Baidu Search / Google Search
- 📚 NeoDB / Douban Book Search
- 🎬 Douban Movie Search
✈️ Search in Telegram
OpenFire comes with a fully-featured Visual Plugin Editor built right into the app. You no longer need to write JSON configurations manually!
- Click the 🔥 OpenFire icon in the macOS Menu Bar.
- Select Plugin Management...
- Click the
+button at the bottom to open the Plugin Editor. - Fill in the details and choose an action type.
- 🌐
url: Open the system browser to visit{text} - ⌨️
key-combo: Record system combo shortcuts directly from the UI - 📋
copy: Copy to clipboard - 📝
paste: Paste into the current input area
For shell-script and applescript, the standard plugin layout is to point action.script at a bundled script file inside the .openfireext package. OpenFire also supports inline script text in the same script field for short snippets. When triggered, the selected text is injected into $OPENFIRE_TEXT and OPENFIRE_TEXT_FILE.
Recommended package layout
My Script.openfireext/
Config.json
script.sh
Example: Shell script file
"action": {
"type": "shell-script",
"script": "script.sh"
}Example: AppleScript file
"action": {
"type": "applescript",
"script": "script.applescript"
}Inline alternative for short scripts
"action": {
"type": "shell-script",
"script": "echo \"Selected: $OPENFIRE_TEXT\" >> ~/Desktop/openfire.log"
}- Language: Swift 5.9, AppKit, Objective-C Runtime
- Rendering: Core Animation (
CAShapeLayer,CATextLayer,CATransaction) - Event Monitoring: CGEventTap, macOS Accessibility API (
AXUIElement,AXObserver) - Concurrency: GCD (
DispatchQueue.global) and Swift Concurrency
See CHANGELOG.md.
OpenFire is released under the MIT License.