Self-hosted service
sinamics/ztnet avatar
sinamics/ztnet

ZTNET: A Web UI for Self-Hosted ZeroTier Controllers

ZTNET - ZeroTier Web UI for Private Controllers with Multiuser and Organization Support.

1,238 stars118 forksTypeScriptGPL-3.0

At a glance

What is it?
ZTNET wraps a private ZeroTier controller in a Next.js web interface with multi-user and organization support. It is aimed at teams that already run their own controller and need more than the stock ZeroTier Central dashboard, but it ships as beta software under GPL-3.0.
Who is it for?
ZTNET fits teams that already operate a private ZeroTier controller and need per-organization network isolation plus a browser UI, and it is a poor fit for anyone who has not yet stood up a controller or who needs a stable release rather than beta software.
Can I use it commercially?
Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Yes. The repository last received commits 2 days ago.
What is it written in?
Mainly TypeScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

The Gap Between a Raw Controller and a Usable Dashboard

ZeroTier's controller API exposes networks, members, and authorization state, but operating it directly means scripting against HTTP endpoints. ZTNET targets that gap. The README describes it as a "ZeroTier Controller Web UI" and states that it now includes organization and multi-user support, which is the part that distinguishes it from a single-admin panel. The intended user is someone running a private controller, not a consumer of ZeroTier Central, and the organization layer implies more than one person or more than one tenant sharing that controller. If you are a single operator with a handful of networks, the organization features are overhead you will configure and never use. If you are handing network access to other people, the access boundary is the reason to look at this project at all.

What the Repository Layout Tells You About the Stack

The primary language is TypeScript, and the repository topics list nextjs14 and tailwindcss, so the UI is a Next.js 14 application styled with Tailwind. The topics also include zerotier-controller and zerotier-one, which places ZTNET as a client of a controller rather than a replacement for one. The README's screenshot list confirms the surface area: an organization page, a network page, member options, mail settings, platform users, a controller admin page, and a user profile. Mail settings being a first-class admin screen suggests invitation or notification flows depend on outbound SMTP, which is a configuration burden the README does not walk through. The disclaimer is explicit that the project is in BETA and provided "as is" without warranties, and that you accept responsibility for consequences of use. That sentence is doing real work: it tells you the maintainer is not claiming production readiness.

The Organization and Multi-User Model Is the Actual Feature

Multi-user support alone would be a permissions table. The organization concept is what makes ZTNET different from a thin admin skin: networks, and presumably the members attached to them, are grouped under an organizational boundary, and platform users are managed separately in an admin view. The README does not spell out the role hierarchy, so the precise relationship between a platform user, an organization, and a network administrator cannot be confirmed from the supplied material. That is a real documentation gap for anyone evaluating it as a multi-tenant tool. The screenshots show the screens exist; they do not show who can see what. Treat the organization model as promising but under-specified until you read the documentation site.

Getting It Running Means Docker Compose and a Controller Token

The README points installation at ztnet.network/installation/docker-compose and gives no inline commands, so the exact compose file is not in the repository README. What can be said from the material is the shape of the deployment: a Docker image published as sinamics/ztnet on Docker Hub, referenced by the README's badge, plus a ZeroTier controller the application talks to. The repository topics include zerotier-controller, and the admin screenshots include a controller page, which implies the controller endpoint and its API token are configured inside the application rather than compiled in. The practical sequence is: stand up zerotier-one as a controller, obtain its authtoken, deploy the ztnet container, then point the controller settings screen at the controller address and token. Because the README does not reproduce the compose file or the environment variable names, anyone following this review should read the installation page rather than guess at keys. Guessing at a token variable name is how people end up with a UI that loads and a controller that never responds.

Beta Status, GPL-3.0, and the Maintenance Question

Three releases appear in the supplied material within roughly two months: v0.8.1 on 2026-07-11, v0.8.2 on 2026-07-14, and v0.8.3 on 2026-07-25. The last push to the repository is dated 2026-09-10, later than the newest release. A 0.x version line with frequent point releases means upgrade cost is not zero: you should expect to pull new images and re-check configuration after each bump, and the project's own beta disclaimer means breaking changes are not ruled out. On licensing, the repository is GPL-3.0 as stated in the repository metadata. If you modify ZTNET and distribute it, or offer it as a network service to others, the GPL-3.0 obligations around source availability are likely to apply. That is a question for your own counsel, not something this review can settle, but it is a reason to decide early whether you are running this internally or shipping it to customers. The README also contains a commented-out attribution block crediting a Go reimplementation of ZeroTier's mkworld tool by Patrick Young, licensed GPL-3.0, used to generate a custom planet file. Because that block is commented out in the README as supplied, treat it as a lead to verify in the LICENSE file rather than a confirmed component.

Where a Thin Admin Panel Would Be the Better Choice

The obvious alternative is ZeroTier's own Central, the hosted management plane. The difference in approach is architectural: Central manages networks on ZeroTier's infrastructure, while ZTNET manages networks on a controller you operate, which means you keep the control plane and the data but you also own uptime, backups, and the controller's API surface. A second alternative is scripting the controller API directly with a small internal tool. That approach has no UI, no organization model, and no user accounts, but it also has no Next.js dependency, no SMTP configuration, and no upgrade cadence imposed by someone else. If your requirement is genuinely one operator and a stable set of networks, a script plus the controller API is less software to maintain. ZTNET earns its place when the number of people who need browser access, and the need to separate them by organization, outgrows what a script can reasonably express.

Who Should Adopt It, and What to Check First

Adopt ZTNET if you already run a private ZeroTier controller, you need browser-based administration for more than one person, and you can tolerate beta software with a fast release cadence. Do not adopt it if you have no controller yet, since ZTNET is a client of one and will not create that infrastructure for you, or if you need a stability guarantee the disclaimer explicitly withholds. Verify three things before committing: the controller address and API token configuration in your own compose deployment, since the README does not publish those keys; the organization and role semantics on the documentation site, because the repository README does not define them; and the GPL-3.0 implications for your distribution model. The closing judgement is narrow: ZTNET is a multi-tenant front end for a controller you already own, and it is only worth the operational surface it adds when the multi-user requirement is real.

Editorial conclusion

ZTNET fits teams that already operate a private ZeroTier controller and need per-organization network isolation plus a browser UI, and it is a poor fit for anyone who has not yet stood up a controller or who needs a stable release rather than beta software. Before adopting it, verify the controller API path and token configuration in your own docker-compose file, confirm the GPL-3.0 obligations against how you plan to distribute the deployment, and check whether the organization model matches your actual tenant boundaries.

Official sources

  1. License: GPL-3.0
  2. Project website
  3. README
  4. Releases
  5. sinamics/ztnet on GitHub
Community notes

Community notes