A clean cross-platform GUI for managing local ZeroTier nodes without touching the command line. Meshberth brings the full zerotier-cli client workflow into a faster, clearer desktop interface.
  • Rust 53.6%
  • Svelte 32.6%
  • TypeScript 11.7%
  • Shell 1%
  • CSS 0.4%
  • Other 0.7%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-07-14 03:20:52 +08:00
.cargo MeshBerth 1.0.0 2026-07-14 01:38:41 +08:00
.forgejo/workflows MeshBerth 1.0.0 2026-07-14 01:38:41 +08:00
ci MeshBerth 1.0.0 2026-07-14 01:38:41 +08:00
doc MeshBerth 1.0.0 2026-07-14 01:38:41 +08:00
img MeshBerth 1.0.0 2026-07-14 01:38:41 +08:00
scripts MeshBerth 1.0.0 2026-07-14 01:38:41 +08:00
src MeshBerth 1.0.0 2026-07-14 01:38:41 +08:00
src-tauri MeshBerth 1.0.0 2026-07-14 01:38:41 +08:00
.gitignore MeshBerth 1.0.0 2026-07-14 01:38:41 +08:00
CHANGELOG.md MeshBerth 1.0.0 2026-07-14 01:38:41 +08:00
deny.toml MeshBerth 1.0.0 2026-07-14 01:38:41 +08:00
eslint.config.js MeshBerth 1.0.0 2026-07-14 01:38:41 +08:00
index.html MeshBerth 1.0.0 2026-07-14 01:38:41 +08:00
LICENSE MeshBerth 1.0.0 2026-07-14 01:38:41 +08:00
package-lock.json MeshBerth 1.0.0 2026-07-14 01:38:41 +08:00
package.json MeshBerth 1.0.0 2026-07-14 01:38:41 +08:00
README.md docs: fix stale CI badge and drop the removed GPG-signing claim in the README 2026-07-14 03:20:52 +08:00
svelte.config.js MeshBerth 1.0.0 2026-07-14 01:38:41 +08:00
tsconfig.json MeshBerth 1.0.0 2026-07-14 01:38:41 +08:00
VERSION.md MeshBerth 1.0.0 2026-07-14 01:38:41 +08:00
vite.config.ts MeshBerth 1.0.0 2026-07-14 01:38:41 +08:00

MeshBerth

MeshBerth

Cross-Platform Desktop GUI for ZeroTier

Build License: MIT Tauri 2 Svelte 5 Rust

MeshBerth is a cross-platform desktop GUI for managing ZeroTier nodes without relying on the command line. It gives you a clean, practical interface for the local zerotier-cli workflow — view service status, inspect node identity and version, join and leave networks, review assigned addresses, and manage client-side options like managed routes and DNS behavior — without memorizing commands, switching terminals, or parsing raw output.

The goal is simple: everything available through the ZeroTier client CLI should be reachable through an intuitive graphical interface. Today MeshBerth covers node status, network membership, peer visibility, route inspection, moon configuration, and client-side settings, with deeper diagnostics on the way (see Features for what ships now versus what's planned).

MeshBerth does not replace ZeroTier Central or controller-side administration. It focuses on the local client experience: the ZeroTier service, the current node, and the networks that node belongs to.

MeshBerth dashboard — node status, connectivity, and the ZeroTier service at a glance

The dashboard — node status, connectivity, peers, and service control. See the full visual tour →

At a glance

  • One-window control panel for the local ZeroTier service, plus a system tray icon showing connection state with quick per-network disconnect.
  • Friction-free setup — a short first-run wizard detects ZeroTier, can start the service, and grants MeshBerth read access to the node, mostly automated with at most one elevated prompt per step.
  • Direct to the service — talks to the local ZeroTier JSON API the same way zerotier-cli does; no output scraping.
  • Lightweight — a Tauri 2 (Rust) backend with a Svelte 5 frontend; small binaries, low memory, native OS webview.

Features

Available now (v1.0):

  • First-run setup wizard (detect ZeroTier, start the service, grant token access)
  • Dashboard — node ID, online status, version, and service start / stop / restart
  • Networks — join and leave, per-network detail (assigned addresses, managed routes, DNS), the four client-side toggles (allowManaged, allowGlobal, allowDefault, allowDNS), and an instant keyword filter, with optimistic UI updates so toggles settle immediately instead of waiting for the next poll
  • Looking Glass — every managed route across all joined networks, split by IPv4/IPv6, with sortable columns and an instant keyword filter
  • Advanced — node connectivity settings (primary/secondary ports, UPnP/NAT-PMP port mapping, TCP fallback relay, force TCP relay), applied via an elevated, merge-safe local.conf edit and service restart
  • Peers — reachable nodes with role (planet/moon/leaf), latency, and direct/relayed paths, read-only, with an instant keyword filter
  • Moons — list, orbit, and deorbit external ZeroTier roots via the local /moon API, no elevation required
  • Light and dark theming, following the system by default with a manual override in Settings
  • Settings — adaptive refresh intervals
  • About — version, license, and a plain-language summary of what MeshBerth touches (and doesn't)
  • System tray with connection state, quick disconnect, close-to-tray, and a status-aware icon (online/degraded/offline)
  • Start on login, start hidden, and desktop notifications for node/network events — all off by default, configurable in Settings

Planned: debug dumps, a raw API inspector, Flatpak, and Windows / macOS installers. See doc/FEATURES.md for the full feature list, release phasing, and the zerotier-cli → MeshBerth parity map.

Status & platforms

MeshBerth 1.0 is Linux-first: the build targets are AppImage, .deb, and .rpm. Windows and macOS support is planned for a later release.

Prerequisite: MeshBerth manages the ZeroTier service and node but does not install ZeroTier itself. Install ZeroTier One first; the setup wizard handles the rest.

Installation

Install from the apt/dnf package repository (recommended — you get updates), or grab a standalone AppImage / .deb / .rpm attached to each Forgejo release and verify it against the release's SHA256SUMS/SHA512SUMS. You can also build from source (below). Full details in doc/INSTALLATION.md.

Building from source

MeshBerth uses a containerized build environment, so the whole toolchain lives in an image and nothing is installed on your host — you only need Podman (or Docker):

git clone https://git.jdneer.com/jd/meshberth.git
cd meshberth
scripts/in-container.sh bash -c 'npm ci && npm run tauri build -- --bundles deb'

Run the full local check battery (the same gates CI runs) with:

scripts/ci-local.sh          # prints "all gates green ✓" on success

See doc/BUILD.md for the complete build, test, and dev-run guide.

Documentation

Document What's inside
Visual Tour Screenshots of every screen
Features Feature list, release phasing, zerotier-cli parity map
Installation Installing MeshBerth (Linux packages, from source)
First-Run Setup The setup wizard and how MeshBerth gains service access
ZeroTier Integration Per-platform service start, token bootstrap, and elevation (polkit/D-Bus)
Privilege Elevation The elevation mechanism itself: command shapes, polkit/D-Bus chain, injection safety, exit-code mapping
Configuration Settings, adaptive polling, persistence
Troubleshooting Connection states and common problems
Architecture How the app is built: layers, modules, data flow
Tech Stack Technology choices and rationale
ZeroTier Service API The local ZeroTier API MeshBerth consumes
Theming Design tokens, the light/dark switch, and the theme setting
Build Building and running from source
Contributing Development workflow, CI, conventions
Dev Guidelines Coding standards: docs, linting, security, testing
Dependency Policy Supply-chain and pinning policy
Release Process How releases are cut
Roadmap What might come next, and why

License

MIT — see LICENSE.