A fast, lightweight, zero-subprocess system information fetch tool written in Rust for Linux, Windows, macOS, and Android.
.',;::::;,'. kk376@msi-thin-a15
.';:cccccccccccc:;,. ------------------
.;cccccccccccccccccccccc;. OS: Fedora Linux 44 (Workstation Edition) x86_64
.:cccccccccccccccccccccccccc:. Host: Thin A15 B7UCX REV:1.0
.;ccccccccccccc;.:dddl:.;ccccccc;. Kernel: 7.2.7-200.fc44.x86_64
.:ccccccccccccc;OWMKOOXMWd;ccccccc:. Installed: 23 Aug 2026, 10:53 PM (33 days ago)
.:ccccccccccccc;KMMc;cc;xMMc;ccccccc:. Uptime: 14 mins
,cccccccccccccc;MMM.;cc;;WW:;cccccccc, Packages: 2838 (rpm), 4 (flatpak), 1 (cargo), 42 (pip)
:cccccccccccccc;MMM.;cccccccccccccccc: Shell: fish 4.6.0
:ccccccc;oxOOOo;MMM0OOk.;cccccccccccc: Display (AUOD0A2): 1920x1080 @ 1.25x in 15", 144 Hz [Built-in]
cccccc;0MMKxdd:;MMMkddc.;cccccccccccc; Desktop: Hyprland (Wayland)
ccccc;XM0';cccc;MMM.;cccccccccccccccc' WM: Hyprland
ccccc;MMo;ccccc;MMW.;ccccccccccccccc; Terminal: ghostty 1.3.1-4.fc44
ccccc;0MNc.ccc.xMMd;ccccccccccccccc; CPU: AMD Ryzen 5 7535HS (6c 12t) @ 4.361GHz [4.60GHz max]
cccccc;dNMWXXXWM0:;cccccccccccccc:, GPU0: AMD Radeon 680M (512 MiB) [Integrated]
cccccccc;.:odl:.;cccccccccccccc:,. GPU1: NVIDIA GeForce RTX 2050 (4 GiB) [Discrete]
:cccccccccccccccccccccccccccc:'. Memory: 3.82 GiB / 14.82 GiB (26%)
.:cccccccccccccccccccccc:;,.. Swap: 0.00 GiB / 14.82 GiB (0%) - ZSTD
'::cccccccccccccc::;,. Disk0: (/) 151.6 GiB / 474.7 GiB (32%) - btrfs
Disk1: (/boot) 0.9 GiB / 1.9 GiB (48%) - ext4
Disk2: (/boot/efi) 20 MiB / 196 MiB (10%) - vfat
Disk3: (/home) 151.6 GiB / 474.7 GiB (32%) - btrfs
Disk4: (/media/Backup) 455.7 GiB / 931.5 GiB (49%) - fuseblk
Battery: 96% [AC Connected]
Local IP (Wi-Fi): 192.168.29.219/24
Theme: Adwaita (dark) [GTK]
Icons: Adwaita [GTK]
Cursor: default (28px) [GTK]
Most fetch tools either spawn multiple shell child processes (neofetch) or dynamically link heavy C runtime libraries (fastfetch). KKFetch is built with a different design philosophy:
- Sub-3ms Latency: Queries virtual filesystems (
/proc,/sys), POSIX syscalls, and Win32 APIs directly with zero child process spawning (fork/execve). In statistical benchmarks, it is 6.1x faster than Fastfetch on raw data collection across all 27 active modules. - Native OS Install Date: Probes root filesystem creation timestamp (
statxbirth time) and installer logs, showing exact installation date and relative age (6 days ago). - GPU Memory & Classification: Probes dedicated VRAM and classifies graphics hardware into
[Integrated]and[Discrete]tiers with sequential indexing. - Zero-Fork Display EDID Parsing: Probes monitor name, refresh rate, physical diagonal size, and panel type directly from DRM sysfs without spawning
xrandror display server queries. - Declarative Configuration & Plugins: Supports
~/.config/kkfetch/config.tomland custom executable plugin modules with parallel execution. - Standalone Static Binary: Zero libc runtime dependencies when using the musl build. Drop the binary into any Linux system and it runs.
Benchmarked against Fastfetch across 100 iterations (20 warmup runs) on bare-metal Fedora Linux 44 (Linux 7.2.7-200.fc44.x86_64, AMD Ryzen 5 7535HS with 6 physical cores and 12 threads):
| Command | Mean Runtime | Median Latency | Min Latency | Max Latency | Relative Speedup |
|---|---|---|---|---|---|
fastfetch |
14.56 ms |
13.26 ms |
10.74 ms |
114.27 ms |
1.00 (Baseline) |
kkfetch (All 27 Modules) |
2.37 ms |
2.34 ms |
1.79 ms |
2.93 ms |
6.14x faster |
kkfetch (Pure sysfs/drm) |
2.35 ms |
2.32 ms |
1.78 ms |
2.90 ms |
6.20x faster |
KKFetch achieves lower CPU time and syscall overhead by reading /proc and sysfs directly in Rust, executing active module collectors concurrently in parallel using std::thread::scope, and compiling with Fat Link-Time Optimization (LTO).
1. Built-in Module Latency Profiler: Runs KKFetch with the internal microsecond latency profiler, displaying precise wall-clock execution time for every active information collector (CPU, GPU, Memory, EDID Display, Packages, etc.):
kkfetch --timings2. Comparative Statistical Benchmark (via hyperfine):
Executes 100 statistical test runs (preceded by 20 warmup cycles) using direct execution (-N/--shell=none to eliminate shell fork jitter on sub-5ms binaries) to calculate the mean runtime, median latency, standard deviation, and relative speedup between KKFetch and Fastfetch:
hyperfine --warmup 20 --runs 100 -N 'kkfetch' 'fastfetch'3. Pure Sysfs / Accelerated Mode Benchmark:
Measures the core sub-3ms performance of KKFetch with external bus latency disabled, highlighting zero-fork /proc, sysfs, and DRM kernel prober throughput against Fastfetch:
hyperfine --warmup 20 --runs 100 -N 'kkfetch -d battery' 'fastfetch'KKFetch includes high-contrast ASCII art logos with distro brand signature colors for 30 operating systems, platforms, and mascots:
| Family / Ecosystem | Supported Distributions & Targets |
|---|---|
| Debian / Ubuntu Family | Ubuntu, Debian, Linux Mint, Pop!_OS, Kali Linux, Zorin OS (6) |
| Fedora / Red Hat Family | Fedora 43, 44, 45, Rawhide, RHEL, Rocky Linux, AlmaLinux (4) |
| openSUSE | openSUSE Tumbleweed, openSUSE Leap 15.6 (1) |
| NixOS / Nix | NixOS, Nix Flakes (1) |
| Windows | Windows 11, Windows 10, Windows 7 (native Win32 x86_64) (3) |
| Arch Family | Arch Linux, EndeavourOS, Manjaro, Artix Linux (4) |
| macOS | macOS (Apple Silicon aarch64 & Intel x86_64) (1) |
| Android / Mobile | Android (via Termux aarch64 & x86_64) (1) |
| Alpine & Independent Linux | Alpine Linux, Gentoo Linux, Void Linux, Slackware (4) |
| BSD Family & Mascots | FreeBSD, OpenBSD, NetBSD, Ferris the Rust Crab (ferris), Linux Penguin (tux) (5) |
Via Personal Package Archive (PPA):
sudo add-apt-repository -y ppa:kushagra376/kkfetch
sudo apt update && sudo apt install -y kkfetchVia Fedora Copr (Fedora, RHEL 9/10, Rocky Linux, and AlmaLinux on x86_64 and aarch64):
sudo dnf copr enable -y kk376/kkfetch
sudo dnf install -y kkfetchVia Open Build Service (OBS):
For openSUSE Tumbleweed:
sudo zypper addrepo https://download.opensuse.org/repositories/home:/kk376/openSUSE_Tumbleweed/home:kk376.repo
sudo zypper refresh
sudo zypper install -y kkfetchFor openSUSE Leap 15.6:
sudo zypper addrepo https://download.opensuse.org/repositories/home:/kk376/15.6/home:kk376.repo
sudo zypper refresh
sudo zypper install -y kkfetchRun instantly without installing:
nix run github:kk376/kkfetchInstall to user profile via Flakes:
nix profile install github:kk376/kkfetchOr add to your NixOS configuration (flake.nix):
inputs.kkfetch.url = "github:kk376/kkfetch";
# In environment.systemPackages:
environment.systemPackages = [
inputs.kkfetch.packages.${pkgs.system}.default
];Via Scoop:
scoop bucket add kkfetch https://github.com/kk376/scoop-kkfetch
scoop install kkfetchAUR user registration is currently suspended by Arch Linux, so manual package installation via pacman is the direct method and it cannot be managed by an AUR helper (such as yay or paru) at this time.
Via Pre-built Pacman Package:
curl -LO https://github.com/kk376/kkfetch/releases/download/v0.19.0/kkfetch-0.19.0-1-x86_64.pkg.tar.zst
sudo pacman -U kkfetch-0.19.0-1-x86_64.pkg.tar.zstVia Homebrew:
brew tap kk376/kkfetch
brew install kkfetchcurl -LO https://github.com/kk376/kkfetch/releases/download/v0.19.0/kkfetch_0.19.0-1_termux_aarch64.deb
dpkg -i kkfetch_0.19.0-1_termux_aarch64.debStatically linked with musl (zero external dependencies):
curl -LO https://github.com/kk376/kkfetch/releases/download/v0.19.0/kkfetch-linux-musl-x86_64
chmod +x kkfetch-linux-musl-x86_64
sudo mv kkfetch-linux-musl-x86_64 /usr/local/bin/kkfetchcurl -LO https://github.com/kk376/kkfetch/releases/download/v0.19.0/kkfetch-0.19.0-x86_64-unknown-linux-gnu.tar.gz
tar -xzf kkfetch-0.19.0-x86_64-unknown-linux-gnu.tar.gz
sudo ./install.shRequires Rust 1.75.0+ and gcc.
git clone https://github.com/kk376/kkfetch.git
cd kkfetch
cargo build --release
sudo cp target/release/kkfetch /usr/local/bin/| Flag / Option | Description |
|---|---|
-m, --modules <LIST> |
Select and order specific modules (e.g. os,kernel,cpu,memory) |
-d, --disable <LIST> |
Disable specific modules from output (e.g. gpu,disk) |
-l, --logo <NAME> |
Override ASCII logo (e.g. arch, debian, ferris, ubuntu, fedora, tux, none) |
--no-logo |
Suppress the ASCII logo and print only system telemetry |
--no-color |
Disable ANSI color escapes |
--disk-path <PATH> |
Target filesystem path for disk statistics (default: /) |
--list-modules |
Print all available information modules and exit |
--json |
Output system information in structured JSON format |
--timings |
Show execution latency breakdown per module in microseconds |
-h, --help |
Print help information |
-V, --version |
Print version information |
--doctor |
Check system environment for multiple or conflicting installations |
Custom module ordering:
kkfetch -m os,cpu,memory,diskProfile execution timings per module:
kkfetch --timingsCheck installation health and detect shadowed binaries:
kkfetch --doctorJSON output for scripts and status bars:
kkfetch --jsonDisable specific modules:
kkfetch -d gpu,packagesOverride logo with the Ferris mascot:
kkfetch --logo ferrisIf you previously installed kkfetch through Cargo (cargo install kkfetch) and subsequently installed or updated it via your system package manager (dnf, apt, pacman, brew), your shell $PATH may prioritize ~/.cargo/bin/kkfetch over /usr/bin/kkfetch.
Run the diagnostic check:
kkfetch --doctorIf multiple binaries are detected, remove the older Cargo or local binary:
cargo uninstall kkfetch
# or manually remove the shadowed binary:
rm -f ~/.cargo/bin/kkfetch| Module | Primary Source | Fallback Strategy |
|---|---|---|
| Title | $USER / getpwuid and uname(2) |
"user@localhost" |
| OS | /etc/os-release and /usr/lib/os-release parsing |
/etc/debian_version, /etc/redhat-release, uname |
| Host | /sys/devices/virtual/dmi/id/product_name and devicetree model |
DMI board name or omitted |
| Kernel | POSIX libc::uname release and machine fields |
None required |
| Installed | Root filesystem creation timestamp via statx(2) (stx_btime) |
Distribution install log birth times |
| Uptime | Floating-point parse of /proc/uptime |
libc::sysinfo uptime |
| Packages | Local DB scans: /var/lib/dpkg/status, pacman/local, RPM, APK, flatpak, snap, cargo, npm, pip |
dpkg-query, rpm -qa, xbps-query |
| Shell | /proc/<pid>/status & comm ancestor inspection |
$SHELL environment variable |
| Display | DRM sysfs EDID binary parser (name, refresh rate, size in inches, built-in/external) | xrandr / wlr-randr |
| Desktop | $XDG_CURRENT_DESKTOP, desktop metadata files, session type |
Omitted if headless |
| WM | Active window manager detection (Mutter, KWin, Sway, Hyprland, WSLg) | Process scan |
| WM Theme | Window manager decoration theme (Adwaita, Breeze, xfwm, DWM) | Omitted if not detected |
| Terminal | Environment signatures (WT_SESSION, TERM_PROGRAM), /proc process ancestry |
$TERM variable |
| Terminal Font | Dotfile parser for Kitty, Alacritty, Foot, WezTerm, Ghostty, and GNOME | Monospace fallback |
| CPU | /proc/cpuinfo parsing (model, physical cores vs threads, live clock + boost max) |
Sanitized model string |
| GPU | Sysfs PCI class scan (0x03xxxx), local pci.ids lookup, VRAM calculation |
lspci -mm query |
| Memory | /proc/meminfo active memory calculation (MemTotal - MemAvailable) |
Traditional buffer/cache calculation |
| Swap | /proc/meminfo swap statistics and ZRAM algorithm detection |
Omitted if swap is 0 |
| Disk | Sequential filesystem partition discovery via statvfs (NTFS mapping on WSL) |
Target mount path |
| Battery | Direct /sys/class/power_supply capacity and charging status |
Omitted if AC-only desktop |
| Local IP | POSIX getifaddrs active interface address enumeration |
Omitted if offline |
| Theme | GTK 3/4 settings.ini, KDE kdeglobals, XFCE xsettings.xml, $GTK_THEME |
Omitted if not configured |
| Icons | GTK 3/4 settings.ini, KDE kdeglobals, XFCE xsettings.xml |
Omitted if not configured |
| Font | System desktop interface font from GTK, KDE, and GSettings | Omitted if not configured |
| Cursor | Desktop cursor theme and size in pixels from GTK, KDE, GSettings, and Xcursor | Omitted if not configured |
| Plugin | Parallel custom script & command executor from config.toml or plugins/ |
Omitted if none configured |
KKFetch includes completions for Bash, Zsh, and Fish:
source completions/kkfetch.bash
# System-wide: sudo cp completions/kkfetch.bash /usr/share/bash-completion/completions/kkfetch# Add to ~/.zshrc before compinit:
fpath=(/path/to/kkfetch/completions $fpath)
autoload -Uz compinit && compinit
# System-wide: sudo cp completions/_kkfetch /usr/share/zsh/site-functions/_kkfetchcp completions/kkfetch.fish ~/.config/fish/completions/
# System-wide: sudo cp completions/kkfetch.fish /usr/share/fish/vendor_completions.d/Package definitions and build specifications are organized in packaging/:
- Arch Linux (AUR):
packaging/arch/(PKGBUILD,.SRCINFO) - Debian / Ubuntu:
packaging/debian/(control,rules,changelog) - Fedora / RHEL (Copr):
packaging/rpm/(kkfetch.spec) - Alpine Linux:
packaging/alpine/(APKBUILD) - Gentoo Linux:
packaging/gentoo/(kkfetch-0.19.0.ebuild) - Void Linux:
packaging/void/(template) - Nix / NixOS:
packaging/nix/(package.nix) - Homebrew Tap:
packaging/homebrew/(kkfetch.rb) - Android (Termux):
packaging/termux/(build.sh)
# Run the full test suite (unit, integration, and CLI snapshot tests)
cargo test
# Run strict linter with zero warnings allowed
cargo clippy --all-targets --all-features -- -D warnings
# Verify code formatting conforms to Rust standards
cargo fmt --checkSpecial thanks to community contributors for architectural recommendations and security research:
- @Laynsb:
- Comprehensive Security Audit & Vulnerability Reporting (
v0.11.7): Conducted the independent security review across all 20 modules, identifying the plugin directory auto-execution vector (F2), privilege escalation boundaries undersudo(F1), canonical$PATHsubprocess resolution (F3), user-isolated private cache permissions (F4), terminal OSC control sequence sanitization (F5), and JSON serializer key escaping. - System Installation Date Module (
Installed): Suggested adding OS installation date detection via root filesystemstatxbirth time (stx_btime) with relative time deltas. - Localized Installation Timestamps: Suggested local timezone conversion for wall-clock consistency.
- Filesystem Type Detection (
Disk): Suggested partition filesystem labeling. - ZRAM Compression Algorithm Discovery (
Swap): Suggested detecting active swap compression algorithms from/sys/block/zram*/comp_algorithm. - Integrated GPU Classification (
GPU): Reported false discrete classification on AMD Radeon 610M (Mendocino APU) single-GPU machines, leading to comprehensive mobile APU iGPU classification across RDNA and Intel Arc architectures. - Hardware-Fingerprinted GPU Cache Invalidation (
GPU/v0.14.0): Reported stale GPU model caching after swapping an NVMe SSD between differing laptop hardware platforms (Intel to AMD Ryzen), leading to the implementation of zero-overhead sysfs PCI display controller hardware fingerprint verification and automatic cache invalidation.
- Comprehensive Security Audit & Vulnerability Reporting (
- Contributing: Pull requests, feature ideas, and packaging recipes are welcome! Please review CONTRIBUTING.md for architectural guidelines, coding standards, and PR workflows.
- Security Policy: For reporting security vulnerabilities or policy questions, please refer to SECURITY.md.
- Changelog: Complete release history across versions is tracked in CHANGELOG.md.
-
KKFetch is authored by Kushagra Kumar (kk376) and open-source software dual-licensed under either:
- MIT License (LICENSE-MIT or https://opensource.org/licenses/MIT)
- Apache License, Version 2.0 (LICENSE-APACHE or https://www.apache.org/licenses/LICENSE-2.0)
at your option.
-
ASCII Art Outlines: Distribution ASCII art boundary outlines are based on the classic art from Neofetch by Dylan Araps (also licensed under the MIT License, Copyright © 2016-2022 Dylan Araps), customized and enhanced in KKFetch with high-contrast white structural framing and distribution brand signature colors.
-
Colored Percentage Thresholds: The dynamic color-coded percentage thresholds (transitioning across green, yellow, and red based on resource and battery capacity levels) are inspired by the classic visual formatting in Neofetch.
-
CIDR Subnet Notation: The inclusion of CIDR subnet mask notation (e.g.
/24) alongside local IP addresses is inspired by Fastfetch.