XTLS/Xray-core · error

minecraft profiles are required

Error message

minecraft profiles are required

What it means

XMC.Build refuses to construct the Minecraft-masking transport config when the profiles list is empty — at least one fully-specified profile is mandatory for the protocol to present a client identity.

Source

Thrown at infra/conf/transport_finalmask.go:763

	profileUUID, err := googleuuid.Parse(c.UUID)
	if err != nil {
		return nil, fmt.Errorf("invalid minecraft profile UUID: %w", err)
	}
	if c.TexturesValue == "" || c.TexturesSignature == "" {
		return nil, fmt.Errorf("incomplete minecraft profile textures")
	}

	return &xmc.Profile{
		Username:          c.Username,
		Uuid:              append([]byte(nil), profileUUID[:]...),
		TexturesValue:     c.TexturesValue,
		TexturesSignature: c.TexturesSignature,
	}, nil
}

func (c *XMC) Build() (proto.Message, error) {
	if len(c.Profiles) == 0 {
		return nil, fmt.Errorf("minecraft profiles are required")
	}

	if c.Password == "" {
		return nil, fmt.Errorf("empty password")
	}

	rsaPrivateKey, err := xmc.DeriveRSAKey(c.Password)
	if err != nil {
		return nil, fmt.Errorf("derive minecraft rsa key: %w", err)
	}

	rsaPublicKey, err := x509.MarshalPKIXPublicKey(&rsaPrivateKey.PublicKey)
	if err != nil {
		return nil, fmt.Errorf("marshal minecraft rsa public key: %w", err)
	}

	profiles := make([]*xmc.Profile, 0, len(c.Profiles))
	for i := range c.Profiles {

View on GitHub (pinned to 7d214f8b09)

Solutions

  1. Add at least one complete profile (username, uuid, texturesValue, texturesSignature) under profiles
  2. Check the exact key spelling "profiles" in the xmc settings block
  3. Remove the xmc block entirely if the transport is not actually needed

Example fix

// before
"xmc": { "password": "hunter2", "profiles": [] }

// after
"xmc": {
  "password": "hunter2",
  "profiles": [{ "username": "Steve", "uuid": "...", "texturesValue": "...", "texturesSignature": "..." }]
}
Defensive patterns

Strategy: validation

Validate before calling

func hasXmcProfiles(x *XMC) bool {
    return x != nil && len(x.Profiles) > 0
}

Prevention

When it happens

Trigger: Adding an "xmc" settings block (finalmask transport) with no "profiles" array, or an empty profiles array [].

Common situations: Enabling xmc to see what it does without filling in profiles; profiles omitted because the JSON key was misspelled (profile/profileList) and unmarshalled to nil.

Related errors


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