简报·YT
← 返回 GitHub 动态
MHSanaei/3x-ui · ⭐ 已Star 已忽略

MHSanaei/3x-ui v3.8.5

2026-09-16 00:10 · ⭐ 4.6万 · GitHub Release 原文 ↗
处理失败(已自动重试 3 次)
Error code: 402 - {'error': {'message': 'Insufficient Balance', 'type': 'unknown_error', 'param': None, 'code': 'invalid_request_error'}}
▸ Release Notes 英文原文(11608 字符)
## 🚀 Subscription page rebuilt, Xray that survives a bad config, AmneziaWG relay ports & large-fleet node sync - 🔐 **Profile page no longer disclosed** — subscription responses stop advertising a link to the built-in profile page, and the page itself is now opt-in. - 🎨 **New subscription page** — usage ring, remaining quota, Subscription / Apps / Configs tabs, one-tap import on Android, iOS , and right-to-left rendering for Persian and Arabic. - 🛡️ **Xray stays up on a bad config** — a config the running core cannot bind is refused at the restart funnel with the reason shown in the panel, instead of killing every protocol in a one-second retry loop. - 📡 **AmneziaWG relay ports fixed for good** — the loopback relay slot now wraps, survives disabled and peerless rows, and refuses a row its own port; on databases with a high inbound-id counter the protocol simply never worked before. - 🧵 **Large node fleets** — 32-way sync, pooled per-node HTTP clients, fanned-out fleet operations and no more node I/O inside the traffic writer. - 🔁 **Reverse tunnels survive the panel** — a vless reverse client keeps its tunnel across edits, bulk enables, quota renewals and IP-limit cycles. - 🧭 **DNS query type 0 repaired** — a stored `"qType": 0` blocked every query through that outbound; a one-time migration fixes existing templates. - 🧰 **Panel polish** — API docs split into tabs, clickable stat-card filtering on the Clients page. --- ## ⚠️ Before you upgrade ### Action required - The built-in subscription profile page is now **off by default** (`subProfileMode` = `none`), so the `profile-web-page-url` header is no longer sent for installs that never set a custom URL — **do this:** if your users rely on that page, open *Settings → Subscription* and set the profile page mode to **Built-in**. A custom URL you already configured is kept and needs no action. - `Restart Xray After Client Disable` now also fires when a client is disabled or deleted **by hand**, not only when it is auto-disabled by expiry or quota — **do this:** if you do not want a core restart on manual client edits, turn that setting off in *Settings → Xray*. - Saving or enabling an inbound whose ports collide is now refused instead of silently taking the core down — **do this:** if a save or enable is refused after upgrading, free the port named in the refusal; the refusal identifies the inbound row or AmneziaWG peer that owns it. ### Automatic — no action needed - A one-time migration (`DNSOutboundQTypeZeroFix`) rewrites a stored numeric `"qType": 0` in the DNS outbound to `"0"`. Installs that reached 3.8.0 with a "block type 0" DNS rule had **all** DNS dropped through that outbound; this repairs the stored template in place. An unparseable template is logged and skipped — the failure is not fatal and the panel still starts. - An existing `subProfileUrl` is preserved and mapped to the new **Custom** mode, so no URL has to be re-entered. - Each node is now sent only the client IPs of the clients it hosts; the master stops pushing the whole fleet's IP table on every 10-second tick. ### Requirements Go 1.27.1 · Xray-core v26.9.9 --- ### 🔐 Security - Subscription responses no longer hand out a link to the built-in profile page, which exposed the subscription URL itself; the page is now off unless enabled, with explicit **None / Built-in / Custom** modes in Subscription settings ([#6538](https://github.com/MHSanaei/3x-ui/pull/6538)) @NgaiYeanCoi - A node receives only the client IPs of the clients it hosts, instead of the entire fleet's IP table, so one node no longer holds records for clients served by every other node ([`af466b6a`](https://github.com/MHSanaei/3x-ui/commit/af466b6a)) ### 🆕 New - The subscription page is rebuilt around a usage ring, remaining quota and a stats grid, split into Subscription / Apps / Configs tabs, with direct import on Android, iOS and Windows, a status that tells expired from depleted from disabled, and right-to-left rendering for Persian and Arabic ([`e26cf1d3`](https://github.com/MHSanaei/3x-ui/commit/e26cf1d3)) - The API docs page separates WebSocket events from the Panel API into tabs and shows one API section at a time, keeping your authorization and try-it-out state across sections ([`01ce2bce`](https://github.com/MHSanaei/3x-ui/commit/01ce2bce)) - Clicking a summary card on the Clients page filters the list to that bucket, and each card's count now matches the size of its filtered list exactly ([`5008906c`](https://github.com/MHSanaei/3x-ui/commit/5008906c)) ### ⚡ Improved - Node traffic sync runs up to 32 nodes at once instead of 8: a 300-node fleet's tick drops from 25–30s to 6–9.5s, so dashboard traffic, online clients and quota enforcement keep their intended cadence ([`3c8cf357`](https://github.com/MHSanaei/3x-ui/commit/3c8cf357)) - Each node keeps one pooled HTTP client instead of rebuilding it on every 5-second heartbeat, removing a full TCP+TLS handshake per node per tick ([#6548](https://github.com/MHSanaei/3x-ui/pull/6548)) @BlindMaster24 - The Nodes table stops re-rendering every row when no node has changed — about 390ms down to 0.5ms for 150 nodes ([`3fa44915`](https://github.com/MHSanaei/3x-ui/commit/3fa44915)) - The Inbounds table rebuilds only the rows whose numbers actually moved on a websocket push, instead of every row on every push ([`7fc86f87`](https://github.com/MHSanaei/3x-ui/commit/7fc86f87)) - The row-count selector in the panel, Xray and AmneziaWG log modals is wide enough to read its larger values ([`5fe4f241`](https://github.com/MHSanaei/3x-ui/commit/5fe4f241)) - The IP-limit temporary disconnect is documented for what it actually does: it clears the core's stored credential so new connections are refused, while the fail2ban ban on the logged IP is what ends traffic already flowing ([#6551](https://github.com/MHSanaei/3x-ui/pull/6551)) @BlindMaster24 ### 🐞 Fixed **Xray & inbounds** - Xray no longer exits into a one-second restart loop when a saved config's listens collide: the generated config is probed at the single restart funnel, the running core keeps serving, and the panel surfaces the reason instead of leaving it in the logs ([#6547](https://github.com/MHSanaei/3x-ui/pull/6547)) @BlindMaster24 - Port conflicts are checked when an inbound is enabled and against ports an AmneziaWG peer forwards, not only when a row is saved; the refusal names the row or peer that owns the port ([#6549](https://github.com/MHSanaei/3x-ui/pull/6549), [#6554](https://github.com/MHSanaei/3x-ui/pull/6554)) @BlindMaster24 - A DNS outbound rule set to query type 0 no longer matches every query — the core drops a bare numeric `0`, and a rule with no query types blocks, refuses or hijacks all DNS through that outbound ([`bc424f09`](https://github.com/MHSanaei/3x-ui/commit/bc424f09)) - Disabling or deleting a client ends its live session when restart-on-client-disable is enabled; dropping the credential alone left a disabled client's established connection passing traffic across vless, vmess, trojan and shadowsocks ([#6550](https://github.com/MHSanaei/3x-ui/pull/6550)) @BlindMaster24 - A loopback or AmneziaWG outbound spelled with capitals is read the way the core reads it, so renaming or deleting the inbound it names keeps the tag in step and the outbound is still bridged instead of failing the core with "unknown config id" ([#6530](https://github.com/MHSanaei/3x-ui/pull/6530), [#6531](https://github.com/MHSanaei/3x-ui/pull/6531)) @BlindMaster24 **AmneziaWG** - An AmneziaWG inbound's loopback relay port is allocated and reserved correctly: the port window wraps instead of running out permanently once the inbound-id counter passes it, a disabled or peerless row keeps its slot, and a row is refused its own relay port — each case previously put two listeners on one port and took every protocol on the host down with it ([#6539](https://github.com/MHSanaei/3x-ui/pull/6539), [#6540](https://github.com/MHSanaei/3x-ui/pull/6540), [#6542](https://github.com/MHSanaei/3x-ui/pull/6542), [#6544](https://github.com/MHSanaei/3x-ui/pull/6544)) @BlindMaster24 **Nodes** - A burst of node transitions sends one alert per direction naming the nodes, so a master-side network blip across 150 nodes no longer overruns the notifier queue and the Telegram and Discord rate limits ([`56bb876d`](https://github.com/MHSanaei/3x-ui/commit/56bb876d)) - Reset-all-traffic, panel updates and bulk inbound deletes fan out across nodes instead of walking them one at a time: 15 hanging nodes out of 150 no longer keep a request running for 2m41s after the browser was already told it failed ([`eb11e8c8`](https://github.com/MHSanaei/3x-ui/commit/eb11e8c8)) - A disabled, deleted or offline node no longer keeps its clients listed as online on the dashboard, or its learned sub-nodes on the Nodes page until the panel restarts ([`a84bbeab`](https://github.com/MHSanaei/3x-ui/commit/a84bbeab)) - A depleted client's node pushes run off the traffic writer, where one hanging node used to freeze traffic polls, node snapshot merges and every client edit for the whole wave ([`ea66aa49`](https://github.com/MHSanaei/3x-ui/commit/ea66aa49)) - The periodic traffic reset processes eight due inbounds and clients at a time, instead of stretching a single run over hours behind a few hanging nodes ([`dea7cd9c`](https://github.com/MHSanaei/3x-ui/commit/dea7cd9c)) - LDAP sync enables, disables and detaches clients through the bulk paths, so each inbound is locked and pushed once per run rather than once per directory user ([`3c1498d8`](https://github.com/MHSanaei/3x-ui/commit/3c1498d8)) - Deleting a node frees its network metric history and its pooled HTTP client, which stayed in memory until the panel restarted ([`bc49c1a6`](https://github.com/MHSanaei/3x-ui/commit/bc49c1a6)) - A node running on a different update channel than the master is no longer permanently tagged as having an update available ([`14b92fbc`](https://github.com/MHSanaei/3x-ui/commit/14b92fbc)) **Panel & clients** - A vless client carrying a reverse config keeps its tunnel across an edit, a bulk re-enable, a quota renewal, adding a client to an existing inbound, and an IP-limit disconnect cycle — all of which left it able to connect but unable to open its tunnel until Xray restarted, with nothing logged ([#6553](https://github.com/MHSanaei/3x-ui/pull/6553), [#6558](https://github.com/MHSanaei/3x-ui/pull/6558)) @BlindMaster24 - A 2FA code submitted at the end of its 30-second window, or with slight clock drift between client and server, is accepted instead of rejected as invalid ([#6546](https://github.com/MHSanaei/3x-ui/pull/6546)) @sdhfsl - A subscription outbound's tag stays bound to its server when the upstream rotates its reality shortId and SNI on every request; removing or inserting a server used to re-point existing tags at entirely different servers, breaking balancers and routing rules that select by tag ([`c9e62451`](https://github.com/MHSanaei/3x-ui/commit/c9e62451)) - The Edit Client modal no longer shows a scrollbar when its fields already fit, and the bar is no longer painted light inside the dark modal ([`e8bab17c`](https://github.com/MHSanaei/3x-ui/commit/e8bab17c)) ### Reports ![Total Download](https://img.shields.io/github/downloads/mhsanaei/3x-ui/v3.8.5/total?label=Total-Download&color=success) ### New Contributors * @sdhfsl made their first contribution in https://github.com/MHSanaei/3x-ui/pull/6546 **Full Changelog**: https://github.com/MHSanaei/3x-ui/compare/v3.8.0...v3.8.5
▸ 主项目介绍 · MHSanaei/3x-ui
▸ README 原文(同步于 2026-09-13 16:24)
[English](/README.md) | [فارسی](/README.fa_IR.md) | [العربية](/README.ar_EG.md) | [中文](/README.zh_CN.md) | [Español](/README.es_ES.md) | [Русский](/README.ru_RU.md) | [Türkçe](/README.tr_TR.md) <p align="center"> <picture> <source media="(prefers-color-scheme: dark)" srcset="./media/3x-ui-dark.png"> <img alt="3x-ui" src="./media/3x-ui-light.png"> </picture> </p> <p align="center"> <a href="https://github.com/MHSanaei/3x-ui/releases"><img src="https://img.shields.io/github/v/release/mhsanaei/3x-ui" alt="Release"></a> <a href="https://github.com/MHSanaei/3x-ui/actions"><img src="https://img.shields.io/github/actions/workflow/status/mhsanaei/3x-ui/release.yml.svg" alt="Build"></a> <a href="#"><img src="https://img.shields.io/github/go-mod/go-version/mhsanaei/3x-ui.svg" alt="GO Version"></a> <a href="https://github.com/MHSanaei/3x-ui/releases/latest"><img src="https://img.shields.io/github/downloads/mhsanaei/3x-ui/total.svg" alt="Downloads"></a> <a href="https://www.gnu.org/licenses/gpl-3.0.en.html"><img src="https://img.shields.io/badge/license-GPL%20V3-blue.svg?longCache=true" alt="License"></a> <a href="https://pkg.go.dev/github.com/mhsanaei/3x-ui/v3"><img src="https://pkg.go.dev/badge/github.com/mhsanaei/3x-ui/v3.svg" alt="Go Reference"></a> <a href="https://docs.sanaei.dev"><img src="https://img.shields.io/badge/docs-docs.sanaei.dev-22d3ee" alt="Documentation"></a> </p> **3X-UI** 是一个先进的开源 Web 控制面板,用于管理 [Xray-core](https://github.com/XTLS/Xray-core) 服务器。它提供简洁、多语言的界面,用于部署、配置和监控各种代理与 VPN 协议——从单台 VPS 到多节点部署。 3X-UI 作为原始 X-UI 项目的增强分支(fork),增加了更广泛的协议支持、更好的稳定性、按客户端的流量统计以及许多提升使用体验的功能。 > [!IMPORTANT] > 本项目仅供个人使用。请勿将其用于非法目的,也请勿在生产环境中使用。 ## 功能特性 - **多协议入站** — VLESS、VMess、Trojan、Shadowsocks、WireGuard、AmneziaWG、Hysteria2、MTProto、HTTP、SOCKS (Mixed)、Dokodemo-door / Tunnel 和 TUN。 - **现代传输与安全** — TCP (Raw)、mKCP、WebSocket、gRPC、HTTPUpgrade 和 XHTTP,并通过 TLS、XTLS 和 REALITY 加密。 - **内置 AmneziaWG** — 抗 DPI 的 WireGuard 直接在面板内的用户态网络栈上运行,无需内核模块、DKMS 或额外软件包。 - **MTProto 代理** — 按客户端配置 FakeTLS 密钥、广告标签和配额,实时生效且不会断开已有连接。 - **回落 (Fallback)** — 通过 Xray 的 fallback 功能在单个端口上提供多种协议(例如在 443 端口上同时使用 VLESS 和 Trojan)。 - **按客户端管理** — 流量配额、到期日期、可豁免受信任地址的 IP 限制、HWID 设备数限制、定时续期周期、实时在线状态,以及一键分享链接、二维码和订阅。 - **流量统计** — 按入站、按客户端、按出站统计,并支持重置控制。 - **多节点支持** — 从单一面板管理并扩展到多台服务器,并可将入站克隆到其他节点。 - **出站与路由** — WARP、NordVPN、PIA、自定义路由规则、支持均衡器间回退的负载均衡器,以及出站代理链。内置的 geosite 与 geoip 分类可直接在规则编辑器中浏览。 - **内置订阅服务器** — 提供 raw、JSON 和 Clash 输出,可依据客户端 User-Agent 自动选择,并支持[自定义页面模板](docs/custom-subscription-templates.md)。 - **Telegram 机器人**,用于远程监控和管理。 - **RESTful API**,支持带作用域、可设置有效期的令牌,并提供面板内置的 API 参考文档。 - **可安装面板 (PWA)** — 将 3X-UI 固定到桌面或手机主屏幕。 - **灵活的存储** — SQLite(默认)或 PostgreSQL。 - **13 种界面语言**,支持深色和浅色主题。 - **Fail2ban 集成**,用于强制执行按客户端的 IP 限制。 ## 截图 <details> <summary>点击展开</summary> <picture> <source media="(prefers-color-scheme: dark)" srcset="./media/01-overview-dark.png"> <img alt="Overview" src="./media/01-overview-light.png"> </picture> <picture> <source media="(prefers-color-scheme: dark)" srcset="./media/02-add-inbound-dark.png"> <img alt="Inbounds" src="./media/02-add-inbound-light.png"> </picture> <picture> <source media="(prefers-color-scheme: dark)" srcset="./media/03-add-client-dark.png"> <img alt="Add client" src="./media/03-add-client-light.png"> </picture> <picture> <source media="(prefers-color-scheme: dark)" srcset="./media/05-add-nodes-dark.png"> <img alt="Configs" src="./media/05-add-nodes-light.png"> </picture> </details> ## 快速开始 ```bash bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh) ``` 若要安装特定版本,请在命令后附加对应的标签(例如 `v3.7.0`): ```bash bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh) v3.7.0 ``` 若要安装滚动更新的 **dev** 版本(来自 `main` 的最新逐次提交预发布版本,而非稳定版本),请传入 `dev-latest`: ```bash bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh) dev-latest ``` 安装过程中会生成随机的用户名、密码和访问路径。安装完成后,运行 `x-ui` 打开管理菜单,您可以在其中启动/停止服务、查看或重置登录凭据、管理 SSL 证书等。 每个发布资源都会在其旁边附带一个 `.sha256` 校验和。`install.sh` 和更新程序都会据此校验压缩包,不匹配时中止。 完整文档(安装、配置、运维以及完整的 API 参考)请访问 **[docs.sanaei.dev](https://docs.sanaei.dev/zh)**。 ### 无人值守安装 安装程序也可以**非交互式**运行,适用于 cloud-init。 设置 `XUI_NONINTERACTIVE=1`(或在无 TTY 的情况下通过管道传入),它就会全程 零提示地完成端到端安装,生成随机凭据并写入 `/etc/x-ui/install-result.env`。请参阅 [`deploy/`](deploy/): - [Cloud-init user-data](deploy/cloud-init/) — 在任意云平台上无人值守安装(Hetzner/AWS/DO/Vultr/GCP/Azure/Oracle) - [Hetzner Cloud 说明](deploy/marketplace/hetzner/) — 在 Hetzner 上基于 cloud-init 的部署 ## 支持的平台 **操作系统:** Ubuntu、Debian、Armbian、Fedora、CentOS、RHEL、AlmaLinux、Rocky Linux、Oracle Linux、Amazon Linux、Virtuozzo、Arch、Manjaro、Parch、openSUSE (Tumbleweed / Leap)、Alpine 和 Windows。 **架构:** `amd64` · `386` · `arm64` (aarch64) · `armv7` · `armv6` · `armv5` · `s390x`。 ## 数据库选项 3X-UI 支持两种后端,可在安装时选择: - **SQLite**(默认)— 位于 `/etc/x-ui/x-ui.db` 的单个文件。无需配置,适合中小型部署。 - **PostgreSQL** — 推荐用于大量客户端或多节点设置。安装程序可以为您在本地安装 PostgreSQL,或接受指向现有服务器的 DSN。 运行时通过环境变量选择后端(安装程序会为您写入 `/etc/default/x-ui`): ``` XUI_DB_TYPE=postgres XUI_DB_DSN=postgres://xui:password@127.0.0.1:5432/xui?sslmode=disable ``` ### 将现有的 SQLite 安装迁移到 PostgreSQL ```bash x-ui migrate-db --dsn "postgres://xui:password@127.0.0.1:5432/xui?sslmode=disable" # 然后在 /etc/default/x-ui 中设置 XUI_DB_TYPE 和 XUI_DB_DSN 并重启: systemctl restart x-ui ``` 源 SQLite 文件保持不变;在确认新后端正常工作后,请手动删除它。 ### Docker 默认的 `docker compose up -d` 仍使用 SQLite。若要使用捆绑的 PostgreSQL 服务运行,请取消注释 `docker-compose.yml` 中的两行 `XUI_DB_*` 环境变量,并使用该 profile 启动: ```bash docker compose --profile postgres up -d ``` 该镜像捆绑了 Fail2ban(默认启用),用于强制执行按客户端的 **IP 限制**。Fail2ban 使用 `iptables` 封禁违规者,这需要 `NET_ADMIN` 权限。`docker-compose.yml` 已通过 `cap_add` 授予该权限;如果您改用 `docker run` 启动容器,请自行添加这些权限,否则封禁只会被记录而永远不会生效: ```bash docker run -d --cap-add=NET_ADMIN --cap-add=NET_RAW ... ghcr.io/mhsanaei/3x-ui ``` ## 环境变量 | 变量 | 说明 | 默认值 | | --- | --- | --- | | `XUI_DB_TYPE` | 数据库后端:`sqlite` 或 `postgres` | `sqlite` | | `XUI_DB_DSN` | PostgreSQL 连接字符串(当 `XUI_DB_TYPE=postgres` 时) | — | | `XUI_DB_FOLDER` | SQLite 数据库文件所在目录 | `/etc/x-ui` | | `XUI_DB_MAX_OPEN_CONNS` | 最大打开连接数(PostgreSQL 连接池) | — | | `XUI_DB_MAX_IDLE_CONNS` | 最大空闲连接数(PostgreSQL 连接池) | — | | `XUI_INIT_WEB_BASE_PATH` | Web 面板的初始 URI 路径 | `/` | | `XUI_ENABLE_FAIL2BAN` | 启用基于 Fail2ban 的 IP 限制 | `true` | | `XUI_LOG_LEVEL` | 日志级别(`debug`、`info`、`warning`、`error`) | `info` | | `XUI_DEBUG` | 启用调试模式 | `false` | | `XUI_TUNNEL_HEALTH_MONITOR` | 启用隧道健康监控(探测某个 URL,在连续多次失败后重启 xray;重启会断开所有客户端) | `false` | | `XUI_TUNNEL_HEALTH_PROXY` | 探测请求所经过的代理;将其指向本地 xray 入站,使探测能够测试隧道(例如 `socks5://127.0.0.1:1080`)。留空表示探测仅检查主机连通性 | — | | `XUI_TUNNEL_HEALTH_URL` | 用于检测隧道健康状况的探测 URL | `https://www.cloudflare.com/cdn-cgi/trace` | | `XUI_TUNNEL_HEALTH_INTERVAL` | 两次探测之间的间隔 | `30s` | | `XUI_TUNNEL_HEALTH_TIMEOUT` | 单次探测的超时时间 | `10s` | | `XUI_TUNNEL_HEALTH_FAILURES` | 触发重启前的连续失败次数 | `3` | | `XUI_TUNNEL_HEALTH_COOLDOWN` | 两次连续重启之间的最小间隔 | `5m` | | `NODE_TOKEN_ENCRYPTION` | 节点 API 令牌的静态加密:`off`、`migration` 或 `required`(注意:无 `XUI_` 前缀) | `off` | | `XUI_NODE_TOKEN_KEY_FILE` | JSON 密钥环(权限 `0600`),包含活动密钥 ID 及其 base64 编码的 32 字节密钥 | `/etc/x-ui/node_token_key.json` | | `XUI_NODE_TOKEN_KEY` | 单个 base64 编码的 32 字节密钥,仅在无法加载密钥文件时使用 | — | 完整列表请参阅[环境变量参考](https://docs.sanaei.dev/zh/docs/reference/env-vars)。 ## 支持的语言 面板界面提供 13 种语言: English · فارسی · العربية · 中文(简体) · 中文(繁體) · Español · Русский · Українська · Türkçe · Tiếng Việt · 日本語 · Bahasa Indonesia · Português (Brasil) ## 贡献 欢迎贡献。在提交 issue 或 pull request 之前,请阅读[贡献指南](/CONTRIBUTING.md)。 ## 特别感谢 - [alireza0](https://github.com/alireza0/) ## 致谢 - [Iran v2ray rules](https://github.com/chocolate4u/Iran-v2ray-rules) (许可证: **GPL-3.0**): _增强的 v2ray/xray 和 v2ray/xray-clients 路由规则,内置伊朗域名,专注于安全性和广告拦截。_ - [Russia v2ray rules](https://github.com/runetfreedom/russia-v2ray-rules-dat) (许可证: **GPL-3.0**): _此仓库包含基于俄罗斯被阻止域名和地址数据自动更新的 V2Ray 路由规则。_ ## 社区工具 社区围绕 3x-ui 构建的工具和集成。 - [terraform-provider-3x-ui](https://github.com/batonogov/terraform-provider-threexui) (许可证: **MIT**): _使用 Terraform / OpenTofu 通过代码管理入站、客户端、面板设置和 Xray 配置。_ - [3X-UI Manager](https://github.com/yukh975/3X-UI-Manager) (许可证: **MIT**): _3x-ui 的原生 Android 客户端 — 仪表板、入站、带二维码分享的客户端、节点以及多面板管理。可在 F-Droid 获取。_ ## 支持项目 **如果这个项目对您有帮助,您可以给它一个**:star2: <a href="https://www.buymeacoffee.com/MHSanaei" target="_blank"> <img src="./media/default-yellow.png" alt="Buy Me A Coffee" style="height: 70px !important;width: 277px !important;" > </a> </br> <a href="https://nowpayments.io/donation/hsanaei" target="_blank" rel="noreferrer noopener"> <img src="./media/donation-button-black.svg" alt="Crypto donation button by NOWPayments"> </a> ## 星标历史 <a href="https://www.star-history.com/?repos=mhsanaei%2F3x-ui&type=date&legend=top-left"> <picture> <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/chart?repos=mhsanaei/3x-ui&type=date&theme=dark&legend=top-left" /> <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/chart?repos=mhsanaei/3x-ui&type=date&legend=top-left" /> <img alt="Star History Chart" src="https://api.star-history.com/chart?repos=mhsanaei/3x-ui&type=date&legend=top-left" /> </picture> </a> <p align="center"> <a href="https://www.star-history.com/mhsanaei/3x-ui"> <picture><source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/badge?repo=MHSanaei/3x-ui&type=rank&theme=dark" /><source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/badge?repo=MHSanaei/3x-ui&type=rank" /><img alt="Star History Rank" src="https://api.star-history.com/badge?repo=MHSanaei/3x-ui&type=rank" /></picture> <picture><source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/badge?repo=MHSanaei/3x-ui&type=trending&theme=dark" /><source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/badge?repo=MHSanaei/3x-ui&type=trending" /><img alt="GitHub Trending Repository of the Day" src="https://api.star-history.com/badge?repo=MHSanaei/3x-ui&type=trending" /></picture> </a> </p>