Describe the bug
The VLESS+XHTTP line in the plain/universal subscription (base64 list of URIs) duplicates fields both as flat query params and inside a raw JSON blob in extra:
vless://@host:443?alpn=h2%2Chttp%2F1.1&extra=%7B%22mode%22%3A%22packet-up%22%2C%22xPaddingBytes%22%3A%22100-1000%22%7D&fp=firefox&host=host&mode=packet-up&path=%2F...&security=tls&type=xhttp&x_padding_bytes=100-1000
extra (and the duplicated mode/x_padding_bytes) are not part of any documented VLESS/XHTTP URI convention. Third-party parsers (mihomo, subconverter) either drop this node or fail entirely on it. This appears related to #4347 (Clash/Mihomo subscription returns Error! for XHTTP), but affects the raw/universal subscription output as well, not only the dedicated /clash/ endpoint.
How to reproduce the problem
- Create a VLESS inbound with XHTTP transport (mode packet-up), TLS enabled.
- Add a client, enable subscription.
- Fetch the plain subscription URL and base64-decode it.
- Feed the decoded VLESS+XHTTP line to mihomo (as a proxy-provider) or to a subconverter instance — parsing fails / node is dropped.
Expected behavior
Only emit the standard, documented XHTTP query params (mode, path, host, extra padding settings as flat params if needed) without the redundant raw extra JSON blob, so third-party clients can parse the link.
Related issue = 4347
Actual behavior
No response
Relevant logs
Screenshots
No response
3x-ui version
3.5.0
Xray-core version
26.7.11
How did you install 3x-ui?
install.sh script
Operating system
Ubuntu 24.04
Which parts of the panel are affected?
Subscription (share links / Clash / JSON)
Browser (only if it is a UI bug)
No response
Is the panel behind a reverse proxy or CDN?
Yes — Nginx
Before submitting
Describe the bug
The VLESS+XHTTP line in the plain/universal subscription (base64 list of URIs) duplicates fields both as flat query params and inside a raw JSON blob in
extra:vless://@host:443?alpn=h2%2Chttp%2F1.1&extra=%7B%22mode%22%3A%22packet-up%22%2C%22xPaddingBytes%22%3A%22100-1000%22%7D&fp=firefox&host=host&mode=packet-up&path=%2F...&security=tls&type=xhttp&x_padding_bytes=100-1000
extra(and the duplicatedmode/x_padding_bytes) are not part of any documented VLESS/XHTTP URI convention. Third-party parsers (mihomo, subconverter) either drop this node or fail entirely on it. This appears related to #4347 (Clash/Mihomo subscription returns Error! for XHTTP), but affects the raw/universal subscription output as well, not only the dedicated /clash/ endpoint.How to reproduce the problem
Expected behavior
Only emit the standard, documented XHTTP query params (mode, path, host, extra padding settings as flat params if needed) without the redundant raw
extraJSON blob, so third-party clients can parse the link.Related issue = 4347
Actual behavior
No response
Relevant logs
Screenshots
No response
3x-ui version
3.5.0
Xray-core version
26.7.11
How did you install 3x-ui?
install.sh script
Operating system
Ubuntu 24.04
Which parts of the panel are affected?
Subscription (share links / Clash / JSON)
Browser (only if it is a UI bug)
No response
Is the panel behind a reverse proxy or CDN?
Yes — Nginx
Before submitting