Local configuration tool
VLESS to Xray JSON
Produces the vnext/streamSettings structure Xray-core expects, including realitySettings.
Conversion happens entirely in your browser. Links are not uploaded, saved, or placed in the page URL.
Conversion result
Why some links are rejected
A parameter that cannot be mapped without changing how the connection behaves is reported rather than dropped. Xray-core speaks none of the QUIC-native protocols, so Hysteria2 and TUIC links are refused outright rather than reshaped into something that merely looks close. Certificate pinning and the post-2024 REALITY fields are refused for the same reason.
How to import into Xray or v2rayN
Xray-core reads this JSON directly as its config file. Note that Xray uses the first outbound as the active node — with several nodes in one file, switching means editing routing rather than clicking a selector.
How VLESS fields map to Xray
What this converter actually does, line by line. On the left is how it is written in a VLESS link; on the right is the field it becomes in the Xray config.
| In the link | In the Xray config | Notes |
|---|---|---|
uuid@host:port | settings.vnext[].users[].id | The part before @ is the UUID; anything that is not a valid UUID is rejected. |
security=tls | streamSettings.security: "tls" | Without security=tls the link is treated as plaintext and the TLS-only parameters below are rejected. |
security=reality + pbk / sid | realitySettings.publicKey / shortId | sid must be hex of even length, 16 characters at most. |
sni | realitySettings.serverName / tlsSettings.serverName | Falls back to the server address when absent. Each client spells it differently: servername in Mihomo, server_name in sing-box, serverName in Xray. |
fp | tlsSettings.fingerprint | Defaults to chrome. An unrecognised fingerprint is an error, not a silent fallback. |
alpn | tlsSettings.alpn | Comma-separated in the link, an array in every target format. |
flow=xtls-rprx-vision | settings.vnext[].users[].flow | Passed through as-is. It only means anything over TCP with TLS or REALITY. |
type=ws + path / host | streamSettings.wsSettings | host becomes the Host header. ed and eh become max-early-data and early-data-header-name. |
type=grpc + serviceName | grpcSettings.serviceName | gun mode only; mode=multi is rejected. |
type=h2 / type=http | Rejected with an error | Xray has removed the HTTP/2 transport, so that target refuses the line instead of rewriting it as XHTTP — a different protocol on the wire. |
type=xhttp | streamSettings.xhttpSettings | Mihomo needs 1.19 or newer and Xray needs 24.11 or newer; sing-box has no XHTTP transport at all, so that target rejects the line. |
type=httpupgrade | streamSettings.httpupgradeSettings | Mihomo models HTTPUpgrade as a flag on WebSocket; the other two make it its own transport type. |
allowInsecure=1 | Rejected with an error | Converted with a warning — turning certificate checks off gives up protection against interception. Xray removed the option in favour of certificate pinning, so that target refuses the link. |
pqv / spx / pcs / vcn / ech | Rejected with an error | REALITY fields added after 2024 that have no faithful equivalent yet — reported rather than dropped. |
FAQ
- Which client do I use after converting VLESS to Xray?
- Use Xray-core 1.8.16 or newer, or an Xray-based client such as v2rayN or v2rayNG. Note that Xray treats the first outbound as the active node; switching between several is a routing change.
- Is this VLESS converter free, and does it upload my node links?
- It is free and needs no account. The conversion is done by JavaScript inside this page, on your own machine: links are never uploaded, never written into the page URL, and never stored. Closing the tab is all the cleanup there is.
- Can I convert a subscription link straight to Xray?
- Yes, but paste the body the subscription URL returns — usually one long base64 string — rather than the URL itself, which the browser cannot fetch across origins. Mixed protocols in one subscription are fine.
- The Xray config converted fine but will not connect — what now?
- This page only translates links into a config: it checks the structure, never whether the server is reachable. Confirm the same link works in the client you copied it from, then check the client version — the XHTTP transport needs Xray 24.11 or newer.
This creates a one-time local configuration, not an auto-updating subscription. It checks configuration structure, not whether a server is reachable.