Local configuration tool
VLESS to Clash / Mihomo YAML
Handles REALITY, XTLS Vision flow, and the WebSocket, gRPC, XHTTP and HTTPUpgrade transports.
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. For a Mihomo config that means certificate pinning, TUIC v4 tokens, and uTLS fingerprints on the QUIC-native protocols, where a handshake has nowhere to put one. A silently weakened config is worse than a rejected line.
How to import into Clash Verge Rev
Profiles → new Local profile → pick the downloaded YAML. Clash Verge Rev, Mihomo and ClashX Meta all read the same file; original Clash and Clash Premium do not.
How VLESS fields map to Clash
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 Clash config.
| In the link | In the Clash config | Notes |
|---|---|---|
uuid@host:port | uuid / server / port | The part before @ is the UUID; anything that is not a valid UUID is rejected. |
security=tls | tls: true | Without security=tls the link is treated as plaintext and the TLS-only parameters below are rejected. |
security=reality + pbk / sid | reality-opts.public-key / short-id | sid must be hex of even length, 16 characters at most. |
sni | 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 | client-fingerprint | Defaults to chrome. An unrecognised fingerprint is an error, not a silent fallback. |
alpn | alpn | Comma-separated in the link, an array in every target format. |
flow=xtls-rprx-vision | flow | Passed through as-is. It only means anything over TCP with TLS or REALITY. |
type=ws + path / host | network: ws + ws-opts | host becomes the Host header. ed and eh become max-early-data and early-data-header-name. |
type=grpc + serviceName | grpc-opts.grpc-service-name | gun mode only; mode=multi is rejected. |
type=h2 / type=http | network: h2 + h2-opts | 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 | network: xhttp + xhttp-opts | 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 | network: ws + v2ray-http-upgrade: true | Mihomo models HTTPUpgrade as a flag on WebSocket; the other two make it its own transport type. |
allowInsecure=1 | skip-cert-verify: true | 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. |
packetEncoding | packet-encoding | packet-encoding and packetEncoding are accepted as the same parameter. |
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 Clash?
- Use Clash Verge Rev, Mihomo (Clash.Meta) or ClashX Meta. Original Clash and Clash Premium do not support VLESS at all — importing this config there leaves you with a node that never connects.
- 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 Clash?
- 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. Subscription to Clash converter
- The Clash 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 Mihomo 1.19 or newer.
This creates a one-time local configuration, not an auto-updating subscription. It checks configuration structure, not whether a server is reachable.