{"id":51346054,"url":"https://github.com/moeshinx/relay-panel","last_synced_at":"2026-07-02T12:00:56.132Z","repository":{"id":368531014,"uuid":"1280181332","full_name":"MoeShinX/relay-panel","owner":"MoeShinX","description":"Self-hosted TCP/UDP forwarding management panel with relay-node, WebSocket control, quotas, and traffic stats.","archived":false,"fork":false,"pushed_at":"2026-07-02T11:10:03.000Z","size":1529,"stargazers_count":60,"open_issues_count":0,"forks_count":12,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-02T12:00:14.826Z","etag":null,"topics":["panel","relay","rust","self-hosted","tcp-forwarding","udp-forwarding","webui"],"latest_commit_sha":null,"homepage":"https://relaypanel.dev","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MoeShinX.png","metadata":{"files":{"readme":"README.en.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"docs/ROADMAP-v0.4.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-25T10:45:42.000Z","updated_at":"2026-07-02T11:04:07.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/MoeShinX/relay-panel","commit_stats":null,"previous_names":["moeshinx/relay-panel"],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/MoeShinX/relay-panel","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MoeShinX%2Frelay-panel","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MoeShinX%2Frelay-panel/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MoeShinX%2Frelay-panel/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MoeShinX%2Frelay-panel/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MoeShinX","download_url":"https://codeload.github.com/MoeShinX/relay-panel/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MoeShinX%2Frelay-panel/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35045926,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-02T02:00:06.368Z","response_time":173,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["panel","relay","rust","self-hosted","tcp-forwarding","udp-forwarding","webui"],"created_at":"2026-07-02T12:00:22.761Z","updated_at":"2026-07-02T12:00:56.096Z","avatar_url":"https://github.com/MoeShinX.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"frontend/public/favicon.svg\" width=\"80\" height=\"80\" alt=\"RelayPanel Logo\" /\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eRelayPanel\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  ⚡ Self-hosted TCP/UDP Forwarding Management Panel ⚡\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eEnglish\u003c/strong\u003e | \u003ca href=\"README.md\"\u003e中文\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/MoeShinX/relay-panel/releases/latest\"\u003e\u003cimg src=\"https://img.shields.io/github/v/release/MoeShinX/relay-panel?style=flat-square\u0026label=Release\u0026color=blue\" alt=\"Release\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/MoeShinX/relay-panel/actions/workflows/ci.yml\"\u003e\u003cimg src=\"https://img.shields.io/github/actions/workflow/status/MoeShinX/relay-panel/ci.yml?style=flat-square\u0026label=CI\" alt=\"CI\" /\u003e\u003c/a\u003e\n  \u003ca href=\"LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/github/license/MoeShinX/relay-panel?style=flat-square\u0026label=License\u0026color=red\" alt=\"License\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  Built with Rust. Manage forwarding rules, device groups, traffic quotas, and\u003cbr/\u003e\n  live node status via web UI. Lightweight: Panel ~7 MB + Node ~4 MB.\u003cbr/\u003e\n  Deploy: Docker Compose. Database: SQLite / PostgreSQL.\n\u003c/p\u003e\n\n---\n\n## ✨ Features\n\n- 🔀 **Forwarding rules** — TCP/UDP port forwarding with multi-target, failover and round-robin load balancing; on Linux, unlimited rules use `splice` zero-copy forwarding for low latency and jitter on long chains\n- 🛡️ **Circuit breaker** — a target that keeps failing is skipped for a while; all-down triggers probe mode for auto-recovery\n- 🛒 **Plan shop \u0026 billing** — self-service purchase (balance charge) with order history; admin plan CRUD, plans grant lines and auto-authorize on purchase\n- 💳 **Up + down billing + per-line rate** — charged as `(upload + download) × line rate (0.1–100)` against the plan quota\n- 🔁 **Single current plan** — one plan per user: buying the **same** plan renews it (stack traffic / extend a time plan), buying a **different** plan switches (full replace, with a confirm); rules on lost lines auto-pause and auto-resume once re-authorized\n- 📈 **Traffic \u0026 quotas** — per-rule and per-user tracking with configurable limits (rule count, bandwidth, traffic cap)\n- 📋 **Multi-plan registration** — admins configure allowed plans; users choose on sign-up\n- 👤 **User management** — manage any user's rules, plan (assign / renew / switch / expiry / remove), reset traffic, reset password, ban/unban\n- 🖥️ **Device group management** — expandable groups with node listings; a \"hidden\" toggle hides a group from regular users' Node Status page only (rules keep working); node removal does not affect groups or rules\n- ⬆️ **One-click node upgrade** — trigger from the panel; the node self-updates from the official release (sha256-verified, upgrade-only never downgrade, aware of systemd / docker / manual installs); node ships native amd64 / arm64 binaries\n- 🖱️ **Minimal rule import/export** — single-line JSON format, batch import / batch pause-resume with automatic node distribution\n- 🖥️ **Live node status** — CPU, memory, connections, node version (highlighted when an upgrade is available)\n- 🌍 **Node region detection** — automatically identifies each node's country/region with flag display\n- 🗄️ **Dual database** — SQLite (default, zero-config) or PostgreSQL\n- 🔒 **Security** — first login forces password change; node auth via Bearer token\n\n---\n\n## 🏗️ Architecture\n\n```\n  Browser (React UI)          relay-node (Tokio TCP/UDP)\n       │                          ▲\n       ▼                          │\n   relay-panel  ◄─── WebSocket config push + HTTP status report\n   (Axum API)                     │\n       │                          ▼\n   SQLite / PG              forwards traffic to targets\n```\n\n---\n\n## 🚀 Quick start\n\n**One command deploy:**\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/MoeShinX/relay-panel/main/install.sh | bash\n```\n\n\u003e 🔑 **Default login `admin` / `admin123` — first login forces a password change.**\n\n📖 Full guide: **[docs/DEPLOYMENT.md](docs/DEPLOYMENT.md)**\n\n---\n\n## 🔄 Update\n\n```bash\ncd /opt/relay-panel \u0026\u0026 git pull --quiet \u0026\u0026 ./deploy.sh\n```\n\n\u003e ⚠️ Back up `.env` and your database before updating.\n\nForwarding nodes: **Device Groups → Copy Install Command** → paste on the node.\n\n---\n\n## 🛠️ Local dev\n\n```bash\ncargo build \u0026\u0026 cargo run -p relay-panel \u0026   # API on :18888\ncd frontend \u0026\u0026 npm install \u0026\u0026 npm run dev   # UI on :5173\npython3 tests/e2e_test.py                   # end-to-end test\n```\n\n---\n\n## 📦 Tech stack\n\n| Layer | Choice |\n|-------|--------|\n| Backend | Rust · Axum 0.8 · Tokio · sqlx |\n| Database | SQLite / PostgreSQL |\n| Auth | JWT · bcrypt |\n| Forward | Tokio async TCP + UDP |\n| Frontend | React 19 · TypeScript · Ant Design |\n| Deploy | Docker multi-stage · Compose |\n\n---\n\n## 📄 License \u0026 Disclaimer\n\nAGPL-3.0 — see [LICENSE](LICENSE).\n\nOpen-source traffic-forwarding tool for **personal study and research only**.\nUse lawfully and at your own risk.\n\nFull **[Disclaimer](docs/DISCLAIMER.md)**\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmoeshinx%2Frelay-panel","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmoeshinx%2Frelay-panel","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmoeshinx%2Frelay-panel/lists"}