<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: econovibe</title>
    <description>The latest articles on DEV Community by econovibe (@econovibe).</description>
    <link>https://dev.to/econovibe</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4166263%2Fb8f15366-7a90-4623-9bf4-dc53aee168b2.png</url>
      <title>DEV Community: econovibe</title>
      <link>https://dev.to/econovibe</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/econovibe"/>
    <language>en</language>
    <item>
      <title>I built a privacy-first, cross-platform hardware information tool in Rust</title>
      <dc:creator>econovibe</dc:creator>
      <pubDate>Tue, 06 Oct 2026 11:40:10 +0000</pubDate>
      <link>https://dev.to/econovibe/i-built-a-privacy-first-cross-platform-hardware-information-tool-in-rust-4l3h</link>
      <guid>https://dev.to/econovibe/i-built-a-privacy-first-cross-platform-hardware-information-tool-in-rust-4l3h</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpce285cwczao2vamsb5o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpce285cwczao2vamsb5o.png" alt=" " width="800" height="564"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There are already plenty of applications that can tell you what hardware is inside your computer.&lt;/p&gt;

&lt;p&gt;CPU-Z, HWiNFO, Speccy, system utilities built into the operating system — this is definitely not a new category of software.&lt;/p&gt;

&lt;p&gt;But I wanted to build my own.&lt;/p&gt;

&lt;p&gt;The result is &lt;strong&gt;MyHardwareInfo&lt;/strong&gt;, an open-source desktop application for inspecting your computer's hardware and system information locally.&lt;/p&gt;

&lt;p&gt;It runs on &lt;strong&gt;Windows, Linux, and macOS&lt;/strong&gt;, is built with &lt;strong&gt;Rust and egui/eframe&lt;/strong&gt;, and is designed around a simple principle:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Your hardware information should stay on your computer.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;GitHub:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/econovibe/MyHardwareInfo" rel="noopener noreferrer"&gt;https://github.com/econovibe/MyHardwareInfo&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What is MyHardwareInfo?
&lt;/h2&gt;

&lt;p&gt;MyHardwareInfo is a native desktop application that collects hardware and operating system information and presents it through a simple graphical interface.&lt;/p&gt;

&lt;p&gt;The application currently has nine main areas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Overview&lt;/li&gt;
&lt;li&gt;CPU&lt;/li&gt;
&lt;li&gt;GPU&lt;/li&gt;
&lt;li&gt;Memory&lt;/li&gt;
&lt;li&gt;Motherboard&lt;/li&gt;
&lt;li&gt;Storage&lt;/li&gt;
&lt;li&gt;Network&lt;/li&gt;
&lt;li&gt;Operating System&lt;/li&gt;
&lt;li&gt;Full Report&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It can collect information such as CPU details and utilization, memory usage, physical storage, mounted volumes, graphics hardware, network configuration, operating system information, motherboard and firmware data, depending on what each operating system and driver exposes.&lt;/p&gt;

&lt;p&gt;The goal isn't to replace every specialized diagnostic tool.&lt;/p&gt;

&lt;p&gt;Instead, I wanted one straightforward application that could give me a useful overview of a computer without requiring an account, cloud service, installer ecosystem, or telemetry.&lt;/p&gt;




&lt;h2&gt;
  
  
  Privacy was one of the main design goals
&lt;/h2&gt;

&lt;p&gt;Hardware inspection applications can see surprisingly sensitive information.&lt;/p&gt;

&lt;p&gt;A system report may contain things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;computer and user names&lt;/li&gt;
&lt;li&gt;disk serial numbers&lt;/li&gt;
&lt;li&gt;motherboard identifiers&lt;/li&gt;
&lt;li&gt;MAC addresses&lt;/li&gt;
&lt;li&gt;IP addresses&lt;/li&gt;
&lt;li&gt;gateways&lt;/li&gt;
&lt;li&gt;DNS configuration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because of that, MyHardwareInfo was designed to operate locally.&lt;/p&gt;

&lt;p&gt;The application has:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No accounts.&lt;br&gt;&lt;br&gt;
No telemetry.&lt;br&gt;&lt;br&gt;
No analytics.&lt;br&gt;&lt;br&gt;
No update checks.&lt;br&gt;&lt;br&gt;
No uploads.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Collection, clipboard operations, and report generation happen locally.&lt;/p&gt;

&lt;p&gt;The application does not intentionally make Internet requests or DNS lookups while collecting system information.&lt;/p&gt;

&lt;p&gt;Network information is read from the computer's existing configuration rather than discovered by sending probe packets.&lt;/p&gt;
&lt;h3&gt;
  
  
  Reports are redacted by default
&lt;/h3&gt;

&lt;p&gt;This became another important feature.&lt;/p&gt;

&lt;p&gt;When generating a report, potentially identifying information such as computer names, user names, serial numbers, MAC addresses, IPv4/IPv6 addresses, gateways, and DNS servers is redacted by default.&lt;/p&gt;

&lt;p&gt;The user has to explicitly opt in if they want those identifiers included in the Full Report.&lt;/p&gt;

&lt;p&gt;This makes it easier to share a report without accidentally publishing information that probably shouldn't be public.&lt;/p&gt;


&lt;h2&gt;
  
  
  From Windows-only to cross-platform Rust
&lt;/h2&gt;

&lt;p&gt;The original version of MyHardwareInfo was a Windows application built with WPF.&lt;/p&gt;

&lt;p&gt;I eventually rebuilt the application in &lt;strong&gt;Rust&lt;/strong&gt;, using &lt;strong&gt;egui/eframe&lt;/strong&gt; for the interface.&lt;/p&gt;

&lt;p&gt;That allowed the project to evolve into a native application for:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Windows x64&lt;br&gt;&lt;br&gt;
Linux x64&lt;br&gt;&lt;br&gt;
macOS Apple Silicon&lt;br&gt;&lt;br&gt;
macOS Intel&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The cross-platform part turned out to be one of the most interesting challenges because there isn't a single universal API for getting detailed hardware information.&lt;/p&gt;

&lt;p&gt;Each operating system exposes information differently.&lt;/p&gt;


&lt;h2&gt;
  
  
  How hardware information is collected
&lt;/h2&gt;

&lt;p&gt;The application uses different local sources depending on the operating system.&lt;/p&gt;
&lt;h3&gt;
  
  
  Windows
&lt;/h3&gt;

&lt;p&gt;On Windows, MyHardwareInfo uses technologies including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;WMI&lt;/li&gt;
&lt;li&gt;Windows Registry&lt;/li&gt;
&lt;li&gt;Win32 APIs&lt;/li&gt;
&lt;li&gt;system performance counters&lt;/li&gt;
&lt;li&gt;Direct3D-related system information&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It can collect information about physical disks, memory modules, CPU metrics, display configuration, motherboard information, network configuration, and other Windows-specific hardware data.&lt;/p&gt;

&lt;p&gt;There is also optional support for locally exposed NVIDIA metrics when available.&lt;/p&gt;
&lt;h3&gt;
  
  
  Linux
&lt;/h3&gt;

&lt;p&gt;Linux is very different.&lt;/p&gt;

&lt;p&gt;The Linux collector combines the Rust &lt;code&gt;sysinfo&lt;/code&gt; crate with information exposed through:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/proc&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;DRM&lt;/li&gt;
&lt;li&gt;DMI/firmware interfaces&lt;/li&gt;
&lt;li&gt;routing information&lt;/li&gt;
&lt;li&gt;filesystem/device information&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;lspci&lt;/code&gt; is optional and can provide friendlier PCI device names when installed, but basic PCI identifiers remain available without it.&lt;/p&gt;

&lt;p&gt;One interesting limitation is DIMM information.&lt;/p&gt;

&lt;p&gt;Detailed memory module information often requires elevated privileges on Linux, and MyHardwareInfo deliberately runs as the current user instead of requesting root access.&lt;/p&gt;

&lt;p&gt;If the operating system does not expose something safely to the current user, the application prefers to report it as unavailable rather than requiring privilege escalation.&lt;/p&gt;
&lt;h3&gt;
  
  
  macOS
&lt;/h3&gt;

&lt;p&gt;On macOS, the application combines &lt;code&gt;sysinfo&lt;/code&gt; with Apple's local system utilities and APIs, including structured output from tools such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;system_profiler&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;diskutil&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It also reads local routing, resolver, hardware, disk, GPU, display, memory, and firmware information.&lt;/p&gt;

&lt;p&gt;Apple Silicon creates some interesting reporting challenges because CPU and GPU share unified memory.&lt;/p&gt;

&lt;p&gt;Instead of pretending that an Apple Silicon GPU has a conventional dedicated VRAM value, MyHardwareInfo identifies it as unified/shared memory.&lt;/p&gt;


&lt;h2&gt;
  
  
  No administrator or root requirement
&lt;/h2&gt;

&lt;p&gt;Another design decision was to keep the application running as the normal user.&lt;/p&gt;

&lt;p&gt;MyHardwareInfo does not request administrator or root privileges.&lt;/p&gt;

&lt;p&gt;That means some information may not always be available.&lt;/p&gt;

&lt;p&gt;Depending on the operating system, hardware, drivers, and permissions, this can include things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;DIMM details&lt;/li&gt;
&lt;li&gt;serial numbers&lt;/li&gt;
&lt;li&gt;GPU temperatures&lt;/li&gt;
&lt;li&gt;GPU utilization&lt;/li&gt;
&lt;li&gt;GPU clocks&lt;/li&gt;
&lt;li&gt;some firmware information&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'd rather show a field as unavailable than require unnecessary privilege escalation just to populate it.&lt;/p&gt;


&lt;h2&gt;
  
  
  Keeping the interface responsive
&lt;/h2&gt;

&lt;p&gt;Hardware discovery isn't always instant.&lt;/p&gt;

&lt;p&gt;WMI queries, filesystem inspection, firmware information and platform utilities can take time.&lt;/p&gt;

&lt;p&gt;Because of that, hardware collection does not run directly on the UI thread.&lt;/p&gt;

&lt;p&gt;MyHardwareInfo performs collection in background workers and sends the resulting snapshot back to the interface.&lt;/p&gt;

&lt;p&gt;The user can manually request a new hardware snapshot using &lt;strong&gt;Refresh&lt;/strong&gt;, &lt;code&gt;F5&lt;/code&gt;, or &lt;code&gt;Alt+R&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;This was particularly important for keeping the GUI responsive even when one hardware category takes longer than expected.&lt;/p&gt;


&lt;h2&gt;
  
  
  Exporting hardware information
&lt;/h2&gt;

&lt;p&gt;Besides viewing information in the interface, the application can generate reports.&lt;/p&gt;

&lt;p&gt;Currently it supports:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TXT reports&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Useful when you just want a readable system specification.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;JSON reports&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Useful if the hardware information needs to be processed by another program or script.&lt;/p&gt;

&lt;p&gt;Values displayed in the application can also be selected and copied.&lt;/p&gt;

&lt;p&gt;As mentioned earlier, identifying fields in generated reports are redacted by default.&lt;/p&gt;


&lt;h2&gt;
  
  
  Testing hardware software is surprisingly difficult
&lt;/h2&gt;

&lt;p&gt;One thing I learned from this project is that cross-platform hardware detection is difficult to test properly.&lt;/p&gt;

&lt;p&gt;A program compiling successfully for another operating system doesn't prove that hardware detection actually works there.&lt;/p&gt;

&lt;p&gt;So the project uses native CI runners for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Windows x64&lt;/li&gt;
&lt;li&gt;Ubuntu x64&lt;/li&gt;
&lt;li&gt;macOS Apple Silicon&lt;/li&gt;
&lt;li&gt;macOS Intel&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tests cover areas including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;real CPU and memory collection&lt;/li&gt;
&lt;li&gt;operating system collection&lt;/li&gt;
&lt;li&gt;report redaction&lt;/li&gt;
&lt;li&gt;JSON serialization/deserialization&lt;/li&gt;
&lt;li&gt;formatting&lt;/li&gt;
&lt;li&gt;hardware parser fixtures&lt;/li&gt;
&lt;li&gt;category failure isolation&lt;/li&gt;
&lt;li&gt;keyboard navigation&lt;/li&gt;
&lt;li&gt;accessibility nodes&lt;/li&gt;
&lt;li&gt;release packaging&lt;/li&gt;
&lt;li&gt;offline-source policy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There is also a GUI smoke test that launches the application, collects hardware data, renders a report, and closes automatically.&lt;/p&gt;

&lt;p&gt;Of course, hardware software can never be completely validated by CI.&lt;/p&gt;

&lt;p&gt;Different GPUs, drivers, motherboards, firmware implementations and unusual storage configurations will always introduce edge cases.&lt;/p&gt;


&lt;h2&gt;
  
  
  Checking the offline policy
&lt;/h2&gt;

&lt;p&gt;Since the application claims to be privacy-first and offline, I wanted that principle to exist in the project itself rather than only in the README.&lt;/p&gt;

&lt;p&gt;The test suite includes an offline policy check that scans the application's Rust and build sources for communication and browser APIs that shouldn't be there.&lt;/p&gt;

&lt;p&gt;It also validates direct dependencies against that policy.&lt;/p&gt;

&lt;p&gt;This isn't meant to replace a professional security audit or packet capture.&lt;/p&gt;

&lt;p&gt;But it provides an automated guard against accidentally adding network functionality to an application that is supposed to work locally.&lt;/p&gt;


&lt;h2&gt;
  
  
  Native rendering
&lt;/h2&gt;

&lt;p&gt;The default GUI renderer uses &lt;code&gt;wgpu&lt;/code&gt;, which maps to native graphics APIs depending on the platform.&lt;/p&gt;

&lt;p&gt;That can mean Direct3D on Windows, Metal on macOS, and Vulkan or other supported backends on Linux.&lt;/p&gt;

&lt;p&gt;There is also an OpenGL-based fallback using:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;MyHardwareInfo &lt;span class="nt"&gt;--renderer&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;glow
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is useful when a particular graphics driver doesn't cooperate with the default renderer.&lt;/p&gt;




&lt;h2&gt;
  
  
  Building it yourself
&lt;/h2&gt;

&lt;p&gt;The entire project is open source and can be built with Rust.&lt;/p&gt;

&lt;p&gt;At the simplest level:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cargo run &lt;span class="nt"&gt;--locked&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cargo build &lt;span class="nt"&gt;--release&lt;/span&gt; &lt;span class="nt"&gt;--locked&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The repository contains the platform-specific build requirements and packaging instructions for Windows, Linux, and macOS.&lt;/p&gt;

&lt;p&gt;The project also pins its Rust toolchain and keeps dependencies locked through &lt;code&gt;Cargo.lock&lt;/code&gt; to make builds more reproducible.&lt;/p&gt;




&lt;h2&gt;
  
  
  Downloads
&lt;/h2&gt;

&lt;p&gt;Prebuilt releases are available directly from GitHub:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/econovibe/MyHardwareInfo/releases/latest" rel="noopener noreferrer"&gt;https://github.com/econovibe/MyHardwareInfo/releases/latest&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There are builds for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Windows x64&lt;/li&gt;
&lt;li&gt;Linux x64&lt;/li&gt;
&lt;li&gt;macOS Apple Silicon&lt;/li&gt;
&lt;li&gt;macOS Intel&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Release downloads also include SHA-256 checksums so binaries and archives can be verified after downloading.&lt;/p&gt;

&lt;p&gt;The Windows executable is currently unsigned, and the macOS application is not Developer ID notarized, so those operating systems may show their normal security warnings for software from an unidentified developer.&lt;/p&gt;

&lt;p&gt;The README explains these limitations before users download anything.&lt;/p&gt;




&lt;h2&gt;
  
  
  Open source with a permissive license
&lt;/h2&gt;

&lt;p&gt;MyHardwareInfo is released under the &lt;strong&gt;Zero-Clause BSD (0BSD)&lt;/strong&gt; license.&lt;/p&gt;

&lt;p&gt;That means the source can be used, copied, modified, redistributed, relicensed, or incorporated into other projects without an attribution requirement.&lt;/p&gt;

&lt;p&gt;The official repository is maintained as a personal project rather than a community-maintained project, so it currently does not accept external pull requests, issues, feature requests, or support requests.&lt;/p&gt;

&lt;p&gt;Forking and independent modification are welcome.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I learned from building it
&lt;/h2&gt;

&lt;p&gt;What looked like a relatively simple idea — "show me information about my computer" — quickly turned into a much deeper systems programming project.&lt;/p&gt;

&lt;p&gt;The UI wasn't really the difficult part.&lt;/p&gt;

&lt;p&gt;The interesting problems were things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;discovering the same conceptual hardware across very different operating systems&lt;/li&gt;
&lt;li&gt;deciding which information is trustworthy&lt;/li&gt;
&lt;li&gt;distinguishing physical disks from logical volumes&lt;/li&gt;
&lt;li&gt;dealing with hardware information hidden behind permissions&lt;/li&gt;
&lt;li&gt;avoiding misleading GPU metrics&lt;/li&gt;
&lt;li&gt;handling Apple unified memory correctly&lt;/li&gt;
&lt;li&gt;preventing one broken hardware query from breaking the whole report&lt;/li&gt;
&lt;li&gt;designing reports that are useful without leaking identifiers&lt;/li&gt;
&lt;li&gt;validating behavior on operating systems I wasn't currently running&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It gave me a much better appreciation for established hardware tools.&lt;/p&gt;

&lt;p&gt;A polished hardware information utility hides a huge amount of platform-specific complexity behind what looks like a simple list of specifications.&lt;/p&gt;




&lt;h2&gt;
  
  
  Try MyHardwareInfo
&lt;/h2&gt;

&lt;p&gt;If this kind of project interests you, you can find the source code, documentation, architecture notes, and downloads here:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://github.com/econovibe/MyHardwareInfo" rel="noopener noreferrer"&gt;https://github.com/econovibe/MyHardwareInfo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's still a personal project, but building it has been a very interesting way to explore Rust, desktop development, operating-system APIs, and the messy reality of cross-platform hardware detection.&lt;/p&gt;

&lt;p&gt;I'd be interested to hear how other developers approach cross-platform system information tools — especially where operating systems disagree about what a piece of hardware actually is.&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>rust</category>
      <category>opensource</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
