Sysray
Modern host diagnostics in one binary.
Sysray is a system observability engine written in Rust. It is being built as a modern replacement for legacy local monitoring tools such as NMON: single binary, low overhead, cross-platform by design, and extensible from day one.
Current workspace version: 0.5.0
Positioning
Sysray is not presented as a finished enterprise platform today. What exists already is a serious technical foundation with working Linux collectors, a TUI, JSON/CSV/Prometheus exporters, a post-collection pipeline, and a cross-platform abstraction layer that is ready to receive real macOS and Windows implementations.
What Sysray aims to become:
- A fast local observability binary for Linux, macOS, and Windows
- A strong open core foundation for future Pro, Cloud, and enterprise offerings
- A modern Rust-native replacement for aging system tools
Product boundary:
- Sysray Core should include deep local diagnostics for advanced operators
- Sysray Enterprise should add governance, fleet-level control, and shared history
- Enterprise is not where local expert analysis gets hidden
Current Status
Current stage: early V1 foundation.
What is working now:
- Linux collectors for CPU, memory, disk, network, process, and system metrics
- Linux-specific cgroup v2 and PSI metrics in snapshots/exporters when available
- Partial real macOS and Windows support for baseline host collection paths
- Native CI validation on Linux, macOS, and Windows runners
- Expanded Linux CI coverage across multiple Ubuntu runner versions plus a
musltarget check - Interactive TUI mode
- One-shot snapshot export in JSON, CSV, and Prometheus text format
- Local recording to
.jsonlwith built-in rotation and raw retention controls - Post-collection computed metrics pipeline
- Cross-platform platform layer with Linux implementation and macOS/Windows stubs
- Service management scaffolding for
systemd,launchd, and Windows Task Scheduler - Shared technical reference catalog exposed in TUI, API, and CLI explain mode
- TUI depth can continue to grow with expert local diagnostics without becoming an enterprise-only feature
What is not finished yet:
- Real macOS collectors
- Real Windows collectors
- Full public launch assets: CI, tests, docs, changelog, release automation
- Enterprise features such as RBAC, SSO, retention, multi-host orchestration, SLA-level hardening
- Distributed scalability architecture
What We Can Honestly Claim Today
- Written in Rust
- Single binary application
- Apache 2.0 licensed
- Linux-first implementation with explicit cross-platform architecture
- Partial host-metric parity on macOS and Windows, with deeper collectors still pending
- Low-level system access on Linux with minimal abstraction overhead
- Forward-compatible metric schema via
serde(default)
What We Do Not Claim Yet
- Production-ready on all platforms
- Zero overhead
- Enterprise-ready
- Infinitely scalable
- Full macOS and Windows support
Why Sysray
- Clean internal architecture: collectors, scheduler, exporters, pipeline, platform layer
- Rust performance and memory safety
- Backward-compatible snapshot schema
- Clear path from local observability tool to larger platform
- Honest product posture: strong foundation first, marketing claims second
Commands
Use sysray --help for the live CLI and sysray <command> --help for per-command details.
Built-in recording rotation, retention, and closed-segment zip compression are now in the CLI. The standalone archive command is still planned and documented in docs/help.md.
The TUI now exposes a technical reference pane with / for search, ? for the index, l for the live logs pane, L to add watched paths, e for an error-focused logs view, 1 to 6 for operator presets, 7 to 0 for expert local diagnostics, g for inventory+, v for detail density, and i to switch fr/en. The Linux panel toggle now lives on k so l stays dedicated to logs. The index follows the active language and specialist view context. In practice, io is the broad storage preset, disk+ is the contention/performance drill-down, and inventory+ is the local topology / stack / refs view. The logs pane now follows active files incrementally with offset tracking and rotation/truncation detection.
Screens
Overview TUI:
Expert network view:
Expert pressure view:
Expert JVM view:
Expert disk view:
Disk inventory view:
These captures are generated from real terminal frames with:
# Interactive TUI
# One-shot snapshot
# Continuous recording
# HTTP server
# Top processes
# Watch one process
# Replay a recorded session
# Explain a technical term
# Service integration
Linux Install And Update
On Linux, install the release binary to a stable path instead of running from target/debug/ or target/release/.
Current Linux packaging assumptions:
- build and runtime target the generic Linux kernel surface, not a named distribution
- service installation is currently
systemd-oriented - non-
systemddistributions can still run the binary, but the bundled service installer is not a universal Linux service manager
Recommended user-level install:
This script:
- builds the release bundle if
dist/is missing - installs the release binary to
~/.local/bin/sysray - reinstalls the user service so it points to that stable binary path
For a fresh rebuild from the current workspace before install:
For a binary-only update without touching the service:
Manual update flow:
Configuration
Example configuration is available in config/sysray.toml.example.
Sysray uses:
- Config file:
sysray.toml - Env var:
SYSRAY_CONFIG - Binary name:
sysray
Recording defaults can now also be centralized in the config file:
record.interval_secsrecord.outputrecord.rotaterecord.max_file_size_mbrecord.keep_filesrecord.compress
TUI defaults can also be centralized:
tui.themetui.locale
Architecture
src/
├── main.rs
├── cli.rs
├── config.rs
├── service.rs
├── engine/
├── collectors/
├── exporters/
├── pipeline/
├── platform/
├── tui/
└── api/
Key design points:
collectors/: metric gathering and snapshot populationplatform/: OS-specific boundarypipeline/: derived metrics and alertsengine/: scheduling and runtime orchestrationexporters/: output formatsservice.rs: OS service integration
Detailed planning documents:
docs/help.mddocs/benchmarking.mddocs/reference-architecture.mddocs/product-scope.mddocs/metrics-matrix.mddocs/metrics-checklist.mddocs/community-cheatsheet.mddocs/enterprise-cheatsheet.mddocs/cross-os-cheatsheet.mddocs/backlog.mddocs/execution-roadmap.mddocs/cross-platform-validation.md
Cross-Platform Strategy
Sysray is cross-platform by architecture today, not yet by implementation completeness.
That distinction matters:
- Linux: real collector implementation
- macOS: baseline CPU, memory, disk, network, process, and system collection paths implemented, broader parity pending
- Windows: baseline CPU, memory, disk, network, process, and system collection paths implemented, broader parity pending
Validation is tracked separately from implementation:
- Linux: validated locally and in CI
- macOS: baseline implementation present and validated in native CI, with broader parity still pending
- Windows: baseline implementation present and validated in native CI, with broader parity still pending
Linux support should also be read carefully:
- the code targets Linux generally, not an explicit matrix of every distribution
- collector compatibility primarily depends on standard kernel interfaces such as
/proc - service management compatibility depends on the init system, and only
systemdis bundled today
The goal is that adding or improving an OS implementation happens primarily inside src/platform/, not by scattering conditional compilation across collectors.
Validation policy is documented in docs/cross-platform-validation.md.
Public Roadmap
V1
- Stabilize Linux collectors
- Add tests and CI
- Finish public repository assets
- Improve TUI polish and exporter coverage
- Validate service installation flows
V2
- Real macOS support
- Real Windows support
- JVM and container depth
- Replay and alerting improvements
V3
- Multi-host architecture
- Web and API ecosystem
- Advanced enterprise features
For a stricter breakdown of what belongs to V1, V2, V3, and enterprise scope, see docs/product-scope.md.
Community And Enterprise
Sysray Core is intended to stay community-accessible and open source. That community/core layer should keep getting the main local observability primitives: collectors, TUI, exporters, replay, Linux depth, and cross-platform baseline support.
The enterprise track is a separate concern:
- governance and access control
- supportability and release discipline
- compatibility guarantees
- hardened deployment and auditability
Enterprise should add operational guarantees around the core, not replace the community roadmap or hide core host observability behind a paywall.
Build
Benchmarking
Use the Linux benchmark harness to measure local overhead before making performance claims:
Results are written under .benchmarks/<UTC_RUN_ID>/ with both summary.md and summary.csv.
On the March 3, 2026 Rocky Linux baseline run (30s, 5s, 25 snapshots), sysray record measured about 0.35% average CPU and ~13 MB RSS, while repeated one-shot JSON snapshots measured about 0.83% average CPU with a similar peak RSS. See docs/benchmarking.md.
cargo build only rebuilds the workspace binary in target/debug/.
It does not update the user service binary installed in ~/.local/bin/sysray.
Dev Workstation Update Flow
For this local Linux developer setup, the user service runs the installed binary path, not the build output from target/debug/.
Current service runner:
~/.config/systemd/user/sysray.service->~/.local/share/sysray/sysray-service.sh~/.local/share/sysray/sysray-service.sh->~/.local/bin/sysray
Recommended flow after code changes:
This script runs:
cargo fmt --allcargo clippy --all-targets -- -D warningscargo testcargo build./scripts/install-linux-user.sh --force-buildsystemctl --user restart sysray.servicesystemctl --user status sysray.service --no-pagerjournalctl --user -u sysray.service -n 50 --no-pager
If you only run cargo build, you have rebuilt the dev binary in target/debug/, but the service still uses the installed binary in ~/.local/bin/sysray until you reinstall it.
If you want the manual flow instead of the helper script:
Complete Build
Run the full local release flow in one command:
This command runs:
cargo fmt --all -- --checkcargo clippy --all-targets -- -D warningscargo testcargo build --release
It then creates:
dist/sysray-<version>-<target>/standalone/dist/sysray-<version>-<target>/install-prereqs/dist/sysray-<version>-<target>.tar.gzdist/sysray-<version>-<target>.zipon Windows targetsdist/sysray-<version>-<target>.SHA256SUMSdist/sysray-<version>-<target>.SHA256SUMS.ascwhengpgis available andSYSRAY_GPG_KEY_IDis set
CI runs this same script on Linux, macOS, and Windows and uploads the generated dist/ artifacts automatically.
Release publication on GitHub is triggered by pushing a v* tag and requires the signing secrets documented in docs/release-process.md.
License
Apache License 2.0.
Sysray Core is intended to remain open source.
Author
Kevin Vanden-Brande