[v0.8.8] - 2026-10-08
🚀 Features & Enhancements
- Bulk Client Inbound Link Management:
- Added multi-select batch assignment (
bulkSetLinks) allowing administrators to select multiple clients and associate or replace inbound links simultaneously (04d72ea2). - Added batch link management drawer and bulk action menu integration in the Clients view (
/panel/clients).
- Added multi-select batch assignment (
- Encrypted Client Hello (ECH) Generation & Propagation:
- Implemented automatic ECH certificate and keypair generation for TLS/Reality inbounds (
11b5d963). - Automatically propagated generated ECH configurations into outbound settings and subscription endpoints.
- Implemented automatic ECH certificate and keypair generation for TLS/Reality inbounds (
- REST API Reference Updates (
API.md):- Corrected
POST /panel/api/clients/bulkCreatepayload specifications to accurately document{ clients: [...], inboundIds: [...] }. - Added documentation for
POST /panel/api/clients/bulkSetLinks, client traffic reset endpoints, and depleted client deletion endpoints.
- Corrected
🐛 Bug Fixes & Stability
- Inbound Deletion Client & Link Preservation:
- Preserved client traffic statistics and existing link bindings when deleting an individual inbound (
10a27e13). Clients linked to multiple inbounds retain active records and traffic counters without unintended cascading deletions.
- Preserved client traffic statistics and existing link bindings when deleting an individual inbound (
- SQLite Concurrency & Traffic Reset Locks:
- Fixed intermittent
database is lockederrors during client traffic reset operations by synchronizing write queries withnodeClientOpMutexand atomic database transactions. - Separated external gRPC / Xray API calls from the SQLite transaction window to minimize database write lock hold times.
- Fixed client modal reset button endpoint resolution to prevent malformed API requests when
inboundIdis omitted.
- Fixed intermittent
- Depleted Client Deletion via API:
- Resolved issue where API requests (
/panel/api/inbounds/delDepletedClients/:idand/panel/api/clients/delDepleted) failed to delete depleted node clients. - Removed restrictive
node_client_id IS NULLfiltering inDelDepletedClients, cascading removal to associated inbound settings JSON, node client links, and orphaned node client records. - Removed nested
s.DelInboundcalls inside open transactions to prevent database deadlocks.
- Resolved issue where API requests (
- "Obtain Failed: record not found" Toast Elimination:
- Handled
gorm.ErrRecordNotFoundgracefully in inbound controller methods (getInboundandgetInbounds), returning clean empty responses and eliminating toast error popups on stale or missing records. - Preloaded
ClientStatsinGetInboundto ensure full client traffic statistics are immediately available on single inbound queries.
- Handled
- Total GB Input & Formatting:
- Fixed
[[ client._totalGB + "GB" ]]displaying"undefinedGB"on plain client objects in inbound client tables by formatting withsizeFormat(client.totalGB). - Fixed Vue 2 reactivity when opening client edit modals by initializing
_totalGBinsideObject.assign. - Added
:precision="2"andv-model.numberto total GB inputs across client modals, preventing backspace from snapping directly to0. - Safeguarded
Inbound.ClientBase._totalGBgetter and setter againstNaNandnullvalues with integer byte rounding on save.
- Fixed
- Clean Theme Session Synchronization:
- Fixed hybrid light/dark theme collision occurring on new browser sessions where
localStoragewas uninitialized. - Standardized fallback theme to dark mode across both
head.htmlandthemeSwitch.html. - Synchronized
.darkand.lightclasses simultaneously acrossdocument.documentElement,document.body, and#appboth on initialization and during theme toggle.
- Fixed hybrid light/dark theme collision occurring on new browser sessions where
⚡ Performance & Database Optimization
- Batch Traffic Aggregation for Depleted Client Queries:
- Optimized
NodeClientService.DeleteDepletedby replacing the O(N) query loop with a single grouped aggregate SQL query, eliminating N+1 database queries.
- Optimized
- Optimized Link Counter Scans:
- Removed unnecessary join on
inboundsinGetLinkedInboundsCounts, directly queryingnode_client_linkswith indexed group scanning.
- Removed unnecessary join on
- Bulk Operation Mutex Protection:
- Guarded bulk client linking and deletion operations with
nodeClientOpMutexto prevent concurrent transaction collision (9c02e220).
- Guarded bulk client linking and deletion operations with