XTLS/Xray-core · error

VLESS "settings.flow" doesn't support "` + c.Flow + `" in th

Error message

VLESS "settings.flow" doesn't support "` + c.Flow + `" in this version

What it means

Thrown when building a VLESS inbound: the outbound-facing 'flow' field in settings only accepts the empty string or vless.XRV (xtls-rprx-vision) in this build. Any other flow string (e.g. legacy xtls-rprx-direct) fails the whole inbound build.

Source

Thrown at infra/conf/vless.go:53

	Clients    []json.RawMessage       `json:"clients"`
	Decryption string                  `json:"decryption"`
	Fallbacks  []*VLessInboundFallback `json:"fallbacks"`
	Flow       string                  `json:"flow"`
	Testseed   []uint32                `json:"testseed"`
}

// Build implements Buildable
func (c *VLessInboundConfig) Build() (proto.Message, error) {
	config := new(inbound.Config)

	if c.Clients != nil {
		c.Users = c.Clients
	}
	config.Users = make([]*protocol.User, len(c.Users))
	switch c.Flow {
	case vless.XRV, "":
	default:
		return nil, errors.New(`VLESS "settings.flow" doesn't support "` + c.Flow + `" in this version`)
	}
	processClient := func(idx int) error {
		rawUser := c.Users[idx]
		user := new(protocol.User)
		if err := json.Unmarshal(rawUser, user); err != nil {
			return errors.New(`VLESS users: invalid user`).Base(err)
		}
		account := new(vless.Account)
		if err := json.Unmarshal(rawUser, account); err != nil {
			return errors.New(`VLESS users: invalid user`).Base(err)
		}

		u, err := uuid.ParseString(account.Id)
		if err != nil {
			return err
		}
		account.Id = u.String()

View on GitHub (pinned to 7d214f8b09)

Solutions

  1. Use "flow": "xtls-rprx-vision" if the client supports XTLS Vision
  2. Or remove the flow field (empty) for plain VLESS without XTLS
  3. Delete legacy flow values; they were removed from Xray

Example fix

// before
"settings": { "flow": "xtls-rprx-direct", ... }
// after
"settings": { "flow": "xtls-rprx-vision", ... }
Defensive patterns

Strategy: validation

Validate before calling

flow := gjson.Get(inbound, "settings.flow").String()
if flow != "" && flow != "xtls-rprx-vision" {
    return fmt.Errorf("inbound flow %q unsupported; use \"xtls-rprx-vision\" or omit", flow)
}

Prevention

When it happens

Trigger: "settings": { "flow": "xtls-rprx-direct" } on a VLESS inbound; any flow value other than "xtls-rprx-vision" or "".

Common situations: Porting an old XTLS config that used removed flows (xtls-rprx-origin, xtls-rprx-direct), or setting a per-user-only flow at the settings level with a typo.

Related errors


AI-assisted analysis of XTLS/Xray-core@7d214f8b09 (2026-08-15). Data as JSON: /api/errors/900802d48b2d90d7. Report an issue: GitHub.