Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
Syspulse
One daemon manager. Every platform.
Syspulse is a lightweight, cross-platform daemon manager that gives developers and DevOps engineers a unified way to control long-running processes across Windows, macOS, and Linux. Define your services in a single .sys file, manage them with consistent commands, and stop wrestling with platform-specific quirks.
Why Syspulse?
Managing services across operating systems means juggling systemd, launchd, Windows Services, and a dozen edge cases. Syspulse replaces all of that with a single, consistent interface.
| Capability | What You Get |
|---|---|
| Cross-platform consistency | Same config, same commands — Windows, macOS, Linux |
| Health monitoring | Built-in HTTP, TCP, and command-based health checks |
| Smart restarts | Automatic recovery with exponential backoff |
| Log rotation | Configurable retention with compression support |
| Scheduled jobs | Cron-style scheduling without external dependencies |
| Resource limits | Memory and CPU caps to prevent runaway processes |
For a deeper comparison with alternatives, see the Decision Guide →
Quick Start
Install
Configure
Create a .sys file to define your daemons:
# mydaemons.sys
[[]]
= "web-server"
= ["python", "-m", "http.server", "8000"]
= "Simple HTTP server"
Run
& # Start the daemon manager
For the full walkthrough, see the Quick Start Guide →
Features
Process Lifecycle — Start, stop, and restart daemons with graceful shutdown and signal handling.
Health Monitoring — Continuous HTTP, TCP, or command-based health checks with automatic recovery on failure.
Restart Policies — Configurable strategies including exponential backoff, max retry limits, and cooldown periods.
Log Rotation — Automatic log file rotation with size thresholds, retention limits, and optional compression.
Scheduling — Cron-style job scheduling for periodic tasks, no external scheduler required.
Resource Limits — Set memory and CPU usage caps to prevent any single process from starving the system.
JSON API — Machine-parseable output for every command, making Syspulse easy to integrate into CI/CD pipelines and monitoring tools.
Tagging — Group and filter daemons by tags for streamlined bulk operations.
Documentation
| Resource | Description |
|---|---|
| Quick Start Guide | Step-by-step tutorial to get running in minutes |
| Configuration Reference | Complete .sys file options and examples |
| CLI Reference | Every command, flag, and option |
| Why Syspulse? | Comparison with alternatives and decision guide |
Examples
The examples/ directory contains ready-to-use configurations:
- Simple single-daemon setups
- Multi-daemon configurations with health checks and restart policies
- Platform-specific examples for Windows, macOS, and Linux
- Scheduled job configurations
Architecture
Syspulse is built with Rust (2021 edition) and organized as a Cargo workspace with three crates:
syspulse/
├── crates/
│ ├── syspulse-core/ # Core daemon management logic
│ ├── syspulse-cli/ # Command-line interface
│ └── syspulse-py/ # Python bindings (PyO3)
├── examples/ # Sample configurations
└── docs/ # Documentation
syspulse-core
The engine. Handles process lifecycle, health monitoring, configuration parsing, and IPC.
syspulse-core/src/
├── lib.rs # Crate root, re-exports public API
├── manager.rs # High-level daemon manager
├── config.rs # TOML .sys file parsing
├── process/
│ ├── unix.rs # Unix process handling
│ └── windows.rs # Windows process handling
├── health/
│ ├── http.rs # HTTP health checks
│ ├── tcp.rs # TCP health checks
│ └── command.rs # Exec-based health checks
├── ipc/
│ └── protocol.rs # IPC message definitions
└── utils.rs # Shared helpers
Platform modules expose a unified ProcessHandler trait — each file implements the OS-specific version. Health checks share a common trait with one module per check type. Public API is re-exported from lib.rs to keep the crate surface small.
syspulse-cli
The interface. Translates user commands into IPC calls against the running daemon manager.
syspulse-cli/src/
├── main.rs # Entry point, async runtime setup
├── commands/
│ ├── start.rs # syspulse start
│ ├── stop.rs # syspulse stop
│ ├── restart.rs # syspulse restart
│ ├── status.rs # syspulse status
│ ├── add.rs # syspulse add
│ ├── remove.rs # syspulse remove
│ ├── init.rs # syspulse init
│ ├── list.rs # syspulse list
│ ├── logs.rs # syspulse logs
│ └── mod.rs # Command registry
├── client.rs # IPC client
└── output.rs # Plain text / JSON formatting
Commands use clap derive macros for argument parsing. All command functions are pub async fn run(...) -> Result<()>. Output format (plain text or JSON) is toggled via the --json flag.
syspulse-py
Python bindings powered by PyO3 and built with Maturin, exposing core functionality to Python consumers.
Conventions
The codebase follows a consistent set of patterns across all crates:
- Error handling —
thiserrorfor typed errors,anyhowfor context propagation. Nounwrap()orexpect()in production code. - Async runtime — Tokio with full features. No mixing of sync and async I/O in the same function.
- Testing — Inline test modules only (
#[cfg(test)] mod testsin source files), no separatetests/directory. - Linting — All code passes
cargo clippywithout warnings and is formatted withrustfmt. - State storage — SQLite via
rusqlitefor daemon state persistence.
Development
Build from source
Run tests
Python bindings
Note: PyO3 0.24 does not yet support Python 3.14.
# Default build
./scripts/build-python.ps1
# Build the full workspace using the venv interpreter
./scripts/build-python.ps1 -Workspace
# Target a specific Python version
./scripts/build-python.ps1 -PythonVersion 3.11 -VenvPath .venv311