Skip to content

v0.9.0

Choose a tag to compare

@github-actions github-actions released this 12 Oct 20:17
· 15 commits to main since this release

[v0.9.0] - 2026-10-12

馃殌 Features & Enhancements

  • Hysteria UDP FinalMask Support:
    • Added FinalMask transport stream configuration support for Hysteria inbounds (stream_settings.html).
    • Dynamically configured the FinalMask interface to display supported UDP masks (salamander, udpHop, sudoku, noise, header-custom) while hiding TCP-specific masks for Hysteria streams (stream_finalmask.html).
  • Hysteria Proxy Masquerade Enhancements:
    • Added X-Forwarded header switch to Hysteria masquerade settings in inbound configuration form (stream_hysteria.html).
    • Added xForwarded property and serialization support to HysteriaMasquerade model (inbound.js).
  • Comprehensive Hysteria 2 Subscription Links (hysteria2://):
    • Implemented complete Hysteria 2 subscription link generation across Go backend (subService.go) and Web UI (inbound.js).
    • Salamander Obfuscation: Automatically parses salamander UDP FinalMask into standard obfs=salamander&obfs-password=<password> query parameters.
    • Port Hopping (mport): Automatically extracts multi-port hopping ranges from udpHop UDP FinalMask or hysteriaSettings.udphop into the mport parameter.
    • Insecure TLS Support: Appends insecure=1 parameter when allowInsecure is enabled in TLS settings.
    • External Proxies: Added multi-node link generation for Hysteria when externalProxy endpoints are defined.
    • JSON Subscription Outbounds: Preserved finalmask stream settings on Hysteria outbounds in subJsonService.go and provided fallback auth extraction.

馃悰 Bug Fixes & Stability

  • Separation of Manually Disabled Clients from Ended (Depleted) Status:
    • Fixed client status categorization in getClientCounts (inbounds.html) so manually disabled clients (!client.enable) are strictly tracked under "Disabled" (deactive) and no longer appear in the "Ended" (depleted) popover and badge count.
    • Filtered out deactive client emails from depleted and expiring sets in the inbounds page total() computed summary.
    • Extended inbound protocol check in setInbounds (inbounds.html) to support client counters for HYSTERIA, WIREGUARD, and MASQUE inbounds.
    • Fixed DelDepletedClients and GetDepletedClients (inbound.go) to prevent manually disabled clients with remaining quota and valid expiry dates from being matched as depleted (reset = 0 AND ((expiry_time > 0 AND expiry_time <= now) OR (total > 0 AND (up + down) >= total))), preventing accidental deletion when deleting depleted clients.
    • Guarded client status badges and the depleted filter status in clients.html with c.enable && isDepletedOrExpired(c) to maintain consistent status display across all panel pages.
  • Hysteria Client Indexing & Actions:
    • Fixed client indexing in findIndexOfClient (inbounds.html) by identifying Hysteria clients via auth and email instead of non-existent UUID id.
    • Added Auth credential row display in client information modal (inbound_info_modal.html).
  • Node Client Service Hysteria Authentication:
    • Handled nc.Auth mapping with fallback to nc.Password or randomly generated credentials when attaching clients to Hysteria inbounds in node_client.go.
  • Nil Safety in Subscription Services:
    • Ensured safe default initialization of SubService in NewSubJsonService and guarded genRemark against nil receiver dereferences.