This project is based on code originally created by yichengchen. I discovered that the original version was not compatible with macOS 26 (Sequoia), so I modified the code to make it work on macOS 26. The source code was forked from bannedbook/ClashX. The git history was lost because I accidentally deleted the .git folder when recreating the project after encountering some issues.
Official Website: https://clashx.tech
A rule-based proxy client for macOS based on Clash.
ClashX aims to provide a simple and lightweight proxy client with an intuitive interface.
- Official Website: Please visit the official website at clashx.tech.
- ClashX / ClashX Pro is only a proxy tool and does not provide any proxy servers. For server-related issues or renewals, please contact your service provider.
- HTTP/HTTPS and SOCKS protocol support
- Surge-like configuration
- GeoIP rule support
- Support for Vmess/Shadowsocks/Socks5/Trojan protocols
- Netfilter TCP redirect support
- macOS 10.14+ compatibility
- macOS 15+ (Sequoia) support with compatibility fixes
ClashX Pro comes with enhanced mode and other Clash Premium Core features.
Download from the Releases page.
- macOS 10.14 or later
- Xcode 15.0+
- Python 3
- Golang 1.21+
-
Install Golang
brew install golang # or download from https://golang.org -
Install dependencies
bash install_dependency.sh
-
Open and build
open ClashX.xcworkspace # Build in Xcode (Cmd+R)
The default configuration directory is $HOME/.config/clash
The default configuration file name is config.yaml. You can use custom config names and switch between them in the Config menu.
For more details, check out SS-Rule-Snippet for Clash.
Go to Menu Bar → Config → More Settings and modify the corresponding port numbers.
Place your icon file at ~/.config/clash/menuImage.png, then restart ClashX.
Navigate to Menu → Config → Settings → Bypass proxy settings for these Hosts & Domains.
-
Import remote config:
clash://install-config?url=http%3A%2F%2Fexample.com&name=example -
Reload current config:
clash://update-config
Add the following to your config file and set proxy mode to rule. View logs via the Help menu:
script:
code: |
def main(ctx, metadata):
# Log ProcessName
ctx.log('Process Name: ' + ctx.resolve_process_name(metadata))
return 'DIRECT'- Go to System Settings and disable ClashX notification permissions
- Enable "Reduce Notifications" in Menu Bar → Config → More Settings
Note: Not recommended as you may miss important error notifications.
- Customize shortcuts in Menu Bar → Config → More Settings (requires v1.116.1+)
- Or use AppleScript - see Shortcuts Guide
Q: How to get shell commands with external IP?
A: Click the ClashX menu icon and press Option-Command-C
Pull requests are welcome! For major changes, please open an issue first to discuss what you would like to change.
See LICENSE file for details.
Based on the original ClashX project.
