XTLS/Xray-core · error

Trojan server address is not set.

Error message

Trojan server address is not set.

What it means

Thrown when iterating the single Trojan server entry and its 'address' field is nil (missing or null in JSON). The address is mandatory — the Trojan client must know where to connect.

Source

Thrown at infra/conf/trojan.go:65

			{
				Address:  c.Address,
				Port:     c.Port,
				Level:    c.Level,
				Email:    c.Email,
				Password: c.Password,
				Flow:     c.Flow,
			},
		}
	}
	if len(c.Servers) != 1 {
		return nil, errors.New(`Trojan settings: "servers" should have one and only one member. Multiple endpoints in "servers" should use multiple Trojan outbounds and routing balancer instead`)
	}

	config := &trojan.ClientConfig{}

	for _, rec := range c.Servers {
		if rec.Address == nil {
			return nil, errors.New("Trojan server address is not set.")
		}
		if rec.Port == 0 {
			return nil, errors.New("Invalid Trojan port.")
		}
		if rec.Password == "" {
			return nil, errors.New("Trojan password is not specified.")
		}
		if rec.Flow != "" {
			return nil, errors.PrintRemovedFeatureError(`Flow for Trojan`, ``)
		}

		config.Server = &protocol.ServerEndpoint{
			Address: rec.Address.Build(),
			Port:    uint32(rec.Port),
			User: &protocol.User{
				Level: uint32(rec.Level),
				Email: rec.Email,
				Account: serial.ToTypedMessage(&trojan.Account{

View on GitHub (pinned to 7d214f8b09)

Solutions

  1. Add "address": "your.server.example" to the servers entry
  2. Verify the key name is exactly "address" (not "server"/"host"/"addr")
  3. If using the legacy flat form, set the top-level "address" field

Example fix

// before
{ "port": 443, "password": "secret" }
// after
{ "address": "trojan.example.com", "port": 443, "password": "secret" }
Defensive patterns

Strategy: validation

Validate before calling

for _, s := range servers {
    if !gjson.Valid(s.Raw) || gjson.Get(s.Raw, "address").Type != gjson.String {
        return errors.New("trojan server entry is missing a string \"address\"")
    }
}

Prevention

When it happens

Trigger: A servers entry like { "port": 443, "password": "x" } with no "address" key, or "address": null.

Common situations: Templating a config and leaving the address placeholder empty, or accidentally renaming the key (e.g. "server" or "host") instead of "address".

Related errors


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