NetBird Desktop App
The redesigned desktop app described on this page is currently available as a release candidate. Behavior and screenshots may change before the stable release. To try it, download v0.75.0-rc.1 from GitHub releases.
The NetBird desktop app has been rebuilt from the ground up. It runs on a Wails webview with a React frontend, while the Go backend that talks to the daemon stays the same. The management server and wire protocol are unchanged. The redesigned app is not backward compatible with older agents, though, so the app and the agent need to be updated together. If their versions do not match, the app shows a notification prompting you to update.
Default and Advanced Views
The main window opens in a compact Default view that shows the essentials: the active profile, connection status, hostname, overlay IP, and current exit node.

Switch to the Advanced view and the window expands with a peers and resources browser on the right. The Peers tab lists the peers in your network.

The Resources tab lists the network resources available to you.

Peer Details
Clicking a peer opens a detail panel with the information you would otherwise look up from the CLI: address, status, route, connection details, and group membership.
A Reactive UI
Changes made by the NetBird agent or the CLI are reflected in the app immediately. Connect or disconnect from the CLI and the toggle flips on its own. Switch profiles and the window catches up. There is no need to refresh or relaunch the app.
System Tray
A colored status dot sits next to the tray icon so you can read the state of your network without opening the app:
- Green when connected.
- Yellow when you need to log in.
- Grey when disconnected.

The app also includes per-platform refinements: improved behavior on Linux X11 desktops, a macOS Dock icon that only appears when an app window is open, and improved status rendering on Windows.
Settings
The settings page uses a tabbed layout that groups options by what they control. The tabs you see depend on your role and on any MDM policy in effect. The full set is:
- General for everyday toggles: auto-start, notifications, and display language.
- Network and Security for connection-side options such as PSK, custom DNS port, lazy connections, and server SSH.
- Profiles for managing the accounts the app knows about. See Profiles.
- SSH and Advanced for options such as log level, network monitor, and native SSH.
- Troubleshoot for capturing a debug bundle.
- About for version information, useful links, and updating the app.

MDM-Driven UI
If you roll out NetBird through MDM, the app reads the policy in effect on the device and adjusts itself to match, so users only see the options they are allowed to use. For deploying NetBird through an MDM provider, see the MDM deployment guides.
- Hide whole views.
DisableAdvancedViewhides the Advanced view of the main window, so managed users only see the compact one. - Gate specific capabilities. Flags such as
AllowServerSSHcontrol whether the corresponding toggle is available in the app. - Refresh in the background. Restrictions are re-read when the window becomes visible or the connection status changes, so MDM-pushed policy updates apply without a restart.
Profile management can also be locked down. See Disabling the Profiles feature for the --disable-profiles and --disable-update-settings options.
Session Expiration and Renewal
When a session is about to expire, the app shows a dialog with a countdown and two clear actions: renew or log out. An operating system notification fires ahead of time, so the dialog is not the first signal you get.

The renewal flow follows one rule: re-authenticating never closes an active connection. Renew session runs the browser sign-in flow while your existing connection stays up. Your tunnels, SSH sessions, and remote desktop sessions keep running through the renewal. Only the underlying session ticket changes.
Localization
You can switch languages from the Display Language picker in Settings → General, and the change applies instantly. The release candidate ships with initial translations for English, French, German, Hungarian, Italian, Portuguese, Russian, Simplified Chinese, and Spanish.
These initial translations are still a work in progress. If your language is missing or a phrase reads incorrectly, please open a pull request. Feedback from native speakers is exactly what helps here.
Capturing a Debug Bundle
The Troubleshoot tab can capture a debug bundle that collects both the daemon logs and the UI logs at the current log level in one step. Attach the bundle when you report an issue so the team has the full picture.

