netbirdio/netbird · error
connect to service CLI interface: %w
Error message
connect to service CLI interface: %w
What it means
`netbird profile list` could not connect to the daemon's gRPC control interface. DialClientGRPCServer (client/cmd/root.go:271) blocks up to 10s on the dial target derived from --daemon-addr (default unix:///var/run/netbird.sock, npipe://netbird on Windows). The error is wrapped with %w, preserving the underlying grpc dial error chain.
Source
Thrown at client/cmd/profile.go:96
cmd.SetOut(cmd.OutOrStdout())
err := util.InitLog(logLevel, "console")
if err != nil {
return err
}
return nil
}
func listProfilesFunc(cmd *cobra.Command, _ []string) error {
if err := setupCmd(cmd); err != nil {
return err
}
conn, err := DialClientGRPCServer(cmd.Context(), daemonAddr)
if err != nil {
return fmt.Errorf("connect to service CLI interface: %w", err)
}
defer conn.Close()
currUser, err := user.Current()
if err != nil {
return fmt.Errorf("get current user: %w", err)
}
daemonClient := proto.NewDaemonServiceClient(conn)
resp, err := daemonClient.ListProfiles(cmd.Context(), &proto.ListProfilesRequest{
Username: currUser.Username,
})
if err != nil {
return err
}
tw := tabwriter.NewWriter(cmd.OutOrStdout(), 0, 0, 2, ' ', 0)View on GitHub (pinned to 93e97f4bf1)
Solutions
- Start the daemon service and confirm the socket/pipe exists
- Check NB_DAEMON_ADDR env and the --daemon-addr flag match where the daemon actually listens
- Inspect daemon logs for startup failures and restart it
- Reinstall the service if the socket is not recreated
Example fix
# before NB_DAEMON_ADDR=tcp://127.0.0.1:41731 netbird profile list # after (default unix socket where the daemon listens) unset NB_DAEMON_ADDR; netbird profile list
Defensive patterns
Strategy: validation
Validate before calling
if _, err := os.Stat("/var/run/netbird.sock"); err != nil {
return fmt.Errorf("daemon not reachable (socket missing); run `netbird service start`")
} Type guard
func canReachDaemon(addr string) bool {
conn, err := DialClientGRPCServer(context.Background(), addr)
if err != nil {
return false
}
conn.Close()
return true
} Try / catch
conn, err := DialClientGRPCServer(cmd.Context(), daemonAddr)
if err != nil {
return fmt.Errorf("connect to service CLI interface: %w", err)
}
defer conn.Close() Prevention
- Start the service before profile operations
- Keep NB_DAEMON_ADDR consistent with the installed service
- Probe the socket in automation wrappers
When it happens
Trigger: Daemon not installed/started; socket or named pipe missing; wrong --daemon-addr / NB_DAEMON_ADDR; dial timeout; running in an environment (container, SSH session with different namespace) that cannot reach the host socket.
Common situations: Fresh machines before `netbird service install && netbird service start`; daemon crashed; NB_DAEMON_ADDR left over from tests pointing at tcp://127.0.0.1:41731 or a test socket; macOS app vs CLI mismatch.
Related errors
AI-assisted analysis of netbirdio/netbird@93e97f4bf1 (2026-08-16).
Data as JSON: /api/errors/31c95d7d03353dfa.
Report an issue: GitHub.