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 thePATH.- 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, transcribing a recording, reading one aloud, indexing for search and answering questions all need programs MeshHold does not install — ffmpeg, LibreOffice and the model runtimes. A fresh Windows install has none of them, 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 with the model store underneath it 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 cannot ask about the firewall. 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 —
and inbound peer-to-peer traffic is silently blocked, which shows up as a
node that finds nobody. Add the rule by hand from an elevated prompt:
netsh advfirewall firewall add rule name="MeshHold P2P" dir=in action=allow protocol=TCP localport=7777
Use whatever port your config.yaml actually listens on if you changed 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.