{"id":28541313,"url":"https://github.com/eun1e/sublinke","last_synced_at":"2025-10-06T17:32:00.625Z","repository":{"id":295585874,"uuid":"990535804","full_name":"eun1e/sublinkE","owner":"eun1e","description":"基于sublinkX二次开发的开源节点订阅转换生成管理系统，支持更多自用的协议","archived":false,"fork":false,"pushed_at":"2025-07-07T04:22:12.000Z","size":44618,"stargazers_count":68,"open_issues_count":0,"forks_count":4,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-07-07T05:28:30.893Z","etag":null,"topics":["clash","clash-meta","hysteria","hysteria2","linux","mihomo","socks5","ss","subconverter","surge","v2ray","vless","vless-reality","xray"],"latest_commit_sha":null,"homepage":"","language":"Vue","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/eun1e.png","metadata":{"files":{"readme":"README.en-US.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-05-26T09:05:37.000Z","updated_at":"2025-07-07T04:21:17.000Z","dependencies_parsed_at":null,"dependency_job_id":"ce32d991-9172-44a0-b129-40a9bc2c177d","html_url":"https://github.com/eun1e/sublinkE","commit_stats":null,"previous_names":["eun1e/sublinke"],"tags_count":14,"template":false,"template_full_name":null,"purl":"pkg:github/eun1e/sublinkE","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eun1e%2FsublinkE","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eun1e%2FsublinkE/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eun1e%2FsublinkE/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eun1e%2FsublinkE/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eun1e","download_url":"https://codeload.github.com/eun1e/sublinkE/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eun1e%2FsublinkE/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264102956,"owners_count":23557851,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["clash","clash-meta","hysteria","hysteria2","linux","mihomo","socks5","ss","subconverter","surge","v2ray","vless","vless-reality","xray"],"created_at":"2025-06-09T20:00:33.077Z","updated_at":"2025-10-06T17:32:00.614Z","avatar_url":"https://github.com/eun1e.png","language":"Vue","readme":"\u003cdiv align=\"center\"\u003e\n\u003cimg src=\"webs/src/assets/logo.png\" width=\"150px\" height=\"150px\" /\u003e\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Vue-5.0.8-brightgreen.svg\"/\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Go-1.24.3-green.svg\"/\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Element%20Plus-2.6.1-blue.svg\"/\u003e\n  \u003cimg src=\"https://img.shields.io/badge/license-MIT-green.svg\"/\u003e\n  \u003cdiv align=\"center\"\u003e \u003ca href=\"README.md\"\u003e中文\u003c/a\u003e | English\u003c/div\u003e\n\n\n\u003c/div\u003e\n\n# Project Introduction\n\n`sublinkE` is an open-source node subscription conversion and generation management system based on secondary development of [sublinkX](https://github.com/gooaclok819/sublinkX).It is recommended that users give priority to referring to and using the original project, and we sincerely thank the original author for their efforts and contributions.\n\n- Frontend based on [vue3-element-admin](https://github.com/youlaitech/vue3-element-admin);\n- Backend using Go + Gin + Gorm;\n- Default account: admin Password: 123456, please make sure to change it after installation;\n\n# Modifications\n\n\n- [x] Fix some page bugs\n- [x] Support Clash `dialer-proxy` attribute\n- [x] Allow adding and using API KEY to access API\n- [x] Import and schedule updates of nodes from subscription links\n- [x] Support AnyTLS and Socks5 protocols\n- [x] Subscription node sorting\n- [x] Support plugin extensions (experimental)\n- [ ] ...\n\n# Project Features\n\n- High flexibility and security, supporting subscription record access and simple configuration management;\n- Support for multiple client protocols and formats, including:\n    - v2ray (base64 universal format)\n    - clash (support ss, ssr, trojan, vmess, vless, hy, hy2, tuic, AnyTLS, Socks5)\n    - surge (support ss, trojan, vmess, hy2, tuic)\n- Added token authorization and subscription import functionality, enhancing security and convenience.\n\n# 📦 Installation Guide\n\n## 🚀 Run with Docker\n```bash\ndocker run --name sublinke -p 8000:8000 \\\n-v $PWD/db:/app/db \\\n-v $PWD/template:/app/template \\\n-v $PWD/logs:/app/logs \\\n-v $PWD/plugins:/app/plugins \\\n-d eun1e/sublinke \n```\n\n## ⚡ One-click Installation\n```bash\nwget https://raw.githubusercontent.com/eun1e/sublinkE/refs/heads/main/install.sh   \u0026\u0026 sh install.sh\n```\n\n\u003e ⚠ **Note**  \n\u003e When running the one-click installation script on **Alpine Linux**, the plugin module may not work properly because Alpine uses `musl` instead of `glibc`.  \n\u003e It is recommended to use **Docker deployment** for the best compatibility, or choose distributions such as **Debian / Ubuntu**.\n\n\n# Plugin Description\n\n`sublinkE` provides a flexible plugin system, allowing developers to extend system functionality without modifying core code.\n\n## Plugin Development Guide\n\n### Basic Steps\n\n1. **Create Plugin File**: Refer to `plugins_examples/email_plugin.go` to write custom plugins\n2. **Compile Plugin**: Use `plugins_examples/build_plugin.sh email_plugin.go` to compile into a `.so` file\n3. **Deploy Plugin**: Place the compiled `.so` file into the `plugins` directory\n\n### Plugin Interface Implementation\n\nAll plugins must implement the `plugins.Plugin` interface, which includes the following core methods:\n\n```go\n// Required methods\nName() string                           // Plugin name\nVersion() string                        // Plugin version\nDescription() string                    // Plugin description\nDefaultConfig() map[string]interface{}  // Default configuration\nSetConfig(map[string]interface{})       // Set configuration\nInit() error                            // Initialize\nClose() error                           // Cleanup\n\n// Event handling method (API event listening)\nOnAPIEvent(ctx *gin.Context, event plugins.EventType, path string, \n           statusCode int, requestBody interface{}, \n           responseBody interface{}) error\n\n// Declare API paths and event types the plugin is interested in\nInterestedAPIs() []string\nInterestedEvents() []plugins.EventType\n```\n\n### Plugin Examples\n\nThe system includes the following example plugins for reference(May become invalid after version updates; it's recommended to compile it yourself.):\n\n| Plugin Name | Description | Source Code | Compiled Version |\n|-------------|-------------|------------|-----------------|\n| **Email Notification Plugin** | Monitors login events and sends email notifications | [email_plugin.go](https://github.com/eun1e/sublinkE/blob/main/plugins_examples/email_plugin.go) | [Download .so file](https://raw.githubusercontent.com/eun1e/sublinkE/main/plugins_examples/email_plugin.so) |\n\n### Plugin Configuration and Management\n\nPlugins can be managed through the Web interface:\n- Enable/disable plugins\n- Configure plugin parameters\n- View plugin status\n\n## Developing Custom Plugins\n\nCustom plugin development workflow:\n\n1. Create a Go plugin file, implementing the `plugins.Plugin` interface\n2. Export the `GetPlugin()` function, returning the plugin instance\n3. Define API paths and event types the plugin is concerned with\n4. Implement event handling logic\n5. Use the build script to compile the plugin\n\n```bash\n# Compile plugin\nwget https://raw.githubusercontent.com/eun1e/sublinkE/main/plugins_examples/build_plugin.sh\nchmod +x build_plugin.sh\n./build_plugin.sh your_plugin.go\n# Copy the generated .so file to the plugins directory\ncp your_plugin.so ../plugins/\n```\n\nFor more advanced features and detailed API documentation, please refer to the code examples.\n\n# Project Preview\n\n![Preview1](webs/src/assets/1.png)\n![Preview2](webs/src/assets/2.png)\n![Preview3](webs/src/assets/3.png)\n![Preview4](webs/src/assets/4.png)\n![Preview5](webs/src/assets/5.png)\n![Preview6](webs/src/assets/6.png)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feun1e%2Fsublinke","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feun1e%2Fsublinke","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feun1e%2Fsublinke/lists"}