TZX MESH
Sign in

Clients

TZX Mesh ships its own desktop apps, free and open source under the BSD 3-Clause licence: a background service with a command line (tzxmesh) and a tray app for settings and status. Downloads live at tzxmesh.com/dl; every file is listed in SHA256SUMS.

PlatformInstallConnect
Linux (Debian, Ubuntu, Fedora, RHEL, openSUSE, any distro)curl -fsSL https://tzxmesh.com/client.sh | sh
or the .deb / .rpm / tarball for your CPU (x86_64, arm64, armv7)
sudo tzxmesh up --management-url https://mesh.example.com
Linux desktop app (x86_64)tzxmesh-desktop-linux-amd64.deb or .rpm (GTK 3, WebKitGTK 4.1: Ubuntu 22.04+, Debian 12+, Fedora, openSUSE)tray app → Settings → Server → your URL
macOS 11+ (Apple silicon and Intel)tzxmesh-desktop-darwin-universal.pkg, or the same client.sh linemenu-bar app → Settings → Server → your URL; or sudo tzxmesh up …
Windows 10/11 (x64)tzxmesh-desktop-windows-amd64.exe (service + tray app + WireGuard driver)tray app → Settings → Server → your URL; or tzxmesh up … in an elevated prompt
Windows on ARMtzxmesh-windows-arm64.zip (command line only)tzxmesh service install, tzxmesh service start, then tzxmesh up …
iOS / Androidin development (Warden approvals from the phone come first)until then, the upstream mobile client with your URL under Self-hosted works against a TZX Mesh server
Containersthe upstream netbirdio/netbird image works against a TZX Mesh server (no enrolment note)see Setup keys for the run command

The console's Install page fills in your server address for every platform and links the same downloads.

Verify what you downloaded

The apps are not code-signed yet, so macOS and Windows will warn about an unidentified developer. Check the file against the published sums before you allow it:

curl -fsSLO https://tzxmesh.com/dl/latest/SHA256SUMS
sha256sum -c --ignore-missing SHA256SUMS      # Linux
shasum -a 256 -c --ignore-missing SHA256SUMS  # macOS

On macOS, if the package is refused, open System Settings → Privacy & Security and allow it there. On Windows, SmartScreen shows More info → Run anyway. client.sh performs the same check for you.

Where things live

WhatLinux / macOSWindows
Servicetzxmesh (systemd / launchd)TZXMesh in Services
Configuration and state/var/lib/tzxmesh/C:\ProgramData\TZX Mesh\
Logs/var/log/tzxmesh/client.logC:\ProgramData\TZX Mesh\client.log
Daemon socket/var/run/tzxmesh.socknamed pipe tzxmesh

A TZX Mesh app and an upstream NetBird client can be installed side by side; they use different names, paths and services.

Useful commands

tzxmesh status              # management, signal, relay, peers, connection types
tzxmesh status -d           # per-peer detail: direct or relayed, last handshake
tzxmesh routes list         # subnets and exit nodes offered to this device
tzxmesh down / tzxmesh up   # reconnect after changing the management URL
tzxmesh up --enrol-note "…" # tell the administrator who you are (shown in Warden)

Every option also reads an environment variable with the NB_ prefix, for example NB_MANAGEMENT_URL or NB_ENROL_NOTE, which is how scripts and images pass settings.

Headless machines

Servers and containers use a setup key. Give them a fixed hostname; it becomes the peer name. The one-line installer enrols in the same step:

curl -fsSL https://tzxmesh.com/client.sh | TZX_SETUP_KEY=<key> TZX_MANAGEMENT_URL=https://mesh.example.com sh

Updates

The apps check tzxmesh.com/dl/version and tell you when a newer release exists. Every release is signed, and a signed manifest binds the version, the filename and the hash together, so an app refuses an update whose signature does not verify and refuses an older release served in place of a new one. On Windows and macOS the app can install the update itself: turn that on under Settings → Clients in the console and choose whether devices update on their own or wait for someone to press Install. On Linux, update through your package manager or run client.sh again. Your server shows the same notice in the console.

Sign-in and expiry

Devices enrolled by a user re-authenticate when the session expires (24 hours by default, adjustable in Settings → Authentication). Devices enrolled with a setup key do not expire unless you switch that on for them.