XTLS/Xray-core · error
VLESS users: "flow" doesn't support "{account.Flow}" in this
Error message
VLESS users: "flow" doesn't support "{account.Flow}" in this version What it means
Thrown by VLessOutboundConfig.Build() after parsing a user when account.Flow is not one of the supported values. This build only accepts "" (no flow), vless.XRV ("xtls-rprx-vision") and "xtls-rprx-vision-udp443". Legacy flows from older Xray/V2Ray releases — xtls-rprx-origin, xtls-rprx-direct, xtls-rprx-splice — were removed and now trigger this error.
Source
Thrown at infra/conf/vless.go:330
if err := json.Unmarshal(rawUser, account); err != nil {
return nil, errors.New(`VLESS users: invalid user`).Base(err)
}
if account.Reverse != nil { // may not be reached: error json unmarshal
return nil, errors.New(`VLESS users: please use simplified outbound's config style to use "reverse"`)
}
}
u, err := uuid.ParseString(account.Id)
if err != nil {
return nil, err
}
account.Id = u.String()
switch account.Flow {
case "":
case vless.XRV, vless.XRV + "-udp443":
default:
return nil, errors.New(`VLESS users: "flow" doesn't support "` + account.Flow + `" in this version`)
}
if !func() bool {
s := strings.Split(account.Encryption, ".")
if len(s) < 4 || s[0] != "mlkem768x25519plus" {
return false
}
switch s[1] {
case "native":
case "xorpub":
account.XorMode = 1
case "random":
account.XorMode = 2
default:
return false
}
switch s[2] {
case "1rtt":View on GitHub (pinned to 7d214f8b09)
Solutions
- Set "flow":"xtls-rprx-vision" for REALITY/XTLS-Vision setups
- Set "flow":"" (or omit it) when not using XTLS Vision — especially with plain TLS or WebSocket transports
- Regenerate the share link / config with a current-version client tool
- Upgrade both endpoints so Vision is available on each side
Example fix
// before
"users": [ { "id": "...", "encryption": "none", "flow": "xtls-rprx-direct" } ]
// after
"users": [ { "id": "...", "encryption": "none", "flow": "xtls-rprx-vision" } ] Defensive patterns
Strategy: validation
Validate before calling
func validateVlessFlow(flow string) error {
switch flow {
case "", "xtls-rprx-vision", "xtls-rprx-vision-udp443":
return nil
}
return fmt.Errorf("unsupported flow %q", flow)
} Type guard
func vlessFlowSupported(flow string) bool {
switch flow {
case "", "xtls-rprx-vision", "xtls-rprx-vision-udp443":
return true
}
return false
} Prevention
- After upgrading Xray, sweep configs for legacy flows (xtls-rprx-direct, -splice, -origin) and replace with xtls-rprx-vision
- Only set flow when the transport is TCP+TLS/REALITY; leave empty for ws/grpc
- Regenerate share links with current client tools instead of reusing old ones
When it happens
Trigger: "flow":"xtls-rprx-direct" or "xtls-rprx-splice" in a user/account; any typo like "vision-udp443" without the full prefix; configs carried over from pre-1.8 Xray or V2Ray with XTLS enabled.
Common situations: Upgrading Xray-core on a server/client pair where old configs used splice/direct flow; following outdated tutorials; share links generated by old tools that still embed legacy flow values.
Related errors
- VLESS "settings.flow" doesn't support "` + c.Flow + `" in th
- VLESS users: "flow" doesn't support "` + account.Flow + `" i
- VLESS fallbacks: "path" must be empty or start with "/"
- VLESS fallbacks: please fill in a valid value for every "des
- VLESS fallbacks: invalid PROXY protocol version, "xver" only
AI-assisted analysis of XTLS/Xray-core@7d214f8b09 (2026-08-15).
Data as JSON: /api/errors/741f751ffd27e131.
Report an issue: GitHub.