Network Weather can be configured via a JSON file at ~/.nwx/config.json. All settings are optional — if no config file exists, the app uses built-in defaults.
Config File Location
| Platform |
Path |
| macOS |
~/.nwx/config.json |
Create the directory and file:
mkdir -p ~/.nwx
cat > ~/.nwx/config.json << 'EOF'
{
"suppressWelcomeFlow": true
}
EOF
Supported Settings
All fields are optional. Only include what you want to override.
Updates & Onboarding
| Key |
Type |
Default |
Description |
suppressWelcomeFlow |
boolean |
false |
Skip onboarding flow (for enterprise/MSP silent installs) |
disableSparkle |
boolean |
false |
Disable Sparkle auto-updates; use C2-based update checking instead |
appcastURL |
string |
(Info.plist) |
Custom Sparkle appcast URL for internal update servers |
Logging
| Key |
Type |
Default |
Description |
logLevel |
string |
"info" |
Log verbosity: "trace", "debug", "info", "warning", "error" |
Measurement Intervals
| Key |
Type |
Default |
Description |
measurementIntervalAC |
number |
300 |
Full measurement cycle on AC power (seconds) |
measurementIntervalBattery |
number |
900 |
Full measurement cycle on battery (seconds) |
Topology Discovery
| Key |
Type |
Default |
Description |
maxPathsToDiscover |
integer |
1 |
Paths to discover per endpoint (multipath detection) |
topologyCacheTTL |
number |
300 |
How long topology results are cached (seconds) |
Hop Monitoring
| Key |
Type |
Default |
Description |
hopPingIntervalAC |
number |
5 |
Per-hop ping interval on AC power (seconds) |
hopPingIntervalBattery |
number |
15 |
Per-hop ping interval on battery (seconds) |
Health Analysis
| Key |
Type |
Default |
Description |
healthAnalysisInterval |
number |
30 |
Minimum time between health analysis runs (seconds) |
healthAnalysisLoggingDebounce |
number |
300 |
Rate limiting for health analysis log output (seconds) |
HTTP Probing
| Key |
Type |
Default |
Description |
httpProbeIntervalAC |
number |
30 |
HTTP probe interval on AC power (seconds) |
httpProbeIntervalBattery |
number |
90 |
HTTP probe interval on battery (seconds) |
Gateway Telemetry
| Key |
Type |
Default |
Description |
gatewayTelemetryRefreshIntervalAC |
number |
300 |
Gateway data refresh on AC power (seconds) |
gatewayTelemetryRefreshIntervalBattery |
number |
900 |
Gateway data refresh on battery (seconds) |
Notifications
| Key |
Type |
Default |
Description |
notificationsEnabled |
boolean |
true |
Enable macOS notifications for network impairments |
notificationMinSeverity |
string |
"warning" |
Minimum severity to trigger a notification: info, warning, critical |
UI Behavior
| Key |
Type |
Default |
Description |
openUIAtLaunch |
boolean |
true |
Open the main window at launch. Set to false to launch silently into menu bar. |
This setting can also be toggled from the menu bar dropdown ("Open UI at Launch"). The config file value takes priority over the menu bar toggle.
Example Config
Enterprise deployment with onboarding suppressed, Sparkle disabled, and more frequent measurements:
{
"suppressWelcomeFlow": true,
"disableSparkle": true,
"logLevel": "info",
"measurementIntervalAC": 120,
"measurementIntervalBattery": 600
}
Managed Preferences (MDM)
On macOS, IT administrators can enforce settings via MDM configuration profiles. MDM-pushed values take priority over config.json and cannot be overridden by the user.
Bundle ID domain: com.networkweather.nwx.macos
Supported MDM Keys
| Key |
Type |
Description |
disableSparkle |
Bool |
Disable Sparkle auto-updates |
appcastURL |
String |
Custom appcast URL |
suppressWelcomeFlow |
Bool |
Skip onboarding |
c2BaseURL |
String |
Override C2 server URL |
neverAsksForAdmin |
Bool |
Block privilege escalation prompts |
logLevel |
String |
Override log level |
Example .mobileconfig Profile
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>PayloadContent</key>
<array>
<dict>
<key>PayloadType</key>
<string>com.networkweather.nwx.macos</string>
<key>PayloadIdentifier</key>
<string>com.networkweather.nwx.macos.managed</string>
<key>PayloadUUID</key>
<string>A1B2C3D4-E5F6-7890-ABCD-EF1234567890</string>
<key>PayloadVersion</key>
<integer>1</integer>
<key>disableSparkle</key>
<true/>
<key>suppressWelcomeFlow</key>
<true/>
<key>neverAsksForAdmin</key>
<true/>
</dict>
</array>
<key>PayloadIdentifier</key>
<string>com.example.corp.nwx-policy</string>
<key>PayloadType</key>
<string>Configuration</string>
<key>PayloadUUID</key>
<string>F1E2D3C4-B5A6-7890-1234-567890ABCDEF</string>
<key>PayloadVersion</key>
<integer>1</integer>
<key>PayloadDisplayName</key>
<string>Network Weather - IT Policy</string>
</dict>
</plist>
Override Priority (highest to lowest)
| Priority |
Source |
User-writable? |
| 1 (highest) |
MDM managed preferences |
No |
| 2 |
~/.nwx/config.json |
Yes |
| 3 (lowest) |
Built-in defaults |
— |
Deploying Config Files
Pre-install (Recommended)
Place the config file before installing the application:
mkdir -p ~/.nwx
cp config.json ~/.nwx/config.json
Via MDM
Deploy the file to each user's home directory:
/Users/<username>/.nwx/config.json
Or use Managed Preferences via a .mobileconfig profile for settings that should be enforced by IT policy.
Validation & Error Handling
- Missing file: Not an error — all defaults used
- Invalid JSON: Logged as error to stderr, defaults used
- Unknown keys: Silently ignored (forward-compatible)
- Active overrides: Logged to stderr on startup (e.g.,
Active config overrides: logLevel, disableSparkle)