fips

June 14, 2026 · View on GitHub

The FIPS mesh network daemon.

Synopsis

fips [-c FILE]

On Windows the same binary additionally accepts --install-service, --uninstall-service, and (used internally by the service control manager) --service.

Description

fips is the FIPS daemon. It loads a YAML configuration, resolves an identity, brings up the TUN adapter, listens on configured transports, authenticates peers, maintains the spanning tree, and forwards mesh traffic. There is one daemon per node.

The daemon stays in the foreground, logging to stderr, until it receives SIGINT or SIGTERM. On Windows, the service variant is controlled through the standard service control manager.

Options

FlagArgumentDescription
-c, --configFILEUse FILE as the configuration. Skips the default search paths.
-VPrint the short version (e.g. 0.4.0 (rev abcdef1)).
--versionPrint the long version: short version plus build target triple.
-h, --helpPrint usage and exit.
--install-service(Windows only) Install fips as a Windows service. Requires Administrator.
--uninstall-service(Windows only) Uninstall the Windows service. Requires Administrator.
--service(Windows only, internal) Run as a Windows service. Invoked by the service control manager — not for direct use.

There are no other CLI flags; all daemon behaviour is governed by the YAML configuration. See configuration.md.

Exit Codes

CodeMeaning
0Clean shutdown after SIGINT / SIGTERM.
1Failed to load configuration, resolve identity, construct the node, or start the node. The reason is printed to stderr before exit.

Environment

VariableDescription
RUST_LOGTracing filter directive. Overrides node.log_level from the config. Examples: info, debug, fips=trace,fips::node::handlers::mmp=debug.
XDG_RUNTIME_DIRUsed to derive the default control-socket path when /run/fips does not exist. See control-socket.md.
FIPS_CONFIG(Windows service mode only) Path to the configuration file when the daemon runs under the service control manager.

The daemon also clamps the nostr_relay_pool, nostr_sdk, and nostr log targets to info whenever the effective log level is below trace, so that RUST_LOG=debug does not flood the journal with raw relay frames. To see those frames, set the level to trace.

Files

fips looks for fips.yaml in the following locations, lowest to highest priority. All present files are merged in priority order; the highest-priority value wins.

PriorityPathPurpose
1/etc/fips/fips.yamlSystem-wide defaults
2~/.config/fips/fips.yamlUser preferences
3~/.fips.yamlLegacy user config
4./fips.yamlDeployment-specific overrides

Adjacent to the highest-priority config file the daemon reads (or writes, on first start) the identity files:

FileModePurpose
fips.key0600Bech32 nsec for the persistent identity (Unix only; Windows inherits parent ACLs).
fips.pub0644Bech32 npub corresponding to fips.key.

When node.identity.persistent is false (the default), a fresh keypair is written to these files on every start.

The control socket path is derived per control-socket.md.

See also