AI prompts
base on A sloppy Clash.Meta GUI application based on Flutter. <h1 align="center">
<img src="./assets/imgs/logo.png" alt="Clash" width="128" />
<br>
Clash-Fudge
<br>
</h1>
<h3 align="center">
A <a href="https://github.com/MetaCubeX/mihomo">Clash.Meta</a> GUI based on Flutter.
</h3>
## Platform Support
| Linux | macOS | Windows | Android |
| :---: | :---: | :-----: | :-----: |
| 🏃♀️ | ✔️ | ➖ | 🏃♀️ |
## Features
- Similar to a native user interface.
- Built-in support [Clash.Meta](https://github.com/MetaCubeX/Clash.Meta) core.
- Similar menu bar operation logic as ClashX.
- Tun Supported.
- Some additional custom operations.
## Multi-platform
This application is primarily developed and tested on macOS. Currently, it can run on Linux and Android, but there may be some incomplete features or bugs.
**Due to the code not being stable yet, the code for each platform exists in separate branches and has not been merged. After the functionality becomes more stable, they will be merged into the main branch.**
## Preview
<img src="./docs/images/02.jpg" alt="Clash" width="420" />
<img src="./docs/images/03.jpg" alt="Clash" width="420" />
<img src="./docs/images/04.jpg" alt="Clash" width="420" />
<img src="./docs/images/05.jpg" alt="Clash" width="420" />
## Install
Download from [release](https://github.com/zsakvo/Clash-Fudge/releases).
Now it only supports macOS 10.15+
Or you can build it yourself.
## Development
You should install Flutter3.x first.
Then download the clash.meta kernel on your own, rename it as `ClashFudgeCore`, and place it in assets/core folder.
> Please note that the alpha version of the kernel has not been tested yet.
```shell
# 1. Fetch project dependencies
$ flutter pub get
# 2. Generate .g.dart file
$ dart run build_runner build --delete-conflicting-outputs
# 3. Run the project
$ flutter run -d macos
```
Or you can build it
```shell
flutter build macos
```
## Todos
> Too many, can't list them all...
### FAQ
#### 1. **macOS** "Clash-Fudge" is damaged and can't be opened
open the terminal and run `sudo xattr -r -d com.apple.quarantine /Applications/Clash-Fudge.app`
#### 2. Why does it ask for root permission when just started?
~~If you want to enable the Tun function, the kernel needs to run with root privileges. Currently, for convenience, the application directly requests permission at startup. In the future, we will consider changing the relevant logic.~~
Now only able to enable tun.
#### 3. Is it possible to avoid having to enter a password authorization every time I start?
Of course you can. You can authorize it by going to Settings -> General -> Advanced -> Kernel Silent Privilege. Once authorized, you will no longer need to enter a password for verification.
#### 4. Why do we need to rename the kernel?
In order to avoid conflicts, the application will attempt to stop any kernel processes with the same name when it starts. To prevent unexpected accidents caused by running multiple clashes at the same time, they are given separate names.
#### 5. Why can't I access the internet after exiting the application?
If you need to exit the application, please use the 'Exit' option in the top bar icon. This operation will clear your system's proxy settings and DNS settings to avoid any networking issues. If your application is forcefully closed, the related system settings will not be automatically reset, and you will need to manually disable the relevant proxy and DNS fields.
#### 6. Some programs prompt SSL certificate errors.
Try turning off/restarting the Tun mode, it should solve the problem. There may be some bugs here, please provide relevant feedback.
#### 7. I think the app icon is very ugly.
After all, you can't expect someone who rarely picks up a pen to design a sophisticated and beautiful icon in a few minutes using a knockoff pen and drawing software downloaded temporarily on an iPad. If I really had that ability, why would I still be writing code? 🥲
## Disclaimer
This is a learning project for Flutter practice.
## Contributions
Issue and PR welcome!
## Acknowledgement
Clash-Fudge was based on or inspired by these projects and so on:
- [zzzgydi/clash-verge](https://github.com/zzzgydi/clash-verge): A Clash GUI based on tauri. Supports Windows, macOS and Linux.
- [MetaCubeX/Clash.Meta](https://github.com/MetaCubeX/mihomo): A rule-based tunnel in Go.
- [macosui/macos_ui](https://github.com/macosui/macos_ui): It provides a series of components on Flutter that resemble the native macOS style.
- [leanflutter](https://github.com/leanflutter): He has provided many excellent support libraries related to desktop platforms.
## License
GPL-3.0 License. See [License here](./LICENSE) for details.
", Assign "at most 3 tags" to the expected json: {"id":"9868","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"