Releases: lablup/all-smi
Release list
v0.23.0
Migrate the Tenstorrent reader to upstream luwen 0.8.5 (Wormhole and Blackhole only), suppress Windows console windows on subprocess spawn, and bump sysinfo to 0.39 (MSRV now Rust 1.95).
all-smi v0.23.0
3 commits since v0.22.0. (330 lines added, 257 lines deleted)
New Features
None
Improvements
- Migrated the Tenstorrent NPU reader off the self-republished
all-smi-luwen-*fork crates to the upstream-published luwen crates, removing the local vendoring step from the build. (#266)
Bug Fixes
- Fixed console windows briefly appearing when all-smi spawns subprocesses on Windows. (#264)
CI/CD Improvements
- Enforced the
new_commandsubprocess helper with a clippydisallowed-methodsrule, so any new directstd::process::Command::newspawn site fails the existingclippy -D warningsgate. (#264) - Moved the Docker build base and Launchpad PPA toolchain references to Rust 1.95. (#258)
Technical Details
- Removed the obsolete
scripts/vendor_all_luwen.shvendoring script; luwen crates are now consumed directly from crates.io. (#266) - Grayskull is detected through a sysfs pre-check and skipped, with a
catch_unwindguard as defense in depth, so the reader no longer aborts when luwen 0.8.x panics on opening a Grayskull device. (#266)
Dependencies
- Migrated the Tenstorrent reader to luwen 0.8.5 (
luwen-api,luwen-pci,luwen-def;luwen-kmdtransitive). (#266) - Bumped sysinfo from 0.38 to 0.39. (#258)
Breaking Changes
- Minimum Supported Rust Version (MSRV) raised to Rust 1.95, required by sysinfo 0.39. Building from source now needs Rust 1.95 or newer. (#258)
- Tenstorrent Grayskull is no longer supported: luwen 0.8.x sunset Grayskull. Supported Tenstorrent architectures are now Wormhole and Blackhole, and Grayskull devices are detected and skipped. (#266)
Known Issues
None
What's Changed
- chore: bump sysinfo to 0.39 and raise MSRV to Rust 1.95 by @inureyes in #258
- Disable console window for subprocesses by @llMBQll in #264
- refactor: migrate Tenstorrent reader to upstream luwen 0.8.5 crates by @inureyes in #266
New Contributors
Full Changelog: v0.22.0...v0.23.0
v0.22.0
Harden the release workflow (macOS notarization fix, rebuild of past tags, per-OS target selector) and document Intel client GPU support across the README, help, and developer docs.
all-smi v0.22.0
3 commits since v0.21.1. (145 lines added, 62 lines deleted)
New Features
None
Improvements
- Documented Intel client GPU support (Arc / Iris Xe / Xe) across the README,
all-smi --help, and the developer guide, covering privilege requirements, the optional Level Zero (Sysman) backend, per-process GPU memory attribution viafdinfo, and Linux engine-busy utilization. - Added a README note clarifying that release binaries are signed: macOS archives are notarized and Windows binaries are Authenticode code-signed.
Bug Fixes
None
CI/CD Improvements
- Fixed macOS notarization by decoding the base64-stored App Store Connect
.p8key before invokingnotarytool(resolvesinvalidAsn1failures). - Made the release workflow self-healing: it now checks out the target tag's source (the release tag or the
release_taginput) so a current run can rebuild and re-notarize past tags. - Added a
workflow_dispatchtargetsinput (windows,linux,macos,all; comma-separated, empty means all) that a new setup job resolves into a filtered build matrix.
Technical Details
- 3 commits, 8 files changed, 145 insertions, 62 deletions since v0.21.1.
- Release-workflow changes are isolated to
.github/workflows/release.yml; documentation changes touchREADME.md,DEVELOPERS.md, and thedoctorhelp text insrc/cli.rs. - No application runtime code changed in this release; the version bump covers
Cargo.toml,Cargo.lock, the Debian changelog, and the man page.
Dependencies
None
Breaking Changes
None
Known Issues
None
What's Changed
Full Changelog: v0.21.1...v0.22.0
v0.21.1
all-smi v0.21.1 adds Intel client GPU (Arc/Iris/Xe) monitoring on Windows and Linux with an opt-in Level Zero Sysman backend, plus notarized macOS and code-signed Windows release binaries.
all-smi v0.21.1
10 commits since v0.21.0. (8789 lines added, 65 lines deleted)
New Features
- Intel client GPU reader for Arc, Iris, and Xe on Windows and Linux (#245)
- Opt-in Level Zero (oneAPI Sysman) backend for advanced Intel GPU metrics, gated behind the
level_zeroCargo feature (default off) (#251) - Per-process Intel GPU memory accounting via
fdinfoon Linux (#250) - Linux Intel GPU utilization computed from engine-busy counters (#249)
Improvements
- Level Zero Sysman is now the primary Intel GPU metrics source when the runtime is available, with automatic fallback to the sysfs/WMI baseline
Bug Fixes
- Harden Intel Level Zero and
fdinfopath handling to avoid failures on partial or unexpected driver layouts (#253)
CI/CD Improvements
- Release builds now produce notarized macOS binaries and code-signed Windows binaries (#243)
Technical Details
- The
level_zerofeature is off by default; when disabled the binary contains zero references to the Level Zero loader and the Intel readers behave exactly as before. - When enabled, the readers dynamically load
libze_loader.so.1(Linux) orze_loader.dll(Windows) at runtime vialibloading; absence of the runtime degrades gracefully back to the sysfs/WMI baseline. - v1 Level Zero surface: per-engine activity (including the XMX
COMPUTE_SINGLEclass) and power via the Sysman energy counter.
Dependencies
- No external crate version changes. Adds an optional runtime dependency on the Intel Level Zero loader (
libze_loader.so.1/ze_loader.dll), used only when thelevel_zerofeature is enabled.
Breaking Changes
None
Known Issues
- The Level Zero backend requires the Intel compute runtime (oneAPI Level Zero loader) to be installed. Without it, advanced Intel GPU metrics are unavailable and all-smi falls back to baseline sysfs/WMI metrics.
What's Changed
- build(release): add macOS notarization and Windows code signing by @inureyes in #243
- feat: add Intel client GPU reader (Arc/Iris/Xe) for Windows and Linux by @inureyes in #245
- feat(intel-gpu): compute Linux utilization from engine-busy counters by @inureyes in #249
- feat(intel-gpu): per-process GPU memory accounting via fdinfo by @inureyes in #250
- feat(intel-gpu): add opt-in Level Zero backend for advanced metrics by @inureyes in #251
- fix: harden Intel Level Zero and fdinfo paths by @inureyes in #253
- feat: make Level Zero Sysman primary metrics source by @inureyes in #254
- docs: remove v0.21.0+ availability notes from README by @inureyes in #255
Full Changelog: v0.21.0...v0.21.1
v0.21.0
all-smi v0.21.0 is a major release adding new subcommands (snapshot, record, view --replay, config, doctor), cluster-wide Users and Topology tabs in remote view, agentless SSH transport, TOML config support, NVIDIA vGPU/MIG/thermal/hardware details, and energy accumulation with cost estimation. Includes one breaking change: Prometheus label rename (index/uuid to gpu_index/gpu_uuid and npu_index/npu_uuid).
all-smi v0.21.0
46 commits since v0.20.1. (53,474 lines added, 1,536 lines deleted)
New Features
snapshotsubcommand (#195): One-shot JSON/CSV/Prometheus export to stdout or file without starting a long-running server, with multi-sample collection (--samples/--interval),--querydot-path column selection for CSV, symlink-safe atomic file writes (UnixO_NOFOLLOW+ mode0600), blocking-pool cap, and NaN/Inf float sanitization.recordsubcommand andview --replay(#197): Capture a live metric stream to a compressed NDJSON file (plain, gzip, zstd; rotating segments; local and remote sources) and play it back through the same TUI for post-hoc incident investigation. Replay supports play/pause, per-frame stepping, speed cycling (0.25x to 8x), +/-10s seeks, timecode jumps, and loop mode. Security hardening includes O_NOFOLLOW symlink refusal, 16 MiB per-line cap, and 128 MiB zstd window ceiling.doctorsubcommand (#198): Read-only suite of 51 environment checks across 14 categories (platform, privileges, container, nvidia, amd, apple, gaudi, tpu, tenstorrent, rebellions, furiosa, windows, env, network) with stable dotted check IDs, parallel execution, 3-second per-check timeout, PASS/WARN/FAIL/SKIP report in human and JSON formats, and--bundlesupport-archive packer with O_NOFOLLOW symlink refusal, owner-only permissions, secret-value redaction, and network-identifier scrubbing.- Cluster-wide Users tab (
Vkey) (#199): Aggregates per-process metrics across all scraped hosts into a single table with columns USER, NODES, GPUs, PROCS, VRAM, POWER (weighted approximation), LONGEST, and CMD. In-tab keys u/m/p/n/t for sorting, Enter for two-level drill-down (user to host to process list), ESC to exit drill-down, f to toggle system-account filter (uid<1000), and e to export the visible table to CSV. Mock support viaALL_SMI_MOCK_PROCESSES=1. CSV export hardened with O_NOFOLLOW + mode 0600 symlink refusal, RFC 4180 quoting, and formula-injection mitigation. - Topology view tab (
Tkey) (#200): NvLink/NUMA/PCIe graph and matrix view in remote mode. - Energy accumulation (kWh) and cost estimation (#201): Cumulative energy with
$/kWhconfig, disk-backed WAL for persistence across restarts. - TOML config file support (#202):
config init,config print,config validate, andconfig pathsubcommands. Platform-canonical config search order with override via--config. - SSE streaming endpoint and
/snapshotJSON (#203): Server-Sent Events streaming for API mode plus a one-shot snapshot endpoint. - Agentless SSH transport for view mode (#204): Pure-Rust
russhclient so musl static builds need no C dependency; no remote agent required. - NVIDIA vGPU SR-IOV monitoring (#172): Per-vGPU utilization, framebuffer memory, scheduler state, and host mode exported as Prometheus metrics. TUI renders per-GPU vGPU sub-sections. Remote parser reconstructs vGPU view from scraped metrics. Mock support via
ALL_SMI_MOCK_VGPU=1. - NVIDIA extended thermal monitoring and P-state (#173): Slowdown, shutdown, max-operating, and acoustic temperature thresholds exported as Prometheus metrics. TUI shows per-GPU thermal row with proximity highlighting (yellow within 5C of slowdown, red within 2C of shutdown). P-state (P0 to P15) surfaced in TUI and metrics.
- NVIDIA MIG (Multi-Instance GPU) monitoring (#174): Per-GPU MIG mode status and per-MIG-instance SM utilization, memory bandwidth utilization, and framebuffer used/total bytes exported as Prometheus metrics. TUI renders MIG instances as nested rows. Mock support via
ALL_SMI_MOCK_MIG=1. - NVIDIA extended hardware details (#175): NUMA node ID, GSP firmware mode and version, NvLink remote endpoint classification per active link, and GPM SM occupancy and memory bandwidth utilization exported as Prometheus metrics. TUI shows a compact HW row per GPU with NUMA node, GSP state, and NvLink count.
- System swap usage in TUI memory section (#226).
- Interactive filter query bar (
/) and threshold alerts (#196): DSL supporting field comparisons, range checks, and host-name pattern matching. Threshold alert history panel (A). - Targeted device refresh and stable correlation IDs (#225): Library API additions for selective refresh and per-device correlation identifiers.
config pathsubcommand and active TOML config path in --help (#224).- Unified cache paths via
dirs::cache_dir()(#229, #230): Linux$XDG_CACHE_HOME/all-smi/~/.cache/all-smi, macOS~/Library/Caches/all-smi, Windows%LOCALAPPDATA%\all-smi; one-time best-effort migration from~/.cache/all-smi/{records,energy-wal.bin}. - Standardize NPU Prometheus labels (#181):
npu_index/npu_uuidacross Tenstorrent, Rebellions, Furiosa, Gaudi, and Google TPU exporters and NPU mock templates. ALL_SMI_MOCK_HARDWARE_DETAILSenv-var gate (#182): Toggle extended NVIDIA mock metrics on demand.
Improvements
- Standardize TUI sub-item indentation across all GPU renderers (#184).
- Extract shared
truncate_strhelper intorenderers/utils.rs(#183). - Resolve clippy lints in mock server and example (#239).
Bug Fixes
- Correct view-mode remote node counter, spacing, and Topology alignment (#241).
- Restore terminal cursor on exit (Linux/tmux/VTE) via process-global atomic + idempotent restore_terminal() callable from Drop, panic hook, and signal handlers (#240).
- Anchor temperature/power/ANE sparklines to fixed Y-axis ranges (#237).
- Align Docker Rust toolchain with MSRV (#233).
- Harden cache migration symlink checks (#232).
- Resolve cross-PR review issues for NVIDIA monitoring features 172 to 175 (#176, #231).
- Resolve
recorddefault output path consistently (#223, #227). - Drop non-Press key events to fix Windows double-dispatch in view mode (#222).
- Upgrade libamdgpu_top to 0.11.5 to fix AMD GPU file descriptor leak (#219).
- Stabilize GPU Freq display on idle Apple Silicon (#217).
- Remove unused imports in doctor checks modules (#208).
- Pin libamdgpu_top to =0.11.4 and rename update_proc_usage call (#207).
CI/CD Improvements
- Realign Rust MSRV to 1.93 for Launchpad PPA builds (#238).
- Document Energy Session config in TUI help, --help, and manpage (#209).
- Gate unreleased subcommands with v0.21.0+ availability notes (#221).
- Add Teams release notification workflow.
- Align Launchpad PPA packaging with Rust 1.92, then Rust 1.93.
- Replace Ubuntu 24.10 packaging with Ubuntu 26.04 LTS.
- Fix Launchpad noble packaging inputs.
Technical Details
- New crate dependencies:
russh0.61 for agentless SSH,tar0.4.46 for thedoctor --bundlepacker,zstd0.13 andflate21 for compressed record/replay streams,toml1 anddirs6 for config file support. - The
furiosa-smi-rs2025.3.0 NPU support remains opt-in behind thefuriosaCargo feature; building it requires the Furiosa SDK C headers and is not enabled in default crate builds. libamdgpu_topis pinned exactly to=0.11.5because the crate has shipped semver-violating breaking changes in patch releases (0.11.4 renamedget_all_proc_usagetoupdate_proc_usage); re-evaluate the exact version on each bump.- Both
zstdandflate2are required at the crate level for record/replay because the writer auto-selects by file extension; dynamically gating on a feature would force operators to rebuild to record into a.gzstream.
Dependencies
- Bump dependencies to latest versions (#228).
- Pin tar to 0.4.46.
Breaking Changes
- Prometheus label rename: NVIDIA-specific metrics (pcie, thermal thresholds, performance state, hardware details, vGPU, MIG) now use
gpu_indexandgpu_uuidinstead ofindexanduuid. All non-NVIDIA NPU exporters (Tenstorrent, Rebellions, Furiosa, Gaudi, Google TPU) and NPU mock templates usenpu_indexandnpu_uuidinstead ofindexanduuid. The remote parser accepts both old and new label names for backward compatibility during migration; alerting rules, dashboards, and external scrapers that hard-code the old label names must be updated.
Known Issues
None.
What's Changed
- feat: add NVIDIA vGPU monitoring via nvml-wrapper 0.12 by @inureyes in #172
- feat: add NVIDIA thermal thresholds and P-state monitoring by @inureyes in #173
- feat: add NVIDIA MIG (Multi-Instance GPU) monitoring by @inureyes in #174
- feat: add extended NVIDIA hardware details (NUMA, GSP firmware, NvLink, GPM) by @inureyes in #175
- fix: cross-PR review fixes for NVIDIA monitoring features (#172-#175) by @inureyes in #176
- feat: standardize NPU Prometheus labels to npu_index/npu_uuid by @inureyes in #181
- feat: add ALL_SMI_MOCK_HARDWARE_DETAILS env-var gate for extended NVIDIA mock metrics by @inureyes in #182
- refactor: extract shared truncate_str helper into renderers/utils.rs by @inureyes in #183
- refactor: standardize TUI sub-item indentation across all GPU renderers by @inureyes in #184
- feat: add 'snapshot' subcommand for one-shot JSON/CSV/Prometheus output by @inureyes in #195
- feat(tui): interactive fil...
v0.20.1
Fix local header metric row jitter with fixed-width formatted fields and auto-promote CI releases.
all-smi v0.20.1
3 commits since v0.20.0. (169 lines added, 13 lines deleted)
New Features
None
Improvements
- Auto-promote pre-release to release after all CI builds complete (#0af81f1)
Bug Fixes
- Stabilize local header metric row width to prevent left-right jitter by using fixed-width formatted fields for CPU/GPU percentage, temperature, power, and RAM values (#170, #171)
CI/CD Improvements
- Add auto-promotion workflow that converts pre-release to full release once all platform builds complete
Technical Details
format_pct(): right-aligned 5-char numeric field +%= fixed 6-column width (" 0.0%"through"100.0%")format_temp(): right-aligned 3-char numeric field +°C= fixed 5-column width- Power format: right-aligned 5-char numeric field +
W= fixed 6-char width - RAM format:
usedvalue padded to matchtotaldigit width for stable/separator position - Added 6 new stability tests for fixed-width formatting
Dependencies
None
Breaking Changes
None
Known Issues
None
Full Changelog
v0.20.0
Release v0.20.0
New Features
- Redesigned local-mode TUI: Dedicated Activity panel with braille sparklines for GPU, ANE, and Pkg Power visualization
- CPU per-core view: Promoted to always-on display in the local Activity panel
- Host summary bar: One-line local-mode host summary for quick system overview
- Per-node LED grid: Relocated next to Cluster Overview in remote mode for better visibility
- Apple M5 Pro/Max Super core (S-CPU): Added support for the new S-CPU core type and new IOReport channel
Improvements
- Gate Cluster Overview and tabs behind remote mode for a cleaner local monitoring experience
- Polish local mode Activity panel — fix border off-by-one, P/E gauge alignment, @hostname suppression, ANE row always-on, and Processes header restyle
- Complete remaining epic 152 TUI integration gaps
Bug Fixes
- Fix Apple M5 Pro/Max Super core detection with new IOReport channel support (#168)
- Fix Activity panel border off-by-one rendering (#166)
- Fix P/E gauge alignment in local mode (#166)
- Suppress @hostname display in local mode (#166)
CI/CD Improvements
None
Technical Details
- New braille sparkline utility module (
src/ui/sparkline.rs) for real-time metric visualization - Refactored TUI layout to separate local and remote mode rendering paths
- IOReport channel updates for Apple M5 family support
Dependencies
None
Breaking Changes
None
Known Issues
None
v0.19.0
This release focuses on correctness on Apple Silicon: real CPU/GPU die temperatures are now reported through the native SMC path, macOS platform detection is cached to stop re-probing system_profiler every frame, and the process list's TIME+ column no longer pushes the Command column out of alignment for long-running processes.
New Features
None
Improvements
- Platform detection (
has_nvidia,has_gaudi, etc.) is now cached in a process-globalOnceLock, so macOS no longer spawnssystem_profiler SPPCIDataTypeon every view refresh. The probe runs at most once per process, eliminating hundreds of milliseconds of per-frame work on Apple Silicon. (#149) - Dashboard "Avg. Temp" now reports numeric °C on every platform. Apple Silicon gains a dedicated "Thermal" cell carrying qualitative thermal pressure level in the second row so both pieces of information remain visible. (#150)
- Per-GPU list view shows the real numeric die temperature on Apple Silicon instead of the thermal-pressure text, matching every other platform. (#150)
- On Apple Silicon, when the GPU temperature sensor is unavailable, the reader now falls back to the SMC CPU die temperature (CPU and GPU share the same SoC die, so the readings track closely). (#150)
Bug Fixes
- Apple Silicon SMC float decoding: SMC stores
flt(IEEE 754 single-precision) sensors in little-endian byte order, unlike the legacy SP78/FP fixed-point types which remain big-endian. Theconvert_value()helper was callingf32::from_be_bytes()for the FLT type, so everyTg*/Tp*/Te*sensor returned a randomly varying garbage value (e.g. 1e-32, 3e36) and the(10..=120)sanity filter rejected almost everything. Symptoms: GPU temperature showed 0 °C or sporadic 6/7 °C, CPU temperature showed 0 °C, and "Avg. Temp" on the cluster overview only displayed thermal pressure text. Switching the FLT branch tof32::from_le_bytes()restores accurate die temperatures (~50–60 °C idle on M1 Ultra). A regression test (test_flt_little_endian_decoding) prevents the endianness from silently flipping back. (#150) - Apple Silicon architecture detail key: The dashboard and aggregator looked up the GPU architecture field as
"Architecture", butapple_silicon_native(and the Prometheus exporter) wrote it lowercase as"architecture". The mismatch silently disabled the entireis_apple_siliconspecial-case path. Standardised on the lowercase form across all readers (Apple Silicon, NVIDIA, Jetson). (#150) cpu_macos::get_cpu_temperaturewas a stub that always returnedNone, so the live "CPU Temp." gauge was permanently stuck at 0 °C even though SMC was already collecting the value. It is now wired through the cachedNativeMetricsDatafetched inget_apple_silicon_cpu_info. (#150)- Process list
TIME+column alignment:fixed_widths[11]was 8 characters, butformat_cpu_timecan emit values up to 10 chars ("8760:00:00"at the 365-day cap). Values like"213:16:04"(9 chars) overflowed the column and pushedCommandone column right, breaking alignment with the header and with rows that had shorter times. The column is now 10 chars wide,format_cpu_time's width invariant is documented, and a new regression test (test_format_cpu_time_max_width_fits_time_column) enforces it at all boundary values. (#151)
CI/CD Improvements
None
Technical Details
src/device/macos_native/smc.rs: FLT sensor decoding switched fromfrom_be_bytestofrom_le_bytes; addedtest_flt_little_endian_decoding.src/device/apple_silicon*.rs,src/device/cpu_macos.rs, aggregators: unified"architecture"key casing, wired through CPU die temperature, added GPU→CPU temperature fallback.src/device/platform_detection.rs(and related): each detection function wrapped inOnceLockfor per-process caching.src/ui/process_renderer.rs:fixed_widths[11]bumped from 8 → 10;format_cpu_timedoc comment documents the 10-char width invariant; regression test enforces the invariant across boundary inputs from 0s through 365 days.src/view/ui_loop.rs,src/ui/layout.rs,src/common/config.rs: dashboard layout updates to carry thermal pressure in a second-row cell on Apple Silicon.
Dependencies
No dependency changes in this release.
Breaking Changes
None. The dashboard "Avg. Temp" cell now always shows a numeric temperature; on Apple Silicon, the second-row "Temp. Stdev" cell is repurposed as a "Thermal" cell carrying thermal pressure level. This is a visual change only and preserves all prior information.
Known Issues
None
What's Changed
- fix: cache platform detection results to avoid per-frame system_profiler by @inureyes in #149
- fix: decode SMC float sensors as little-endian on Apple Silicon by @inureyes in #150
- fix: widen process list TIME+ column to prevent Command drift by @inureyes in #151
Full Changelog: v0.18.1...v0.19.0
v0.18.1
What's Changed
This release focuses on TUI responsiveness and performance, particularly for remote/SSH monitoring sessions.
New Features
None
Improvements
- Increase marquee scroll speed now that per-frame stall is fixed
Bug Fixes
- Eliminate 1-second per-frame stall caused by
RuntimeEnvironment::detect()being invoked on every render - Make TUI terminal flush non-blocking to restore responsiveness over SSH
- Reduce TUI rendering overhead for remote/SSH sessions
- Drain pending key events after render to prevent input cascade when keys are held
- Cache per-frame filesystem reads and remove
detect()from tests - Gate Linux-only chassis functions with
cfg(target_os)to suppress macOS build warnings - Suppress macOS build warnings for Linux-only
OnceLockandmutbindings
CI/CD Improvements
None
Technical Details
RuntimeEnvironment::detect()is now cached rather than invoked on every frame, removing the dominant source of per-frame latency- TUI flush path converted to non-blocking writes so slow SSH links no longer block the render loop
- Key event draining after each render prevents input cascades on held keys
Dependencies
None
Breaking Changes
None
Known Issues
None
What's Changed
- refactor: migrate to Rust 2024 edition by @inureyes in #145
- feat: add DGX Spark (GB10) unified memory architecture support by @inureyes in #146
- feat: enrich chassis info with DMI data, thermal zones, and GPU power by @inureyes in #148
Full Changelog: v0.18.0...v0.18.1
v0.18.0
Release v0.18.0
Major TUI performance improvements: significantly reduced idle CPU usage through event-driven architecture, snapshot-based rendering, and hot-path optimizations.
New Features
- Event-driven UI wakeups to reduce TUI idle CPU consumption (#139)
- Snapshot AppState before rendering to shorten critical section (#140)
- Cache derived TUI view data to avoid per-frame sorting and cloning (#141)
- Trim hot-path rendering overhead in TUI frame assembly and diff pipeline (#142)
Improvements
- Add protobuf-devel to Fedora/RHEL build prerequisites in documentation (#143)
- Keep periodic refresh tick active so idle TUI stays alive
Bug Fixes
- Fix scroll calculation to use actual visible process rows
- Fix render throttle bypass for cursor/scroll input to restore responsiveness
CI/CD Improvements
None
Technical Details
- Rendering pipeline now uses snapshot-based architecture to minimize lock contention
- View data (sorting, filtering) is cached and only recomputed on state changes
- Frame assembly and diff pipeline optimized to reduce allocations in hot paths
- Event loop uses wakeup signals instead of polling for lower idle CPU
Dependencies
None
Breaking Changes
None
Known Issues
None
What's Changed
- feat: reduce TUI idle CPU with event-driven UI wakeups by @inureyes in #139
- feat: snapshot AppState before rendering to shorten critical section by @inureyes in #140
- feat: cache derived TUI view data to avoid per-frame sorting and cloning by @inureyes in #141
- feat: trim hot-path rendering overhead in TUI frame assembly and diff pipeline by @inureyes in #142
- docs: add protobuf-devel to Fedora/RHEL build prerequisites by @inureyes in #143
Full Changelog: v0.17.6...v0.18.0
v0.17.6
What's Changed in v0.17.6
New Features
None
Improvements
- Bump GitHub Actions to Node.js 24 compatible versions
Bug Fixes
None
CI/CD Improvements
- Update GitHub Actions workflows to use Node.js 24 compatible action versions
Technical Details
None
Dependencies
- Bump hyper from 1.6.0 to 1.9.0
- Bump nvml-wrapper from 0.12.0 to 0.12.1
- Bump libamdgpu_top from 0.11.2 to 0.11.3
- Update transitive dependencies to latest compatible versions
Breaking Changes
None
Known Issues
None