v0.78.0
netbirdio/netbirdv0.78.0Sep 3, 2026by github-actions[bot]
AI Summary
Major release introducing Agent Network/LLM gateway, fixing Windows DNS, adding Prometheus metrics, upgrading to Go 1.26, and enabling Rosenpass support via the embedded proxy.
Key Highlights
- Agent Network / LLM gateway integration with Bedrock model discovery.
- Rosenpass support now works through the embedded reverse proxy.
- DNS on Windows catch-all rule to prevent poisoning.
- Local Prometheus metrics endpoint on the client.
- Unified ACL filtering for peers and routes.
Breaking Changes
- Remote debug bundles now require an explicit admin opt-in.
- The embedded proxy now runs Rosenpass in permissive mode (configurable via NB_PROXY_ROSENPASS=false).
- Proxy peers now default to lazy connections.
New Features
- Agent Network / LLM gateway integration.
- Local Prometheus metrics endpoint.
- Ukrainian localization for the desktop client.
Full Release Notes
## Release Notes for v0.78.0 ## Highlights - **Rosenpass now works through the embedded reverse proxy** (#6763). Until now the proxy ran no Rosenpass at all, so peers with Rosenpass enabled failed to establish through it on a PSK mismatch — an incompatibility that was never documented. The proxy now runs Rosenpass in **permissive** mode, so it connects both to Rosenpass-enabled peers and, exactly as before, to peers without it. `NB_PROXY_ROSENPASS=false` turns it off. - **Lazy connections reworked**: per-peer lazy state, proxy peers lazy by default, and the lazy exclusion list removed (#6762, #6763). - **Agent Network / LLM gateway**: agentgateway integration, access roles and self-service endpoints, Bedrock model discovery served from the control plane, guardrail allowlists for declared model ids, and the endpoint conformed to the LLM gateway protocol (#7274, #7221, #7250, #7239, #7154, #7389, #7246). - **DNS on Windows**: a catch-all NRPT rule when NetBird is the primary resolver (#7071), closing the leak/poisoning window towards the system resolvers. Use `netbird service reconfigure --service-env NB_USE_LEGACY_DNS_RESOLUTION=true` to restore the old behavior. - **Local Prometheus metrics endpoint** on the client (#6689). - **Go 1.26** and `go-quic` v0.62.0 across client, relay and management (#7359). - **Unified ACL filtering** for peers and routes, with multi-source rules (#6322). An internal refactor: no change is expected for standard deployments. - **Ukrainian localization** for the desktop client (#7035). ## Behaviour changes - Remote jobs (remote debug bundle and friends) are now **behind an admin opt-in**, with MDM support (#7153). Anyone using them without the opt-in has to enable it. - Remote debug bundle jobs accept an anonymization level and an upload URL (#7147). - The client stays connected during the `login` command (#7384). - Logging out of the active profile is allowed even when profiles are disabled (#7360). - Profiles resolve for the invoking `sudo` user rather than for `root` (#7238). - NetBird traffic stays out of third-party fwmark rules (#7314). - GUI windows are created on demand and destroyed on close (#7096). - Android split tunnelling: the mode is typed rather than stored as a string, and settings are kept per profile (#7387, #7349). ## Security / hardening - The cached SSH JWT is bound to the local caller that obtained it (#7378). - The WireGuard key is no longer logged on a parse failure (#7379). - The client asks the OS for privileges when a guarded SSH setting is changed (#7066). - The proxy validates header auth (#7263). - Management checks a provider's URL and credential before saving them (#7301). - Clarified that `X-Peer-ID` on metrics ingest is not a credential (#7363). - The old `math/rand` library is gone from management (#6836). ## Client — fixes - Fixed the ICEBind races that wedge interface creation (#7377). - `agentConnecting` is dropped whenever the ICE session state clears (#7327). - A peer offer or answer arriving before the handshaker starts listening is held rather than lost (#7255). - Connections are swept on network loss through a shared netevents manager (#7254). - Route selection survives an invalid request and is applied on a partial one (#7292). - The session-expiration dialog closes only on renewal (#7337). - A still-locked updater binary is tolerated when cleaning up after an update (#7286). - Fixed context cancellation during restart on iOS (#7329). - iOS SSO logins reuse the profile's account (#7193). - The iOS profile manager was migrated from Swift to Go (#6528). - The PCP implementation moved to the go-nat fork (#7282). - Reverted multi-buffer support declared for the loopback XDP program (#7303). - The Android TUN is renewed only when the routes it carries actually change (#7396). - Overlay listeners are rebuilt when the TUN is renewed (#7397). - The remote jobs opt-in is exposed in the Android and iOS SDK preferences (#7406). ## Management — fixes - Fixed geolocation panics (#7382). - Fixed private services calculation on the new db path (#7383). - Fixed posture check evaluation for direct peers in policy definitions (#7348) and the affected peers calculation on a posture check flip (#7347). - Handled the nil pointer in `sendInitialSync()` when the peer has been deleted (#7315). - Network map from the nmap data type (#6919). ## Self-hosted / infrastructure - Better domain, Docker Compose and license validation in the self-hosted scripts (#7339). - The dashboard wasm client bump is triggered by release tags (#7277). - Protobuf breaking-change checks in CI (#7305). - Pinned the toolchain `gomobile init` needs for gobind (#7291). - Removed the mobile build validation workflow (#7302). ## Upgrade notes - **Remote debug bundles now require an explicit opt-in** (#7153). Bundles requested by the management server no longer run on a peer unless remote jobs are enabled there, with `--allow-remote-jobs` on the client or the `allowRemoteJobs` managed setting. Deployments relying on management-triggered debug bundles must opt in before they work again. The upload destination can now be pinned by the operator, with MDM taking precedence over the management-supplied value (#7147). - The embedded proxy now runs Rosenpass in permissive mode (#6763). Peers with Rosenpass enabled can now use the reverse proxy, which previously failed on a PSK mismatch; peers without Rosenpass keep connecting exactly as before. `NB_PROXY_ROSENPASS=false` disables it. - Proxy peers now default to lazy connections (#6762). Nothing else requires action. **Full Changelog**: https://github.com/netbirdio/netbird/compare/v0.77.1...v0.78.0