{"record":{"id":"c5a507ca74c2257d","repo":"XTLS/Xray-core","slug":"vless-users-flow-doesn-t-support-account-f","errorCode":null,"errorMessage":"VLESS users: \"flow\" doesn't support \"` + account.Flow + `\" in this version","messagePattern":"VLESS users: \"flow\" doesn't support \"` \\+ account\\.Flow \\+ `\" in this version","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"infra/conf/vless.go","lineNumber":77,"sourceCode":"\t\t\treturn errors.New(`VLESS users: invalid user`).Base(err)\n\t\t}\n\t\taccount := new(vless.Account)\n\t\tif err := json.Unmarshal(rawUser, account); err != nil {\n\t\t\treturn errors.New(`VLESS users: invalid user`).Base(err)\n\t\t}\n\n\t\tu, err := uuid.ParseString(account.Id)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\taccount.Id = u.String()\n\n\t\tswitch account.Flow {\n\t\tcase \"\":\n\t\t\taccount.Flow = c.Flow\n\t\tcase vless.XRV:\n\t\tdefault:\n\t\t\treturn errors.New(`VLESS users: \"flow\" doesn't support \"` + account.Flow + `\" in this version`)\n\t\t}\n\n\t\tif len(account.Testseed) < 4 {\n\t\t\taccount.Testseed = c.Testseed\n\t\t}\n\n\t\tif account.Encryption != \"\" {\n\t\t\treturn errors.New(`VLESS users: \"encryption\" should not be in inbound settings`)\n\t\t}\n\n\t\tif account.Reverse != nil {\n\t\t\tif account.Reverse.Tag == \"\" {\n\t\t\t\treturn errors.New(`VLESS users: \"tag\" can't be empty for \"reverse\"`)\n\t\t\t}\n\t\t\tif account.Reverse.Sniffing != nil { // may not be reached: error json unmarshal\n\t\t\t\treturn errors.New(`VLESS users: inbound's \"reverse\" can't have \"sniffing\"`)\n\t\t\t}\n\t\t}","sourceCodeStart":59,"sourceCodeEnd":95,"githubUrl":"https://github.com/XTLS/Xray-core/blob/7d214f8b094f75322fa3990f8aadad1c912f24f5/infra/conf/vless.go#L59-L95","documentation":"Per-user flow validation in a VLESS inbound: after an empty per-user flow inherits the settings-level flow, the value must be either empty or vless.XRV (xtls-rprx-vision). Any other string on a client — e.g. a legacy flow — returns this error for that user.","triggerScenarios":"A clients entry with \"flow\": \"xtls-rprx-direct\" or a typo like \"xtls-rprx-visionn\" while the settings-level flow is valid.","commonSituations":"Old client entries copied from pre-Vision configs; disagreement between per-user flow and the only supported value in this build.","solutions":["Set the client's flow to \"xtls-rprx-vision\", or delete it so it inherits the inbound-level flow","Remove all legacy flow values from every client object"],"exampleFix":"// before\n{ \"id\": \"8c1f...\", \"flow\": \"xtls-rprx-direct\" }\n// after\n{ \"id\": \"8c1f...\", \"flow\": \"xtls-rprx-vision\" }","handlingStrategy":"validation","validationCode":"uf := gjson.Get(clientRaw, \"flow\").String()\nif uf != \"\" && uf != \"xtls-rprx-vision\" {\n    return fmt.Errorf(\"client flow %q unsupported; use \\\"xtls-rprx-vision\\\" or omit\", uf)\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Omit per-user flow to inherit the inbound-level setting","Sweep configs for removed flow values after upgrading Xray"],"tags":["config","vless","xtls","flow"],"backgroundTag":null,"analyzedSha":"7d214f8b094f75322fa3990f8aadad1c912f24f5","analyzedAt":"2026-08-15T14:26:24.325Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}