Dev Server
Background daemon management for long-running services — daemons.json fields and crash recovery.
Dev Servers (daemons) manage long-running background processes — development servers, watchers, local services. Nebflow starts them, keeps them alive, and surfaces their status in the client.
Configuration lives in ~/.nebflow/daemons.json:
{
"daemons": [
{
"id": "website-dev",
"name": "Website Dev",
"command": "npm run dev",
"cwd": "~/projects/nebflow-website",
"env": { "NODE_ENV": "development" },
"autoStart": true,
"restartOnExit": true,
"port": 3000
}
]
}
Configuration Fields
| Field | Type | Required | Default | Description |
|-------|------|----------|---------|-------------|
| id | string | Yes | — | Unique daemon id |
| name | string | Yes | — | Display name in the client UI |
| command | string | string[] | Yes | — | Command to run (a plain string is split on whitespace) |
| cwd | string | No | — | Working directory |
| env | map | No | {} | Extra environment variables |
| autoStart | bool | No | false | Start when Nebflow starts |
| restartOnExit | bool | No | false | Restart when the process exits |
| port | int | No | — | Port the service listens on (enables health checks and open-in-browser) |
Crash Recovery
All optional and backward compatible — a minimal id/name/command entry gets sensible defaults:
| Field | Default | Description |
|-------|---------|-------------|
| restartBackoffSec | 2 | Delay before the first auto-restart; doubles per attempt, capped at 60s |
| restartMaxAttempts | 5 | Give up after this many consecutive crash restarts (crash-loop protection) |
| restartStableWindowSec | 60 | A run longer than this resets the consecutive-crash counter — a daemon that crashes once a day is never falsely exhausted |
| healthCheckSec | 15 | Periodically TCP-probes port; a live process with a closed port is treated as crashed. 0 disables the active health check (only process-exit detection remains) |
Status
A daemon reports one of four states — stopped, running, crashed, starting — plus runtime details: pid, start time, exit code, and recent output. When a port is configured, an independent reachability probe reports whether the port accepts TCP connections, so an externally-started server (not managed by Nebflow) still shows as reachable.
Managing Daemons
The client settings panel has a Dev Servers (开发服务器) section where you can add entries and start/stop daemons without editing the JSON by hand.