Reference

Installing on Windows

Per-user tray or per-machine service, what the installer puts where, the firewall rule a service install cannot ask for, and moving a node between the two.

MeshHoldSetup.msi from the downloads page. There is a separate -arm64.msi; the plain one is x86-64.

The installer asks one real question, and it is the first screen after the licence.

Per-user or per-machine

Per-user — "Install just for me". MeshHold runs as a tray application under your account, with its data in %USERPROFILE%\.meshhold. It starts when you sign in and stops when you sign out. No administrator rights are needed. This is the right answer for a laptop or a desktop you sit at.

Per-machine — "Install for all users". The daemon is registered with the Windows Service Control Manager as a LocalSystem auto-start service, with its data in %ProgramData%\MeshHold. It runs whether or not anybody is signed in, which is the point: a node that is only up while you are logged in is not a node the rest of your mesh can rely on. This one needs administrator rights, and it is the right answer for a machine that is meant to stay reachable.

Going from one to the other is supported and does not mean starting over. A per-machine install adopts the node from %USERPROFILE%\.meshhold if there is one and the machine-wide directory is empty, so the node ID, the vaults and the paired peers all survive the move. It never overwrites a live node — if the target already has one, the import is skipped. IMPORTNODE=0 on the command line opts out.

What gets installed

There is no component picker, and that is deliberate: every node is the same and fully capable. The pieces below are a few megabytes between them, so choosing among them would save nothing and would turn "does this node have the VPN helper" into a question somebody has to ask.

  • The daemon and the tray app. The same binary; the tray is the desktop shell around it.
  • meshhold.exe, the command-line client, on the PATH.
  • The VPN helper service, so mesh-LAN and the exit-VPN work without a UAC prompt every time.
  • The meshhold:// protocol handler, which is what makes an invite link clickable.
  • A "Send with MeshHold" entry on the right-click menu.
  • Start with Windows — per-user installs only. A service does not need it, and a machine that ran both would be running two nodes.

Mounting a vault as a drive

That needs WinFsp, a filesystem driver MeshHold does not bundle: most installs never mount anything, and a kernel driver is not something to hand out unasked. The installer's last page says so if you do not already have it.

It is the one program MeshHold will fetch for you — the vendor's own signed package, checked against a checksum fixed at build time:

meshhold tools install winfsp --yes

Or from the installer itself, if you would rather not open a command prompt:

msiexec /i MeshHoldSetup.msi INSTALLWINFSP=1

Everything else on the tools list is yours to install. See below.

Everything a node can do with a file

Converting a document, transcoding a film, making previews and letting office files reach the search index all need programs MeshHold does not install — ffmpeg and LibreOffice. A fresh Windows install has neither, and the node works perfectly well without them for storage, sync, chat and VPN.

To see where you stand:

meshhold tools

or Settings → Tools in the app, which shows the same list and a button to look again after you install something. The programs a node needs has the command for each one.

Two things worth knowing

A service install opens the firewall itself — on private and domain networks only. For a per-user tray install, Windows prompts on the first inbound connection and you click Allow. A LocalSystem service has no interactive session, so there is no prompt; meshhold service install therefore adds two inbound rules for meshhold.exe, named MeshHold P2P inbound (UDP …) and (TCP …): the port of node.listen_addr on UDP, and node.link_tcp_port — or that listen port plus one — on TCP, both on the Private and Domain profiles. service uninstall removes them; re-running the install after changing those ports replaces them. On a network Windows classes as Public they do not apply — make the network private, or add your own rule for that profile if you mean it.

The data directory is not selectable at install time. A per-user install takes %USERPROFILE%\.meshhold and a service install takes %ProgramData%\MeshHold. Putting a node on a second drive means installing, stopping the daemon, moving the directory and pointing config.yaml at the new location.

Managing the service

meshhold service status --json
meshhold service start
meshhold service stop

meshhold status is the daemon's own health summary — version, network, listen addresses, TLS, and what tools are missing — and needs the node to be running. See the CLI reference.

Uninstalling

Through Apps & features, as usual. It removes the services and the program files; it does not remove your data directory, because that holds the node's identity and the only copy of anything not yet replicated elsewhere. Delete %ProgramData%\MeshHold or %USERPROFILE%\.meshhold by hand once you are sure.