Enhance your macOS Finder context menu with custom actions. Built with Swift 6.2 and SwiftUI for macOS 15.6+. Full dark mode support with adaptive icons.
- Open with External App β Open files or directories with any installed application, with support for custom arguments and environment variables.
- Copy Path β Copy the full path of selected files or folders to clipboard.
- Delete Directly β Delete files or folders directly, bypassing Trash.
- Hide / Unhide β Toggle file visibility in Finder.
- AirDrop β Share files instantly via AirDrop.
- Create New Files β Generate new files from templates directly in Finder. Supports
.txt,.json,.md,.docx,.pptx,.xlsx, as well as Apple iWork formats:.pages,.key,.numbers. - Quick Access Folders β Pin frequently used directories to the right-click menu.
- Dark Mode β Full light/dark appearance support with adaptive icons and SF Symbols.
RClick uses a dual-process architecture:
| Component | Description |
|---|---|
Main App (RClick/) |
SwiftUI menu bar app β manages settings, state, and file operations |
FinderSync Extension (FinderSyncExt/) |
Injected into Finder β renders custom context menu items |
Communication between the two processes uses DistributedNotificationCenter. Settings are persisted via SwiftData with a shared App Group container.
Get the latest release from the Releases page.
Download the .dmg, open it, and drag RClick to your Applications folder.
Note: On first launch, you may need to enable the Finder extension in System Settings β Privacy & Security β Extensions β Added Extensions.
git clone https://github.com/wflixu/RClick.git
cd RClick
open RClick.xcodeproj- Requires Xcode 16.4+ and macOS 15.6+
- Select the RClick scheme, then Product β Build (βB)
- The FinderSync extension will be automatically registered
| Requirement | Details |
|---|---|
| Folder Access | Per-folder authorization for file operations (prompted automatically) |
| Accessibility | Required for certain automation features |
| Finder Extension | Must be enabled in System Settings |
# Build
xcodebuild -project RClick.xcodeproj -scheme RClick -destination 'platform=macOS'
# Build for Release
xcodebuild -project RClick.xcodeproj -scheme RClick -configuration Release- Swift 6.2 with full concurrency checking
- SwiftUI for all UI components
- AppKit for system integration only (NSWorkspace, NSPasteboard)
- SwiftData for persistence with shared container
- FinderSync framework for Finder extension
- DistributedNotificationCenter for IPC
RClick supports five languages with the following priority:
| Language | Code | Notes |
|---|---|---|
| English | en |
Default/base language |
| Simplified Chinese | zh-Hans |
Primary localization target |
| Japanese | ja |
Activated when system language is Japanese |
| Spanish | es |
Activated when system language is Spanish |
| French | fr |
Activated when system language is French |
Principles:
- Default language is English (also the fallback for unsupported system languages)
- All string keys are in English in the code, localized via
Localizable.xcstrings - System language is auto-detected β no manual language picker in the app
- To add a new language, add an entry to
Localizable.xcstringsand register it in the Xcode project
Thanks to all the people who have contributed to RClick!
Recent contributions:
- @Juns-g β declarative hierarchical tree menus (#151), and watching mounted volumes so external and network drives show the menu (#152)
- @Dam0rt β French localization (#149)
- @stors789 β App Groups provisioning in the release pipeline (#141)
- @EliasMatDev β Latin American Spanish localization (#138)
- @shoal-rat β Finder observation fix, so the menu appears in every folder (#126)
- @P013onEr β string catalogs and trilingual localization (#120), draggable menu ordering (#121)
- @chunyang-wen β removed a needless
await(#21)
We welcome contributions! Here's how you can help:
- Report a Bug β Found something broken? Let us know.
- Request a Feature β Have an idea? We'd love to hear it.
- Submit a PR β Read our contribution guide to get started.
- Security Policy β How to responsibly report vulnerabilities.
Please read our Code of Conduct before participating.
Top-level items can be mixed with arbitrarily nested submenus, separators, and custom titles and icons.
Drop a declarative custom_menu.json into the App Group container, then go to Settings β General β Custom Menu and press "Apply" for it to take effect. Editing the file on its own changes nothing, so an edit that is still half-written cannot break your menu. With no file present the default layout is used; with an invalid one the menu stays exactly as it was and Settings shows which element failed to parse.
