Protocol Support Roadmap

June 22, 2026 ยท View on GitHub

This document tracks the protocol and transport scope for the next flutter_vless release. The source of truth for Xray capability is the current Project X configuration documentation:

Product Scope

flutter_vless is a client runtime wrapper. The default generated config should keep using a local SOCKS inbound and a remote proxy outbound. We should support importing every client-facing Xray outbound profile that can represent a remote server. Service outbounds and inbounds remain raw JSON / advanced-builder scope.

Xray Outbound Inventory

Xray outboundCurrent supportNext action
vlessSupported from share links, Clash YAML, sing-box JSON, raw Xray JSONKeep; expand transport coverage below.
vmessSupported from share links, Clash YAML, sing-box JSON, raw Xray JSONKeep; expand transport coverage below.
trojanSupported from share links, Clash YAML, sing-box JSON, raw Xray JSONKeep; expand transport coverage below.
shadowsocksSupported from ss://, Clash YAML, sing-box JSON, raw Xray JSONKeep; add fixture coverage for all commonly exported ciphers.
socksSupported from socks://, Clash YAML, sing-box JSON, raw Xray JSONKeep.
wireguardRaw Xray JSON plus generated import from Clash YAML and sing-box JSONValidate Android, iOS, macOS, and Windows artifacts with xray run -test; no public wireguard:// parser until an accepted share-link shape is chosen.
hysteria (version: 2)Raw Xray JSON plus hysteria2:// / hy2://, Clash YAML, and sing-box JSON importValidate Android, iOS, macOS, and Windows artifacts with xray run -test; update packaged artifacts where older Xray builds reject network: hysteria.
httpRaw Xray JSON plus generated import from Clash YAML and sing-box JSONKeep subscription/import-context only. Do not treat arbitrary browser http:// URLs as proxy profiles.
freedomInternal direct outbound and raw Xray JSONKeep advanced/raw only. It is routing policy, not a remote server profile.
blackholeInternal block outbound and raw Xray JSONKeep advanced/raw only. It is routing policy, not a remote server profile.
dnsRaw Xray JSON onlyKeep advanced/raw only.
loopbackRaw Xray JSON onlyKeep advanced/raw only.

Xray Inbound Inventory

The plugin-owned default inbound remains local SOCKS because packet-tunnel and proxy-only paths already depend on it.

Xray inboundProduct decision
socksSupported as the generated local inbound.
httpAdvanced/raw only unless we add a separate local HTTP proxy mode.
dokodemo-door / tunnelAdvanced/raw only.
vless, vmess, trojan, shadowsocks, wireguard, hysteria, tunAdvanced/raw only for now; these are server/runtime composition features, not default client profile import targets.

Transport Inventory

These transports should be importable for vless, vmess, and trojan where the protocol supports them.

TransportCurrent supportNext action
rawtype=raw import emits rawSettings; legacy type=tcp remains supportedValidate generated configs against the target Xray artifact.
xhttpSupported for VLESS and subscription importsKeep; add more Clash/sing-box fixture variants.
grpcSupportedKeep.
websocket / wsSupportedKeep.
mkcp / kcpkcp and mkcp aliases are normalized for subscription importValidate generated configs against the target Xray artifact.
httpupgradeSupported from share links, Clash YAML, and sing-box JSON; preserves non-Host headersValidate generated configs against the target Xray artifact.
hysteriaGenerated by Hysteria2 import pathsValidate native artifacts first.
quicLegacy code path exists, but it is removed in current Project X transport configKeep only as legacy input compatibility for older artifacts; do not expand without target-version tests.

Transport security remains tls, reality, and none. FinalMask and sockopt are advanced/raw config features.

Implementation Order

  1. Runtime artifact audit. Build or update Android, iOS, macOS, and Windows Xray artifacts to the same pinned Xray version. For every artifact, run xray run -test fixtures for wireguard, hysteria, httpupgrade, raw, xhttp, grpc, ws, kcp, and legacy quic.

  2. Config model foundation. Done in Dart. Keep raw Xray JSON passthrough unchanged. Add missing typed stream settings: rawSettings, httpupgradeSettings, and hysteriaSettings.

  3. HTTPUpgrade transport. Parser foundation done in Dart. Add type=httpupgrade parsing for VLESS, VMess, Trojan, Clash YAML, and sing-box JSON. Generate streamSettings.network = "httpupgrade" and httpupgradeSettings with path, host, and optional headers.

  4. Modern RAW transport alias. Parser foundation done in Dart. Accept type=raw alongside legacy type=tcp. Emit rawSettings for raw and keep existing tcpSettings behavior for tcp.

  5. WireGuard outbound import. Clash YAML and sing-box JSON foundation done in Dart. Public wireguard:// remains out of scope until an accepted share-link shape is chosen. Minimum fields: secretKey, address[], peers[].endpoint, peers[].publicKey, optional reserved, mtu, workers, domainStrategy, noKernelTun.

  6. Hysteria2 outbound import. Share-link, Clash YAML, and sing-box JSON foundation done in Dart. Generated configs use protocol: "hysteria", settings.version = 2, server address/port, streamSettings.network = "hysteria", hysteriaSettings.version = 2, and hysteriaSettings.auth.

  7. HTTP proxy outbound import. Done for Clash YAML and sing-box JSON. Keep the import scoped to subscription/import context. Do not add parseFromURL() support for arbitrary http:// browser URLs unless the product gets an explicit proxy-link format that cannot be confused with web navigation.

  8. Documentation and device matrix. Extend doc/device_matrix.md with WireGuard, Hysteria2, HTTPUpgrade, raw, and HTTP proxy cases. Mark platform limitations explicitly, especially UDP behavior in Apple packet tunnels and Windows tunnel mode.

Definition Of Done

  • Parser fixtures cover share links, Clash YAML, sing-box JSON, and raw Xray JSON for each supported profile class.
  • xray run -test succeeds for generated JSON on every packaged Xray artifact.
  • At least one real-device tunnel or proxy-only smoke test exists for every new client-facing protocol: WireGuard, Hysteria2, HTTPUpgrade, and HTTP proxy.
  • Unsupported formats are skipped with tests; they must not produce broken Xray JSON silently.