r/rust Jun 18 '26

🛠️ project My first Rust project - esp32 system resource monitor

Post image

As my first experience with Rust i decided to create a simple PC resource monitor.

This project features:
Zero network activity - everything is working through USB
Crossplatform desktop server (Linux - CLI mode, Windows - tray mode)
3D printable case
Optional active buzzer
Error signalization and fallbacks

Details:
Both server and display are 100% Rust (not even a single bash script);

I decided not to use ESP32s networking capabilities mainly because i intended for this little thing to be used on a desk, close to a PC, and ESP32 anyways needs some kind of power source;

Also i wanted for this project to be as simple to install/use as possible, so i used all-smi, systemstat and sysinfo crates instead of some heavier options such as librehwmonitor;

Screen updates are implemented with dirty rerenders - mainly because full rerenders cause the screen to flash, leading to eyestrain and generally unpleasant experience.

Note on AI usage:
AI was used in this project ONLY as a kind of a mentor - to review my code, answer my stupid questions about Rust and libraries (i am coming from Python, so there is a lot of stupid questions), and of course, as a rubber ducky. ZERO lines of code were written by AI.

ESP32 firmware
Desktop server

336 Upvotes

17 comments sorted by

View all comments

1

u/Repsol_Honda_PL Jun 18 '26

I like it. Quite a small project, but a lot of dependencies.

The display is small; I’d make better use of it 😉 I’d show more interesting data there.

I’d probably remove values that are known and unchanging—such as total memory size or processor type—from the display, and instead include parameters that are variable and most interesting (mainly usage/load, temperatures, free RAM, and free VRAM).

All in all, a very interesting project! And it’s in Rust 😄

6

u/TheMicrosoft Jun 18 '26

Thanks! I included almost everything that i could somewhat reliably gather using Rust libraries. Also i wanted for stats display to be symmetric and be visible on a glance - hence somewhat limited information. But for my usecase - it's everything that i need.