Skip to content

Config Converter

Paste a configuration on the left, pick the source and target formats, and read the converted output on the right. Conversion is best-effort: every field that cannot be mapped cleanly to the target surfaces as a warning below the editors. The matching field-by-field rationale lives in the migration cookbook.

Config Converter

Paste a configuration on the left, choose source and target formats, and read the converted output on the right. Conversions are best-effort — features without a clean equivalent show up as warnings below.

SourceEmpty0 lines · 0 chars
Target
Warnings (0)
  • No warnings.

What's supported

  • Protocols: VLESS, VMess, Trojan, Shadowsocks (incl. 2022 ciphers), Hysteria / Hysteria2, TUIC, WireGuard, HTTP, SOCKS, plus the Direct / Block / DNS specials and the Selector / URL-test / Fallback / Load-balance proxy groups.
  • Transports: TCP, WebSocket (with ?ed= early-data lifting), HTTP/2, gRPC, HTTPUpgrade, QUIC, and xHTTP (preserved where the target understands it).
  • Security: TLS, uTLS fingerprint, REALITY, ECH.
  • Routing: domain / IP-CIDR / GEOIP / GEOSITE / port / process / network rules across all three vocabularies. mihomo's compact rule strings round-trip faithfully through the converter's parser.
  • DNS: typed server URLs (udp / tcp / tls / https / quic / h3 / fakeip / local) and mihomo's nameserver-policy map.

What's intentionally lossy

  • Each core has features the other two cannot express: Xray's policy / observatory / metrics, mihomo's tun / sniffer / iptables and rule-providers, sing-box's endpoints / experimental.clash_api. Those fields are preserved when the source and target are the same core (so a xray → xray round-trip is near-lossless), but are dropped on cross-emit with a CORE_SPECIFIC_PRESERVED info-level note.
  • Xray-core has no Hysteria2 outbound; converting a sing-box / mihomo Hysteria2 outbound into Xray emits PROTOCOL_UNSUPPORTED_BY_TARGET and drops the entry.
  • Plugins (e.g. mihomo's plugin: shadow-tls or Shadowsocks plugin sub-blocks) are passed through as opaque strings; their internal schema is not understood.

Sharing a session

Use the Share link button: the URL gets ?src=…&tgt=…&body=… (body is URL-safe base64) so you can paste it into a chat or bookmark a particular test case. Bodies over ~8 KB are omitted from the link with a notice.

Core Tutorial by Argsment