A process started by the service control manager has no standard handles, and writes to its absent stdout report success, so everything the daemon logged in service mode was lost. So were config-load failures, the service's own error report and panic messages, which all went to stderr. In service mode the daemon now logs to C:\ProgramData\fips\fips.log. The file is rolled at 10 MiB with four old files kept, so it takes at most about 50 MiB. A roll that fails, for example because another process holds the file, keeps writing to the current file and is not retried until another 10 MiB have been written. Config-load failures, the service error and panic messages go to the same file. A foreground run still logs to the console, and --install-service names the log file. The writer is built in rather than taken from a crate, so it is tested on every platform and adds no dependency. The Windows ZIP's README and the fips reference now say where the service log goes, and install-service.ps1 prints the log path.
4.4 KiB
fips
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
| Flag | Argument | Description |
|---|---|---|
-c, --config |
FILE |
Use FILE as the configuration. Skips the default search paths. |
-V |
— | Print the short version, <version> (rev <git-hash>). The rev part is omitted when the build could not read a git revision, as in a package built from a git worktree. |
--version |
— | Print the long version: short version plus build target triple. |
-h, --help |
— | Print 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
| Code | Meaning |
|---|---|
0 |
Clean shutdown after SIGINT / SIGTERM. |
1 |
Failed to load configuration, resolve identity, construct the node, or start the node. The reason is printed to stderr before exit. |
Environment
| Variable | Description |
|---|---|
RUST_LOG |
Tracing filter directive. Overrides node.log_level from the config. Examples: info, debug, fips=trace,fips::node::handlers::mmp=debug. |
XDG_RUNTIME_DIR |
Used 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.
| Priority | Path | Purpose |
|---|---|---|
| 1 | /usr/local/etc/fips/fips.yaml (macOS, FreeBSD), C:\ProgramData\fips\fips.yaml (Windows), /etc/fips/fips.yaml (other Unix) |
System-wide defaults |
| 2 | ~/.config/fips/fips.yaml (%APPDATA%\fips\fips.yaml on Windows) |
User preferences |
| 3 | ~/.fips.yaml |
Legacy user config |
| 4 | ./fips.yaml |
Deployment-specific overrides |
On macOS and FreeBSD both system directories are probed: /etc/fips
first, then /usr/local/etc/fips, so the packaged file wins over a
leftover /etc/fips copy from an earlier install. Windows likewise
probes \etc\fips on the current drive, then C:\ProgramData\fips.
Adjacent to the highest-priority config file the daemon reads (or writes, on first start) the identity files:
| File | Mode | Purpose |
|---|---|---|
fips.key |
0600 |
Bech32 nsec for the persistent identity (Unix only; Windows inherits parent ACLs). |
fips.pub |
0644 |
Bech32 npub corresponding to fips.key. |
When node.identity.persistent is false (the default), a fresh
keypair is written to these files on every start.
On Windows the service writes its log to C:\ProgramData\fips\fips.log,
rolled at 10 MiB with four old files kept; a foreground run logs to the
console.
The control socket path is derived per control-socket.md.
See also
fipsctl— control-socket client.fipstop— live-status TUI.- configuration.md — YAML reference.
- control-socket.md — control-socket protocol.