Your compute lab, in focus.
Native observability · Hardware · GPUs · Local AI · LAN & VPN
Workbench · Quick start · Connect your fleet · Architecture · Roadmap · Docs
Native V3 renderer · explicit synthetic QA fixtures · 25 October 2026 · Light / Dark
Moonitor brings local and remote machines into one desktop workbench. See which nodes are reachable, inspect their resources, identify resident AI models and check the provenance of available power readings. Collection stays on your machines; history stays in a local SQLite database.
Built in Rust, with Iced + wgpu for the desktop. No browser shell, cloud account or required monitoring server. This is an actively developed product; the roadmap separates shipped foundations from planned capabilities.
Single-host resource monitor · native renderer, synthetic QA fixtures
The current native UI is being redesigned under the owner's 25 October mandate and RFC. Four trust/interaction regressions are repaired; three alternative compositions are available as explicit design fixtures. No replacement composition is approved or shipped. See the qualification and open gates.
| View | What you can inspect today |
|---|---|
| Fleet | Dense comparative host matrix: CPU, RAM, GPU maximum, selected interface RX/TX, state and freshness; filters, sorting, preview and bounded row virtualization. |
| Hosts / Host monitor | A single-node cockpit with CPU/cores, individual GPUs, physical memory/swap, interfaces, filesystems, bounded processes and diagnostics. |
| Metrics | Resource families with drilldown to available readings and their provenance. |
| Processes | Searchable CPU/RSS table; CPU is percent of one core and can exceed 100%. This remains a bounded sample. |
| Investigate | Five-minute CPU/RAM/GPU charts with scale, sample inspection and explicit gaps. |
| Events | Current source diagnostics; a persisted event timeline is not yet available. |
| Setup | Add/edit/remove local, SSH and inventory-only hosts, persistent theme/density/inspector preferences. |
Moonlight and Deep Space use lunar whites, midnight blues and periwinkle. Choose them in Setup → Appearance; preferences survive restart. The V3 home is a resource matrix. The previous 3D renderer remains in regression tests.
Keyboard: Cmd/Ctrl + 1…7 changes section, Alt + ←/→ changes node, and
Tab / Shift + Tab moves focus. Full assistive-technology support remains open.
| Source | Available observations |
|---|---|
| macOS / Linux | CPU and per-core use, memory, swap, top processes, disk capacity and network-interface traffic. Linux PSI; supported temperature and battery sensors. |
| NVIDIA · NVML | Per-GPU utilization, memory, temperature, clocks, board power and throttle reasons, subject to device/driver support. |
| Apple Silicon · IOKit | GPU activity and shared-memory counters where exposed by the platform. Unified memory remains part of system RAM. |
| Ollama · local API | Loaded models and metadata returned by /api/ps. Loaded does not mean actively generating. |
| Inventory only | Devices without an agent remain visible as uninstrumented, without being counted as offline monitored nodes. |
Missing, unsupported, denied and stale readings are explicit states; zero is a valid measurement. GPU board watts are not whole-device watts. Summary GPU utilization is labeled as the observed maximum; individual accelerators remain visible in node detail.
Current scope: request-level token throughput, TTFT and queues are not yet instrumented. Events has no persisted timeline; Explore does not yet browse long-range history. Whole-device energy and integrated Wh are planned. Collection stops when the desktop closes.
Install Rust through rustup and your platform's native build tools: Xcode Command
Line Tools on macOS, or a C toolchain on Linux. A graphical desktop and a working
wgpu backend are required. Rust 1.96.0 is pinned in rust-toolchain.toml;
dependencies are pinned in Cargo.lock.
git clone git@github.com:mothx9/moonitor.git
cd moonitor
cargo run --release --locked -p moonitor-desktopThe repository is private; cloning requires access. Without an explicit or previously installed configuration, the app enrolls the local computer with a generated stable ID and displays real metrics. No configuration file is required.
scripts/run.shThis builds and opens .local/moonitor.app with the Moonitor icon. The bundle is
signed ad hoc for local use; a notarized download is not available yet.
The app creates a versioned settings.sqlite registry on first run. A previous
fleet.toml in the profile is imported once, preserving node IDs, the original file
and the separate history database. Packaging never embeds or copies a developer's
private fleet into a new installation.
| Platform | Default configuration and history directory |
|---|---|
| macOS | ~/Library/Application Support/moonitor/ |
| Linux | $XDG_DATA_HOME/moonitor/, or ~/.local/share/moonitor/ |
Use --config PATH and --data-dir PATH to select explicit locations.
Open Setup → Hosts & Connections → Add host. Choose this computer, SSH, or inventory-only. Enter a display name, destination alias/FQDN/IP, optional SSH user/port and the path of an already installed compatible agent. Save applies the configuration; IDs remain stable when labels change. Removal keeps history.
SSH uses the system client's keys and known_hosts, strict host-key checks and
batch mode. Moonitor does not accept unknown keys or install agents automatically.
Use your trusted administration workflow to build/install a compatible agent for
the destination's OS/architecture. An optional explicit installer is available:
cargo build --release --locked -p moonitor-agent
scripts/install-agent.sh compute.example /path/to/target-compatible/moonitor-agentThe legacy configuration example is optional import
material. --config PATH supplies the initial import only when the registry does
not exist. --data-dir PATH selects an isolated profile. One local collector is
allowed. Inventories are bounded by a 1 MiB serialized settings budget; this first
engine supports 32 simultaneous collection streams, independently of inventory
size. Additional nodes show an explicit capacity state. Fleet rendering is tested
with 500 fixture hosts; that does not qualify 500 concurrent SSH streams.
flowchart LR
subgraph Sources["Your machines"]
Local["Local collectors"]
Remote["Remote Rust agents"]
Runtime["Ollama API on each node"]
Runtime --> Local
Runtime --> Remote
end
subgraph Desktop["Moonitor desktop"]
Engine["Bounded ingestion<br/>validation and freshness"]
Model["Fleet and metric view models"]
Store[("SQLite WAL<br/>local summaries")]
UI["Iced workbench<br/>charts and node detail"]
Registry[("Versioned settings<br/>host registry + preferences")]
Engine --> Model
Engine --> Store
Store -->|recent history| Model
Model --> UI
Registry --> Engine
UI --> Registry
end
Local --> Engine
Remote -->|persistent SSH| Engine
| Crate | Responsibility |
|---|---|
moonitor-core |
Shared telemetry types, availability, source/quality metadata and snapshot validation. |
moonitor-agent |
Read-only platform, GPU and runtime collection at different polling intervals. |
moonitor-store |
SQLite WAL, five-second summaries and seven-day retention. |
moonitor-desktop |
Versioned settings, collection lifecycle, SSH, ingestion, view models and native resource workspaces. |
The diagram describes the current implementation. An optional always-on hub and a normalized observation/event store belong to later milestones.
- No prompt text, generated output, environment variables or full process command lines are collected by default.
- SSH uses strict host-key checks and batch mode; ingestion uses bounded channels and limits the size of incoming samples.
- Host addresses, credentials, local configuration and telemetry databases stay
outside version control.
.local/is ignored. - History currently stores compact summaries, including maximum GPU utilization; it does not yet preserve every per-GPU series or runtime event.
| Milestone | Scope | Status |
|---|---|---|
| V3 W1 · First vertical slice | Fleet-first native shell, host cockpit, settings persistence and GUI host CRUD; legacy import. | Implemented; qualification and remaining gates documented. |
| V2 W2 · Controller / Agent | Headless lifecycle, authenticated protocol, services, remote management. | Planned. |
| V2 W3 · Discovery | LAN, VPN peer providers and explicit enrollment/trust. | Planned. |
| V2 W4 · Telemetry / Investigate | Component history, events, services, request-level AI and energy coverage. | Planned. |
| V2 W5 · Release | Privacy/history audit, author-selected license, signing, packaging, accessibility and soak. | Planned. |
The supplied V3 UI specification replaces the former W1 layout. Read the product contract, UX system and qualification. The earlier blueprint and W0/W1 reports are historical evidence, not approval of this design. The repository remains private; current-file cleanup does not scrub Git history or authorize public release.
scripts/check.sh # format, compile, clippy and workspace tests
scripts/qa-ui.sh # graphical backend required; renderer-specific visual checksCI runs Rust checks on macOS and Linux. Visual qualification is a separate local
procedure: ten views, three viewport sizes and both themes, with interaction and
metric regression checks. The first run records candidate baselines in .local/;
it does not count as human approval. Test fixtures are compiled only for tests.
Capture a real session with the app's screenshot command:
cargo run --release --locked -p moonitor-desktop -- \
--theme dark --size 1440x900 \
--screenshot .local/overview.png --exit-after 12Use --no-scene for the list alternative. Contributors and coding agents should
read repository instructions before making changes.
| Start here | Engineering and evidence |
|---|---|
| Product blueprint | Architecture |
| Requirements | W0 audit, decisions and plan |
| W1 interface design | W0 qualification |
| Brand assets | W1 qualification |
Every number has a source. Every state has a meaning.
