Skip to content

KKFetch

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]

Why KKFetch?

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 (statx birth 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 xrandr or display server queries.
  • Declarative Configuration & Plugins: Supports ~/.config/kkfetch/config.toml and 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.

Benchmarks

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):

Results

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).

Benchmark Commands

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 --timings

2. 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'

Supported Operating Systems & Logos

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)

Installation

Ubuntu / Debian / Linux Mint / Pop!_OS

Via Personal Package Archive (PPA):

sudo add-apt-repository -y ppa:kushagra376/kkfetch
sudo apt update && sudo apt install -y kkfetch

Fedora / RHEL / Rocky Linux / AlmaLinux

Via 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 kkfetch

openSUSE (Tumbleweed / Leap)

Via 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 kkfetch

For 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 kkfetch

NixOS / Nix

Run instantly without installing:

nix run github:kk376/kkfetch

Install to user profile via Flakes:

nix profile install github:kk376/kkfetch

Or add to your NixOS configuration (flake.nix):

inputs.kkfetch.url = "github:kk376/kkfetch";

# In environment.systemPackages:
environment.systemPackages = [
  inputs.kkfetch.packages.${pkgs.system}.default
];

Windows (Native Win32 CLI)

Via Scoop:

scoop bucket add kkfetch https://github.com/kk376/scoop-kkfetch
scoop install kkfetch

Arch Linux / Manjaro / EndeavourOS

AUR 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.zst

macOS

Via Homebrew:

brew tap kk376/kkfetch
brew install kkfetch

Android (Termux)

curl -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.deb

Alpine Linux / Musl / Static Binary

Statically 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/kkfetch

Pre-built Tarball Archive

curl -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.sh

Build from Source

Requires 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/

CLI Options

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

Examples

Custom module ordering:

kkfetch -m os,cpu,memory,disk

Profile execution timings per module:

kkfetch --timings

Check installation health and detect shadowed binaries:

kkfetch --doctor

JSON output for scripts and status bars:

kkfetch --json

Disable specific modules:

kkfetch -d gpu,packages

Override logo with the Ferris mascot:

kkfetch --logo ferris

Troubleshooting Conflicting Installations

If 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 --doctor

If 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

Information Modules & Detection Strategies

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

Shell Completions

KKFetch includes completions for Bash, Zsh, and Fish:

Bash

source completions/kkfetch.bash
# System-wide: sudo cp completions/kkfetch.bash /usr/share/bash-completion/completions/kkfetch

Zsh

# 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/_kkfetch

Fish

cp completions/kkfetch.fish ~/.config/fish/completions/
# System-wide: sudo cp completions/kkfetch.fish /usr/share/fish/vendor_completions.d/

Distribution Packaging

Package definitions and build specifications are organized in packaging/:


Development & Testing

# 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 --check

Community Acknowledgements

Special 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 under sudo (F1), canonical $PATH subprocess 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 filesystem statx birth 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.

Contributing & Security

  • 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.

Credits & License

  • KKFetch is authored by Kushagra Kumar (kk376) and open-source software dual-licensed under either:

    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.

About

A fast, lightweight, zero-subprocess system information fetch tool written in Rust for Linux, Windows, macOS, and Android.

Topics

Resources

Contributing

Security policy

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages