MHSanaei/3x-ui v3.10.0
本次版本引入 MASQUE 与 XDRIVE 两种全新协议/传输、升级到 Xray-core v26.10.10(带来 Lua DNS/路由脚本与新 TUN 选项),同时大规模修复节点同步逻辑、对 panel 的 systemd 服务做沙箱加固,并把会让 Xray 启动失败的非法配置改为保存时直接拒绝。
新增能力
- MASQUE 协议与传输:新增 inbound/outbound,基于 CONNECT-IP over HTTP/3 或 HTTP/2,且始终置于 TLS 之后;客户端以 email + password 登录,JSON 订阅会为每个客户端自动构建 MASQUE outbound。由于没有链接格式,分享链接(share links)与 Clash 会跳过 MASQUE。
- WARP over MASQUE:WARP 弹窗现在可通过 MASQUE 注册 WARP 设备并直接生成可用的
warp-masque outbound,且不影响已有的 WireGuard 注册。
- XDRIVE transport:inbound/outbound 支持把流量隧道进 Google Drive 中的文件、本地文件夹,或由模板描述的任意 HTTP 存储 API;XDRIVE outbound 可用 TLS 前置存储 API;Xray 无法打开的存储设置在保存时即被拒绝。
- Lua DNS 与路由脚本:DNS 增加 script 字段及每服务器 ID,Basics 增加 routing script 字段;Routing 标签页会提示「设置脚本期间规则会被跳过」。
- TUN 增强:可设置 Windows 适配器类型、在 Linux 上把 systemd-resolved 指向 TUN 网关、在 Windows 上通过 WFP 阻止 DNS 泄漏。
- finalmask 编辑器扩展:新增 header-custom 变量与 transforms、TCP
errors 组、UDP prefix/standalone 模式、sudoku UDP mask,以及形如 60-120 的 noise reset ranges。这些键此前保存时会被丢弃。
- Outbound TLS 新增 Use system CA 开关:用于由私有安装的 CA 签名的服务器。
- PostgreSQL 18:新的本地数据库安装从官方 PGDG 仓库获取当前主版本;PGDG 无构建包的发行版回退到发行版自带包。
修复与改进
- 端口跳跃(Port hopping)恢复:Hysteria 与 XHTTP(HTTP/3)outbound 以及 JSON 订阅客户端重新支持通过
udphop mask 跳端口;hop 写在每个 endpoint 上并按要求放在最后位置。
- 节点同步(Nodes):
- master 上的客户端新增/禁用/编辑现在能推送到以 admin token 注册的节点;节点上被删除的 inbound 会由 reconcile 重新创建,而不是反复尝试更新。
- 节点上报空客户端列表(刚重置/重启/被移除)不再导致 hub 删除这些客户端,hub 会推回它们(#6734)。
- 在节点 inbound 上续期、重置或自动禁用客户端改为原地更新用户,端口上的既有连接不再被断开。
- 以 node-sync token 或 mTLS 注册的 master 可再次设置订阅排序、批量重置客户端流量、读取节点活跃 inbound(此前返回 403)。
- 从节点 inbound 分离的客户端不再被节点陈旧统计误禁用,旧配额也不再被写回。
- 节点 inbound 换新 tag 替换后,客户端流量历史与配额用量得以保留。
- Xray 配置与 inbound:
- Shadowsocks-2022 inbound 不再提供
2022-blake3-chacha20-poly1305(Xray 在多用户下无法运行),存量 inbound 自动迁移到 2022-blake3-aes-256-gcm;32 字节 key 保持有效,方法不匹配的服务器 key 保存时拒绝(此前会导致 Xray 起不来)。
- salamander / gecko finalmask 密码短于 4 字节保存时拒绝并在编辑器中标记。
- VLESS 客户端在 inbound 迁移到不支持 Vision 的传输后仍可连接:Vision flow 只在 Xray 实际运行它的地方应用(raw TCP 上的 TLS 或 REALITY、任意传输上的 VLESS encryption)。
- panel 设置的 balancer override 在路由重载和节点测试后保留;指向未知/已移除 outbound 的 override 被拒绝或清除(#6779)。
- WebSocket 传输的 TLS ALPN 默认
http/1.1,避免协商到 h2 时握手失败(#6787)。
- 订阅与链接:
- VLESS inbound 未存 encryption 键时,JSON 订阅输出
"encryption": "none"(此前输出空值导致 Xray 拒绝加载,#6781)。
- host 的 ECH 配置、证书 pin 与 verify name 现在能进入 JSON 订阅。
- Hysteria 分享链接补上 host 的服务器描述(与 VLESS/Trojan/Shadowsocks 一致,#6740)。
- REALITY 链接与由 X25519 密钥认证的 VLESS-encryption 链接恢复显示二维码;仅携带过大后量子密钥、无法扫描的链接隐藏二维码。
- TUIC / WireGuard / AmneziaWG:TUIC sniffing 保留客户端请求的 IP 目的地(#6753);TUIC 客户端恢复显示实时速度并修正证书按钮布局(#6723);AmneziaWG 超过隧道 MTU 的 UDP 回复会被分片(#6780);同时存在于 WireGuard 与 AmneziaWG inbound 的客户端获得独立的 WireGuard public key 与 keepalive(#6751)。
- 面板与设置:PostgreSQL 下节点流量同步与订阅抓取并发时面板不再挂起到重启;报表与 LDAP 同步计划接受标准五字段 crontab,无法解析的计划保存时被拒绝(避免任务静默不执行);attach/detach clients 弹窗首次打开即列出客户端(#6736);续期预览显示带 UTC 偏移的可读日期并把续期计数标注为估算;面板更新确认框确认后立即关闭;Toast 消息适配 dark/ultra-dark 主题;概览弹窗按钮在长翻译下换行。
- 安装与更新:更新时先跑数据库迁移再启动服务,避免升级加字段时以 "duplicate column" 停止服务(#6729);从面板更新时不再打开 SSL 菜单、不会为签发 IP 证书而停掉 x-ui、不会删除
/root/cert/ip 与 acme.sh 状态、也不会在 IP 提示上无限循环,后续打印的 URL 显示面板实际使用的 scheme。
- 性能:构建状态与报表输出的流量格式化做了更少工作、分配更少内存(#6790)。CI 现在用真实 master panel 与真实 node panel 端到端测试节点同步(admin-token 与 node-sync-token 两种注册方式)。修复了服务测试套件中一处 public-IP 查询引发的 data race(#6742)。
- 安全:随包发布的 systemd 单元对 panel 做沙箱化——只有自己的目录可写、减少 capabilities、限制 namespaces 与地址族、设置
UMask=0077,并在 systemd 239+ 上加入 @system-service seccomp 过滤器(#6718)。仓库的自动化 PR review 与 issue 分析工作流不再持有 write 或 OIDC token,PR 检出的代码无法铸造写令牌。SECURITY.md 增加无 GitHub 账号报告者的邮箱联系方式,并发布威胁模型。
Breaking Change / 升级前必须处理
- 需要手动操作(Action required):
- 多项节点修复运行在节点侧(原地客户端更新不断连、admin-token 节点应用 master push、托管 MASQUE inbound),旧版节点仍保持旧行为且会拒绝放置 MASQUE inbound —— 请升级每一个节点,而不只是 master。
- Xray-core v26.10.10 改为用内置 Mozilla 根证书而非操作系统证书库校验 outbound TLS —— 对任何由私有安装 CA 签名的出站服务器,需在该 outbound 的 TLS 设置中开启 Use system CA。
- JSON 订阅现在以
udphop mask 发送端口跳跃(需 Xray-core 26.9.9+),xdns mask 使用 names/addrs 形状(需 Xray-core 26.10.10+)—— 让端口跳跃或 xdns 用户把客户端更新到基于 Xray-core 26.10.10 或更新的构建。
- systemd 安装下服务已被沙箱化:
/usr、/boot、/etc、/home、/root 只读(只放行 panel 自己的 DB、bin 与 log 目录)—— 若 panel 或 Xray 需在这些树下其他位置写入,请在自己的 drop-in(/etc/systemd/system/x-ui.service.d/20-local.conf)中用 ReadWritePaths= 添加路径;修改 /etc/default/x-ui 中的 XUI_*_FOLDER 值后需重跑 update 以重新生成 drop-in。
- 自动完成、无需操作:首次启动时存量 xdns finalmask 被重写为
names/addrs;客户端侧配置中的 legacy quicParams.udpHop 变为 udphop mask(inbound 仍保留 udpHop 作为通告端口范围);每次重写只执行一次,失败会阻止 panel 启动。SS-2022 inbound 迁移到 2022-blake3-aes-256-gcm,方法不匹配的服务器 key 被替换。install.sh 与 update.sh 每次运行都会安装加固单元并从 XUI_* 目录重新生成 x-ui.service.d/10-xui-sandbox.conf;seccomp 过滤器只在 systemd 239+ 添加,旧版 systemd 会列出缺失的保护项;含空白的目录路径会被跳过并告警,刷新失败仅告警。无法解析的报表或 LDAP 同步计划回退到任务默认值并在日志中告警。PostgreSQL 18 只用于新建本地数据库,已有集群永不升级。
- 环境要求:Go 1.27.2 · Xray-core v26.10.10。
▸ Release Notes 英文原文(16313 字符)
## 🚀 MASQUE, XDRIVE, Xray-core v26.10.10 & Node Sync
- 🛰️ **MASQUE** — a new protocol and transport for inbounds and outbounds, and the WARP modal can now register WARP over MASQUE.
- ☁️ **XDRIVE transport** — tunnel traffic through files in Google Drive, a local folder or any templated HTTP storage API.
- ⚙️ **Xray-core v26.10.10** — Lua DNS and routing scripts, new TUN and finalmask options, and stored configs migrate to the new shapes on their own.
- 🔗 **Node sync** — master pushes reach every node, a reset node can no longer wipe the hub's clients, and client edits on node inbounds no longer drop connections.
- 🧱 **Configs that would stop Xray are refused** — Shadowsocks-2022 keys and ciphers, mask passwords and storage settings Xray cannot run are rejected when you save.
- 📡 **Port hopping restored** — Hysteria and XHTTP clients hop ports again through the `udphop` mask.
- 🛡️ **Sandboxed systemd service** — the panel now runs with a reduced capability set and read-only system directories.
- 🔄 **Safer updates** — the database migration finishes before the service starts, and an update no longer touches your TLS setup.
- 🐘 **PostgreSQL 18** — new local database installs get the current major version from the official PGDG repository.
---
## ⚠️ Before you upgrade
### Action required
- Several node fixes run on the node itself: in-place client updates (no dropped connections), applying master pushes on admin-token nodes, and hosting MASQUE inbounds. A node on an older release keeps the old behavior, and placing a MASQUE inbound on it is refused — **do this:** upgrade every node, not only the master.
- Xray-core v26.10.10 checks outbound TLS against its bundled Mozilla roots instead of the OS certificate store — **do this:** on any outbound to a server signed by a privately installed CA, turn on *Use system CA* in that outbound's TLS settings.
- JSON subscriptions now send port hopping as the `udphop` mask (needs Xray-core 26.9.9+) and xdns masks in the `names`/`addrs` shape (needs Xray-core 26.10.10+) — **do this:** ask users of port hopping or xdns to update their client apps to a build on Xray-core 26.10.10 or newer.
- On systemd installs the service is now sandboxed: `/usr`, `/boot`, `/etc`, `/home` and `/root` are read-only except the panel's own DB, bin and log folders — **do this:** if the panel or Xray must write anywhere else under those trees, add the path with `ReadWritePaths=` in your own drop-in (`/etc/systemd/system/x-ui.service.d/20-local.conf`). After you change an `XUI_*_FOLDER` value in `/etc/default/x-ui`, re-run the update so the generated drop-in picks it up.
### Automatic — no action needed
- At first start, stored xdns finalmasks are rewritten to `names`/`addrs`. Legacy `quicParams.udpHop` on client-side configs (hosts, the subscription's global finalmask, cached outbound subscriptions, template outbounds) becomes a `udphop` mask. Inbounds keep `udpHop` as the advertised port range. Each rewrite runs once, and a failure stops the panel from starting.
- Shadowsocks-2022 inbounds on `2022-blake3-chacha20-poly1305` move to `2022-blake3-aes-256-gcm`, and their 32-byte keys stay valid. Server keys of the wrong size for their method are replaced. Neither kind of inbound could start before. A failure stops the panel from starting.
- `install.sh` and `update.sh` install the hardened unit and regenerate `x-ui.service.d/10-xui-sandbox.conf` from your `XUI_*` folders on every run. The seccomp filter is added only on systemd 239 or newer, and on older systemd the scripts list the protections it lacks. A folder path containing whitespace is left out with a warning, and a failed refresh is only a warning.
- A stored report or LDAP sync schedule that no longer parses falls back to the job's default, with a warning in the log.
- PostgreSQL 18 applies only to new local databases. An existing cluster is never upgraded.
### Requirements
Go 1.27.2 · Xray-core v26.10.10
---
### 🔐 Security
- The shipped systemd units now sandbox the panel. Only its own folders are writable, its capabilities are reduced, namespaces and address families are restricted, `UMask=0077` is set, and a `@system-service` seccomp filter is added on systemd 239 or newer ([#6718](https://github.com/MHSanaei/3x-ui/pull/6718)) @ChesterFishmansWork
- The repository's automated PR-review and issue-analysis workflows no longer hold write or OIDC tokens, so code checked out from a pull request cannot mint a write token ([`9130f6dd`](https://github.com/MHSanaei/3x-ui/commit/9130f6dd), [`5939fda3`](https://github.com/MHSanaei/3x-ui/commit/5939fda3), [`53239285`](https://github.com/MHSanaei/3x-ui/commit/53239285))
### 🆕 New
- MASQUE inbounds and outbounds: CONNECT-IP over HTTP/3 or HTTP/2, always behind TLS. Clients sign in with their email and password, and the JSON subscription builds each client's MASQUE outbound. Share links and Clash skip MASQUE because it has no link format ([`b04039c2`](https://github.com/MHSanaei/3x-ui/commit/b04039c2), [`00aaef38`](https://github.com/MHSanaei/3x-ui/commit/00aaef38), [`c4b9b3f9`](https://github.com/MHSanaei/3x-ui/commit/c4b9b3f9))
- The WARP modal can register a WARP device over MASQUE and turn it into a ready `warp-masque` outbound. Your existing WireGuard registration is left untouched ([`04cccef3`](https://github.com/MHSanaei/3x-ui/commit/04cccef3))
- XDRIVE transport on inbounds and outbounds: tunnel a stream through files in Google Drive, a local folder or an HTTP storage API described by a template. XDRIVE outbounds can use TLS to front the storage API, and storage settings Xray cannot open are refused when you save ([`ca598359`](https://github.com/MHSanaei/3x-ui/commit/ca598359), [`c7d89cea`](https://github.com/MHSanaei/3x-ui/commit/c7d89cea), [`c5e1e54c`](https://github.com/MHSanaei/3x-ui/commit/c5e1e54c))
- Lua DNS and routing scripts: DNS gets a script field and a per-server ID, Basics gets a routing script field, and the Routing tab warns that rules are skipped while a script is set ([`b6c859f5`](https://github.com/MHSanaei/3x-ui/commit/b6c859f5), [`73a028f5`](https://github.com/MHSanaei/3x-ui/commit/73a028f5))
- TUN inbounds can set the Windows adapter type, point systemd-resolved at the TUN gateway on Linux, and block DNS leaks through WFP on Windows ([`ef4bda4e`](https://github.com/MHSanaei/3x-ui/commit/ef4bda4e))
- The finalmask editor now covers more of the format: header-custom variables and transforms, a TCP `errors` group, UDP prefix/standalone mode, the sudoku UDP mask, and noise reset ranges such as `60-120`. These keys used to be dropped on save ([`1c050f87`](https://github.com/MHSanaei/3x-ui/commit/1c050f87))
- Outbound TLS has a *Use system CA* switch for servers signed by a privately installed CA ([`73a028f5`](https://github.com/MHSanaei/3x-ui/commit/73a028f5))
- New local PostgreSQL installs get PostgreSQL 18 from the official PGDG repository. Where PGDG has no build, the distro package is used instead ([`c9207b6f`](https://github.com/MHSanaei/3x-ui/commit/c9207b6f))
### ⚡ Improved
- Xray-core updated to v26.10.10 ([`73a028f5`](https://github.com/MHSanaei/3x-ui/commit/73a028f5))
- Go 1.27.2 and refreshed Go dependencies, including fasthttp 1.75.0 ([`82c77111`](https://github.com/MHSanaei/3x-ui/commit/82c77111), [#6767](https://github.com/MHSanaei/3x-ui/pull/6767))
- Frontend and docs dependencies refreshed, and the npm audit findings cleared ([`d57dcf82`](https://github.com/MHSanaei/3x-ui/commit/d57dcf82), [`2e8af647`](https://github.com/MHSanaei/3x-ui/commit/2e8af647))
- The public subscription page uses the panel's own theme in light, dark and ultra-dark ([`fd6c5925`](https://github.com/MHSanaei/3x-ui/commit/fd6c5925))
- Traffic formatting does less work and allocates less memory when building status and report output ([#6790](https://github.com/MHSanaei/3x-ui/pull/6790)) @javi0guerrero4-cloud
- CI now tests node sync end to end with a real master panel and a real node panel, for both admin-token and node-sync-token enrollment ([`f843fe55`](https://github.com/MHSanaei/3x-ui/commit/f843fe55), [`dae91276`](https://github.com/MHSanaei/3x-ui/commit/dae91276))
- Fixed a data race in the service test suite, caused by a public-IP lookup that kept running after its test ended ([#6742](https://github.com/MHSanaei/3x-ui/pull/6742)) @AyaseEli-Bing
- SECURITY.md now names an email contact for reporters without a GitHub account, and the repository publishes a threat model ([`8fe7be94`](https://github.com/MHSanaei/3x-ui/commit/8fe7be94), [`eb498a3c`](https://github.com/MHSanaei/3x-ui/commit/eb498a3c))
### 🐞 Fixed
**Nodes**
- Clients attached, disabled or edited on the master now reach nodes enrolled with an admin token. An inbound deleted on the node is re-created by reconcile, which used to keep trying to update it ([`2ffc694a`](https://github.com/MHSanaei/3x-ui/commit/2ffc694a))
- A node that reports an empty client list (just reset, restarted or removed) no longer causes the hub to delete those clients. The hub pushes them back to the node ([#6734](https://github.com/MHSanaei/3x-ui/pull/6734)) @yukh975
- Renewing, resetting or auto-disabling a client on a node inbound now updates its users in place, so open connections on that port stay up. The inbound used to be rebuilt ([`44083338`](https://github.com/MHSanaei/3x-ui/commit/44083338))
- Masters enrolled with a node-sync token or mTLS can again set the subscription sort order, bulk-reset client traffic and read active inbounds on their nodes. These requests used to fail with 403 ([`5819a01c`](https://github.com/MHSanaei/3x-ui/commit/5819a01c))
- A client detached from a node inbound is no longer disabled on the master by the node's stale stats, and its old quota is no longer written back ([`dd956947`](https://github.com/MHSanaei/3x-ui/commit/dd956947))
- Client traffic history and quota usage survive when a node inbound is replaced under a new tag ([`6be3c438`](https://github.com/MHSanaei/3x-ui/commit/6be3c438))
**Xray config & inbounds**
- Shadowsocks-2022 inbounds no longer offer `2022-blake3-chacha20-poly1305`, which Xray cannot run with multiple users. Stored inbounds move to `2022-blake3-aes-256-gcm` ([`f1ed1a9b`](https://github.com/MHSanaei/3x-ui/commit/f1ed1a9b), [`c20082d2`](https://github.com/MHSanaei/3x-ui/commit/c20082d2))
- A Shadowsocks-2022 server key of the wrong size for its method is refused when you save. It used to stop Xray ([`b9e1d3af`](https://github.com/MHSanaei/3x-ui/commit/b9e1d3af))
- A salamander or gecko finalmask password shorter than 4 bytes is refused when you save and flagged in the editor. It used to stop Xray when the listener opened ([`0466e8b0`](https://github.com/MHSanaei/3x-ui/commit/0466e8b0))
- VLESS clients keep connecting after their inbound moves to a transport that cannot carry Vision. The Vision flow is now applied only where Xray runs it: TLS or REALITY on raw TCP, or VLESS encryption on any transport ([`c5e1e54c`](https://github.com/MHSanaei/3x-ui/commit/c5e1e54c))
- Balancer overrides set from the panel survive routing reloads and node tests. An override that points at an unknown or removed outbound is refused or cleared ([#6779](https://github.com/MHSanaei/3x-ui/pull/6779)) @AliKarami
- TLS ALPN defaults to `http/1.1` for the WebSocket transport, so the WebSocket handshake no longer fails when h2 is negotiated ([#6787](https://github.com/MHSanaei/3x-ui/pull/6787)) @HappyLeslieAlexander
- Port hopping works again for Hysteria and XHTTP (HTTP/3) outbounds and for JSON-subscription clients. The hop is written as the client `udphop` mask, kept on every endpoint, and placed last, where Xray requires it ([`ec0a57fc`](https://github.com/MHSanaei/3x-ui/commit/ec0a57fc), [`27e45f30`](https://github.com/MHSanaei/3x-ui/commit/27e45f30), [`6321297f`](https://github.com/MHSanaei/3x-ui/commit/6321297f))
**Subscriptions & links**
- JSON subscriptions emit `"encryption": "none"` for VLESS inbounds stored without that key. They used to emit an empty value, which Xray refuses to load ([#6781](https://github.com/MHSanaei/3x-ui/pull/6781)) @jayhemnani9910
- A host's ECH config, certificate pins and verify name now reach clients in the JSON subscription ([`66ef5bbc`](https://github.com/MHSanaei/3x-ui/commit/66ef5bbc))
- Hysteria share links now include the host's server description, as VLESS, Trojan and Shadowsocks links already did ([#6740](https://github.com/MHSanaei/3x-ui/pull/6740)) @AyaseEli-Bing
- QR codes are shown again for REALITY links and for VLESS-encryption links authenticated by an X25519 key. Only links that carry post-quantum keys too large to scan hide the QR code ([`d7da64f2`](https://github.com/MHSanaei/3x-ui/commit/d7da64f2))
**TUIC, WireGuard & AmneziaWG**
- TUIC sniffing keeps the IP destination the client asked for ([#6753](https://github.com/MHSanaei/3x-ui/pull/6753)) @libmur-dev
- TUIC clients show their live speed again, and the certificate buttons are laid out correctly ([#6723](https://github.com/MHSanaei/3x-ui/pull/6723)) @poise52
- AmneziaWG UDP replies larger than the tunnel MTU are now fragmented to fit it ([#6780](https://github.com/MHSanaei/3x-ui/pull/6780)) @mrdarkerr
- A client on both a WireGuard and an AmneziaWG inbound now gets its own WireGuard public key and keepalive on the WireGuard peer ([#6751](https://github.com/MHSanaei/3x-ui/pull/6751)) @mvanhorn
**Panel & settings**
- On PostgreSQL, the panel no longer hangs until restart when node traffic sync runs at the same time as subscription fetches ([`b5a04ea9`](https://github.com/MHSanaei/3x-ui/commit/b5a04ea9))
- Report and LDAP sync schedules accept a standard five-field crontab. A schedule that cannot be parsed is refused when you save, so the job no longer silently never runs ([`b124af2a`](https://github.com/MHSanaei/3x-ui/commit/b124af2a))
- The attach and detach clients modals list the clients the first time they open ([#6736](https://github.com/MHSanaei/3x-ui/pull/6736)) @drakeo338
- The renewal preview shows readable dates with their UTC offset and labels its renewal count as an estimate, and the renewal form layout and mode help are clearer ([#6662](https://github.com/MHSanaei/3x-ui/pull/6662), [#6672](https://github.com/MHSanaei/3x-ui/pull/6672)) @JacktheRanger
- The panel-update confirmation closes as soon as you confirm, so it no longer dims the progress indicator ([#6766](https://github.com/MHSanaei/3x-ui/pull/6766)) @libmur-dev
- Toast messages follow the dark and ultra-dark themes ([`d1b60799`](https://github.com/MHSanaei/3x-ui/commit/d1b60799))
- Action buttons in the overview modals wrap to a new line instead of spilling out with longer translations ([`49fbcdc0`](https://github.com/MHSanaei/3x-ui/commit/49fbcdc0))
**Install & update**
- An update now runs the database migration before starting the service. An upgrade that adds schema no longer stops the service with "duplicate column" ([#6729](https://github.com/MHSanaei/3x-ui/pull/6729)) @mrnickson-hue
- Updating from the panel no longer opens the SSL menu. It used to stop x-ui to issue an IP certificate, could delete `/root/cert/ip` and the acme.sh state, or loop forever on an IP prompt. The URL printed afterwards shows the scheme the panel actually serves ([`257559c3`](https://github.com/MHSanaei/3x-ui/commit/257559c3))
---
### Reports

### New Contributors
* @drakeo338 made their first contribution in https://github.com/MHSanaei/3x-ui/pull/6736
* @AyaseEli-Bing made their first contribution in https://github.com/MHSanaei/3x-ui/pull/6740
* @AliKarami made their first contribution in https://github.com/MHSanaei/3x-ui/pull/6779
* @mrdarkerr made their first contribution in https://github.com/MHSanaei/3x-ui/pull/6780
* @jayhemnani9910 made their first contribution in https://github.com/MHSanaei/3x-ui/pull/6781
* @HappyLeslieAlexander made their first contribution in https://github.com/MHSanaei/3x-ui/pull/6787
* @javi0guerrero4-cloud made their first contribution in https://github.com/MHSanaei/3x-ui/pull/6790
**Full Changelog**: https://github.com/MHSanaei/3x-ui/compare/v3.9.0...v3.10.0