Skip to content

Wooden-Robot/OpenFire

Repository files navigation

OpenFire 🔥

An ultra-smooth, "select-to-pop" circular menu tool for macOS.

English简体中文

macOS 13.0+ Swift 5.9 License: MIT

OpenFire Demo 1 OpenFire Demo 2

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.


✨ Features That Wow

🚀 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.


🚀 Getting Started

Installation

  1. Download the latest .dmg from the Releases page.
  2. Open the downloaded file and drag the OpenFire app into your Applications folder.
  3. Launch OpenFire.
  4. Open System Settings → Privacy & Security → Accessibility and grant permissions to OpenFire (required for text selection detection).

Menu Bar Controls

OpenFire lives in the macOS menu bar and exposes the main controls there:

  • Ring Opacity: 0% (Opaque) to 100% (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.


🧩 The Plugin Ecosystem

OpenFire's true power lies in its plugin system. Plugins exist as .openfireext packages containing a simple Config.json.

Pre-installed Plugins

🔌 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.

Community Plugins

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

🛠️ Build Your Own Plugin

OpenFire comes with a fully-featured Visual Plugin Editor built right into the app. You no longer need to write JSON configurations manually!

  1. Click the 🔥 OpenFire icon in the macOS Menu Bar.
  2. Select Plugin Management...
  3. Click the + button at the bottom to open the Plugin Editor.
  4. Fill in the details and choose an action type.

Supported Action Types (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

Script Extensions

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"
}

💻 Tech Stack

  • 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

📒 Changelog

See CHANGELOG.md.


📄 License

OpenFire is released under the MIT License.

About

An ultra-smooth, "select-to-pop" circular menu tool for macOS. 一个在 macOS 上极致丝滑的“选中即弹出”圆环菜单工具。

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages