You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Client HWID & Device Model Tracking via Subscription:
Implemented automatic extraction and recording of client device Hardware ID (HWID), device/phone model, operating system, and proxy client application from subscription requests.
Android Devices: Accurately parses Samsung Galaxy model numbers (e.g., SM-S928B → Samsung Galaxy S24 Ultra), Google Pixel series, Xiaomi, Redmi, POCO, OnePlus, and Android OS versions.
Desktop Platforms: Distinguishes Windows PC (Windows 10/11, etc.), macOS (Intel & Apple Silicon), and Linux.
Client Applications: Built-in support for V2Box, Streisand, Throne, Happ/HappProxy, v2rayNG, Exclave, Hiddify/HiddifyNext, Shadowrocket, Sing-box (SFA/SFM/SFW), Clash/ClashMeta/Clash Verge/FlClash/Stash, NekoBox/NekoRay, Surge, Loon, Quantumult X, Karing, FoXray, and a generic <AppName>/<Version> fallback.
Database Persistence: Extended model.NodeClient with device metadata and created model.ClientDevice table for retaining multi-device session history with automatic GORM SQLite migration.
REST API Endpoints: Added GET /panel/api/clients/:id/devices and POST /panel/api/clients/:id/clearDevices.
Modern Device & Subscription UI in Client Detail Modal:
Built a modern 2×2 Bento Grid layout for the Client Detail Modal:
Device Model Card: Prominently shows detected or reported device model (or clean None status).
Device HWID Card: Features a compact code pill for the hardware ID with a one-click copy button.
Client App & OS Card: Displays styled pill badges for client application and operating system.
Last Subscription Sync Card: Shows formatted sync timestamp alongside an IP pill badge.
Theme-aware vector SVG icons eliminating missing font square glyphs across all operating systems and browsers.
Connected devices history table displaying each device's model, app/OS, IP, HWID (with copy button), and last seen timestamp.
Clear Devices action with instant UI state reset and confirmation toast.
Client search filter upgraded to search by deviceModel and deviceHwid.
🐛 Bug Fixes & Refinements
Connected Devices Deduplication & Consolidation:
Fixed duplicate device entries in the connected devices list caused by IP changes, cellular/Wi-Fi transitions, and app updates.
Implemented multi-tier device deduplication (DeduplicateDevices and MatchesDeviceInfo) prioritizing HWID, specific hardware model, client app family, and OS.
Added automatic database duplicate pruning during subscription check-ins to cleanly consolidate historical records.
Client Detail Modal UI Cleanup:
Removed subscription URL device parameter hint banner (deviceParamHint) to streamline the client detail interface.
mKCP & QUIC Congestion Localization:
Fixed Failed to localize message: message "pages.inbounds.stream.kcp.congestion" not found in language by defining pages.inbounds.stream.kcp.congestion and pages.inbounds.stream.finalmask.congestion across all 13 supported languages (en_US, zh_CN, zh_TW, fa_IR, ru_RU, uk_UA, tr_TR, pt_BR, es_ES, ja_JP, vi_VN, id_ID, ar_EG).
Localized Congestion switches in mKCP inbound form (stream_kcp.html) and outbound stream settings (outbound.html).
Inbound & Client Creation Separation:
Adding an inbound now defaults to 0 clients without creating dummy or random users, enforcing clean separation between inbound management and client management.
Protocol templates (VLESS, VMess, Trojan, Shadowsocks, WireGuard, Hysteria, MASQUE) updated to initialize with empty client arrays.
Inbounds table now displays an orange "Add Client" badge when an inbound has 0 clients.
Added "Add Client" and "Add Bulk" row menu actions directly in the inbounds table.
Updated client deletion logic to permit deleting the last client of an inbound.
Guarded link and subscription QR exports with warning toasts when an inbound has no clients.
Implemented validation for Shadowsocks-2022 multi-user passwords and single-user keys (2022-blake3-aes-128-gcm, 2022-blake3-aes-256-gcm, 2022-blake3-chacha20-poly1305) adhering to base64 length constraints.
Synchronized FinalMask transport stream configuration fields across inbounds (stream_finalmask.html, stream_finalmask_fields.html), outbounds, and database inbound models.
Added Cloudflare WARP MASQUE transport stream settings and modal generation.
Added Mojang Minecraft server profile generator service for authentic masquerade configurations.
Xray-core Alignment (v26.9.9 to v26.10.10 and Latest Main Commit):
Upgraded core dependency to latest xray-core (0f3d884786f9 / v26.10.10 release) alongside updated reality (83f621788ca8), gopher-lua, and x509roots/fallback modules in go.mod and vendor/.
Updated default Xray-core download URLs in DockerInit.sh and release workflow (release.yml) from v26.9.30 to v26.10.10.
TLS Built-in RootCAs & useSystemCA Control:
Aligned with Xray-core's default behavior of using built-in Mozilla RootCAs to protect against maliciously injected root certificates in the OS.
Added useSystemCA toggle switch across Inbound TLS settings (tls_settings.html) and Outbound TLS settings (outbound.html).
Added serialization and state management in both inbound and outbound TLS stream models (inbound.js, outbound.js).
Lua Script Support for Dynamic Routing & DNS:
Integrated Lua script execution panels for both Routing and DNS in Xray template settings (xray.html).
Added routingScript and dnsScript computed bindings for full bidirectional template serialization.
Added Server ID (id) input to the DNS server modal (dns_modal.html), allowing DNS servers to be easily referenced from Lua resolution scripts.
Noise FinalMask Lua Script Support:
Added Lua script field to Noise FinalMask stream settings across inbounds (stream_finalmask.html), outbounds (outbound.html), and frontend models (inbound.js, outbound.js).