# rcpufetch
**rcpufetch** is a fast, cross-platform command-line tool that displays detailed CPU
information in a clean and beautiful way — complete with colorful vendor ASCII art.
It is a ground-up **Rust rewrite of [cpufetch](https://github.com/Dr-Noob/cpufetch)**,
the C tool by [Dr-Noob](https://github.com/Dr-Noob) that pioneered this exact idea. This
project aims for command-line and feature parity with upstream cpufetch (same flags,
same style/color model, same microarchitecture-name tables) while being written entirely
in Rust with **zero external dependencies** — everything is `std`-only, which keeps
compile times fast and the dependency tree at exactly one crate: this one.
> [!WARNING]
> This project is in active development. Some upstream cpufetch features (the full
> ARM SoC marketing-name database, the x86 AVX timing-loop frequency fallback) are only
> partially ported — see [Implementation notes](#implementation-notes) below. Please
> report bugs under the issues tab.
## Screenshots


## Features
- CPU model, vendor, microarchitecture, process node, core/thread count, cache sizes,
frequency, and ISA feature flags
- Real microarchitecture detection: the `cpuid` instruction on x86/x86_64, MIDR
register decoding on ARM/AArch64, PVR decoding on PowerPC, and device-tree/`isa`
string matching on RISC-V — not just a vendor string
- Colorful ASCII art logo per vendor, or override it with `--logo <vendor>` regardless
of your actual CPU
- `--style fancy|retro|legacy` and `--color <scheme|R,G,B:...>` — the same style/color
model as upstream cpufetch, including [`NO_COLOR`](https://no-color.org/) support
- Full flag parity with upstream cpufetch (see [Usage](#usage) below)
- Shell completions for fish, bash, and zsh
## Support table
| Linux | ✅ | ✅ | ✅ | ✅ |
| macOS | ✅ | ✅ | - | - |
| Windows | ✅ | ❓ | - | - |
| FreeBSD | ✅ | ✅ (partial) | ✅ (partial) | - |
| OpenBSD | ✅ | ❓ | ❓ | ❓ |
✅ = builds, runs, and is exercised in CI. ❓ = should work (same code path as a ✅ cell
on that architecture) but isn't covered by a CI runner/VM yet. "Partial" on
FreeBSD/ARM/PowerPC means vendor and core-count detection work via `sysctl`, but
microarchitecture-name decoding is best-effort (see [`src/bsd.rs`](src/bsd.rs)).
FreeBSD and OpenBSD are notable here: upstream cpufetch only builds x86 on FreeBSD and
has no OpenBSD support at all. rcpufetch fixes both gaps — see
[CONTRIBUTING.md](CONTRIBUTING.md#architecture) for how.
## Installation
### From `crates.io`
```
cargo install rcpufetch
```
### From source
```
git clone https://github.com/rockenman1234/rcpufetch.git
cd rcpufetch
cargo build --release
./target/release/rcpufetch
```
No other dependencies are required — the build is `std`-only.
## Usage
```
rcpufetch [OPTIONS]
```
| `-h`, `--help` | Print help information |
| `-V`, `--version` | Print version information |
| `--license` | Display license information |
| `-n`, `--no-logo` | Disable logo display |
| `-l`, `--logo <VENDOR>` | Override the logo (`nvidia`, `powerpc`, `arm`, `amd`, `intel`, `apple`) |
| `-s`, `--style <STYLE>` | `fancy` (default), `retro`, or `legacy` |
| `-c`, `--color <SCHEME>` | `intel`, `intel-new`, `amd`, `ibm`, `arm`, `rockchip`, `sifive`, or a custom `R,G,B:R,G,B:R,G,B:R,G,B:R,G,B` (3 logo colors + 2 text colors) |
| `-r`, `--raw` | Dump raw `cpuid` data (x86 only) |
| `-F`, `--full-cpu-name` | Show the unabbreviated CPU name (x86 only) |
| `--logo-long` / `--logo-short` | Force the large/small logo variant |
| `--logo-intel-new` / `--logo-intel-old` | Force the modern/classic Intel logo |
| `--accurate-pp` | Measure peak performance instead of estimating it (x86+Linux) |
| `--measure-max-freq` | Measure max frequency instead of reading it from the OS |
| `-d`, `--debug` | Print low-level identifying register info and exit |
| `-v`, `--verbose` | Print diagnostic warnings about info gathering |
| `--completions <SHELL>` | Generate shell completions (`fish`, `bash`, `zsh`) |
### Examples
```
rcpufetch # your CPU, your vendor's logo
rcpufetch --logo nvidia # your CPU, NVIDIA's logo
rcpufetch --no-logo # clean text output, no logo
rcpufetch --style retro # retro-style colored glyphs instead of solid blocks
rcpufetch --color amd # force AMD's color scheme regardless of vendor
rcpufetch --completions fish > ~/.config/fish/completions/rcpufetch.fish
```
## Implementation notes
rcpufetch ports cpufetch's microarchitecture lookup tables (x86 family/model/stepping,
ARM MIDR implementer/part, PowerPC PVR) mechanically from the upstream C source, so
name coverage matches upstream closely. Two things are intentionally scoped down for
now:
- **ARM SoC marketing names**: upstream cpufetch has a ~415-entry table plus a
multi-source fallback chain (Android sysprops, PCI IDs, device-tree, NVMEM). rcpufetch
ships a smaller curated hint table (`src/cpu/arm.rs`) covering common
Raspberry Pi/Snapdragon/Exynos/Dimensity/Rockchip/Ampere parts.
- **x86 frequency measurement**: upstream cpufetch has AVX/AVX-512/no-AVX inline-asm
timing-loop fallbacks for systems where the OS doesn't expose max frequency.
rcpufetch reads frequency from the OS (sysfs/`sysctl`/WMI) only.
See [CONTRIBUTING.md](CONTRIBUTING.md) for the full architecture writeup, how the
lookup tables were generated, and how to extend either of the above.
## Contributing
See [CONTRIBUTING.md](CONTRIBUTING.md) for the architecture, build process, and how to
add a vendor, an architecture, or a logo.
## Acknowledgements
rcpufetch would not exist without [Dr-Noob's cpufetch](https://github.com/Dr-Noob/cpufetch),
which this project reimplements in Rust. Go star the original.
## License
GPLv3 — see [LICENSE.md](LICENSE.md).