tailscale/tailscale · error

local node is not configured or missing Self information

Error message

local node is not configured or missing Self information

What it means

The daemon returned a status struct whose Self field is nil: the machine has no logged-in node identity, so there is no 'self' from which to resolve a peer relationship. The CLI surfaces this distinctly from transport failures (wrapped status error) and from the nil-status case. Most often it simply means tailscale has not been brought up on this machine.

Source

Thrown at cmd/tailscale/cli/file.go:457

func getTargetStableID(ctx context.Context, ipStr string) (id tailcfg.StableNodeID, isOffline bool, err error) {
	ip, err := netip.ParseAddr(ipStr)
	if err != nil {
		return "", false, err
	}

	st, err := localClient.Status(ctx)
	if err != nil {
		// This likely means tailscaled is unreachable or returned an error on /localapi/v0/status.
		return "", false, fmt.Errorf("failed to get local status: %w", err)
	}
	if st == nil {
		// Handle the case if the daemon returns nil with no error.
		return "", false, errors.New("no status available")
	}
	if st.Self == nil {
		// We have a status structure, but it doesn’t include Self info. Probably not connected.
		return "", false, errors.New("local node is not configured or missing Self information")
	}

	// Find the PeerStatus that corresponds to ip.
	var foundPeer *ipnstate.PeerStatus
peerLoop:
	for _, ps := range st.Peer {
		for _, pip := range ps.TailscaleIPs {
			if pip == ip {
				foundPeer = ps
				break peerLoop
			}
		}
	}

	// If we didn’t find a matching peer at all:
	if foundPeer == nil {
		if !tsaddr.IsTailscaleIP(ip) {
			return "", false, fmt.Errorf("unknown target; %v is not a Tailscale IP address", ip)

View on GitHub (pinned to cfe32b8be6)

Solutions

  1. Bring the node up: tailscale up (or tailscale login) and complete authentication
  2. For headless flows, use an auth key: tailscale up --auth-key=tskey-...
  3. Confirm state afterwards: 'tailscale status' must list Self

Example fix

# before
$ tailscale file cp report.pdf device:
error: local node is not configured or missing Self information

# after
$ tailscale up --auth-key=tskey-...
$ tailscale file cp report.pdf device:
Defensive patterns

Strategy: type-guard

Type guard

// Narrow before resolving a peer:
func statusUsable(st *ipnstate.Status) bool {
    return st != nil && st.Self != nil
}

Try / catch

st, err := localClient.Status(ctx)
if err != nil {
    return fmt.Errorf("failed to get local status: %w", err)
}
if st == nil || st.Self == nil {
    // prompt the user to run 'tailscale up' / 'tailscale login' before retrying
    return errors.New("node not logged in; run tailscale login")
}

Prevention

When it happens

Trigger: st.Self == nil from a reachable but unconfigured daemon: a fresh tailscaled install before 'tailscale up'/'tailscale login', or a logged-out node.

Common situations: New nodes; after 'tailscale logout'; headless setups where the auth step was skipped or an auth key was never supplied.

Related errors


AI-assisted analysis of tailscale/tailscale@cfe32b8be6 (2026-08-15). Data as JSON: /api/errors/cf0c5271864df94d. Report an issue: GitHub.