Changelog
v1.0.0 · Windows Native Probes, Daemons on Windows & Dependency Refresh · 2026-09-18
- Windows native probes: CPU, datetime, battery and GPU are read through the Win32 API (
platform/windows/) instead of sysinfo's PDH counters and PowerShell/wmicsubprocesses — the default fetch went from ~575 ms to ~33 ms warm on a 16-thread machine, with identical rendered values - Daemons on Windows: the animated-logo and live-stats daemons are now implemented (
ui/win_daemon.rs); the worker shares the console,--daemon-stop/--daemon-live-stopsignal its stop event and it exits on its own when the shell leaves the console - Daemons exit when the terminal closes on every platform: they poll stdout for the pty hangup instead of lingering as orphans rendering into a dead pty, restoring the terminal and removing their PID/rows files
- Fixed the live daemon losing the disk module on every platform: the default module lists said
"disks"while the probe gate and renderer only know"disk" xfetch | headno longer panics: stdout write errors are ignored on the static render path, matching the daemon and animation paths- Guest safety net: native and wasm plugins, effects and extensions default to a 30 s timeout when
timeout_secsis unset (0disables the cap) - Module colors now accept names, 256-color indexes (
"196") and hex RGB ("#FF8800"), the same formats as the logo color - Configs starting with a UTF-8 BOM now parse (PowerShell 5.1
Set-Content -Encoding UTF8and Notepad write one) instead of silently falling back to the defaults - Atomic installer writes: binaries and manifests are staged and renamed over the target in both installers;
install-prebuilt.shnow picks the musl build on musl distributions (Alpine) - Dependency refresh:
rustls0.23.43 → 0.23.45 fixes RUSTSEC-2026-0285; major upgrades with no code changes forbase640.23,sha20.11,dirs7 andsysinfo0.39;ureqstays on 2.x (v3 needs a migration) - 218 tests plus 6 wasm end-to-end tests, clippy clean, zero advisories in the lockfile
v0.9.0 · WebAssembly Guests, Host Calls & Useful Examples · 2026-09-12
- Sandboxed WebAssembly runtime: plugins, effects and extensions can be
.wasmartifacts (core modules and components) executed by wasmtime with manifest-declared, deny-by-default capabilities (HTTP, exec, filesystem, environment) and limits for time, memory and output - Same protocol: core modules keep the JSON stdin/stdout contract; components export
runfrom thexfetch:runtimeWIT world with typed host imports - Guest tooling:
xfetch wasm inspect,xfetch wasm runandxfetch wasm wit; installers accept prebuilt artifacts,buildcommands,artifact_urlor direct URLs - New
xfetch-guest-apicrate for Rust core-module guests, and wasm-compatiblewith_timeoutin all API crates - Useful examples in four languages: crypto prices, IP geolocation, pacman package counts and
/procstats, plus night mode, update footer and localized labels extensions - Fixed the
swapglyph in generated configs and removed the remaining emoji from presets and weather docs - Guest logs are filtered by default (only
warn/errorprint);XFETCH_WASM_LOG_LEVEL(off..debug) controls the threshold - New
xfetch updatecommand: checks GitHub releases, verifies prebuilt downloads with SHA256 and only replaces recognized prebuilt installs (cargo installand package-manager installs are never touched) - Windows prebuilt installer (
install-prebuilt.ps1): downloads the release ZIP, verifies SHA256 and installs it per-user - Wiki pages for the WebAssembly runtime and the new guests in English, Spanish and German
- 195 tests plus CLI end-to-end wasm tests, clippy clean
v0.8.0 · Crates.io Install, Slimmer Dependencies & HTTPS Public IP · 2026-08-21
- crates.io:
cargo install xfetch-cliis now supported - Dependency tree slimming: removed the AVIF encoder chain (
ravif/rav1e/rayon) — 196 → 133 crates, zero vulnerabilities;imagecodecs limited to what the logo renderer uses; API crates pinned to a fixed commit - Public IP over HTTPS: public IP probes now use TLS (Mozilla roots) with strict
IpAddrvalidation, a 64-byte body cap and no redirects - Logo catalog hardening: fetched logo art rejects ANSI escape sequences and control characters, falling back to the default logo
- 147 tests, clippy clean
v0.7.0 · Configurable Labels and Value Formats · 2026-08-20
labelsconfig map: renames the key shown per module in every layout; an empty string hides the key (icon-only row); colors keep using the raw module keyformatsconfig map: value templates with{field}placeholders per module — CPU{brand}/{model}/{cores}/{freq}, GPU{name}/{vendor}/{model}/{vram}, memory/swap{used}/{total}/{percent}, disk{fs}, os{distro}/{version}/{arch}/{wsl}, packages one field per manager plus{count}/{manager}/{managers}, battery{percent}/{state}, uptime{days}/{hours}/{mins}, datetime{date}/{time}; unknown fields render empty,{{/}}escape literal braces- Battery fix (Linux): peripheral batteries (e.g. Logitech HID++) are no longer counted as system batteries
- 141 tests, clippy clean
v0.6.0 · Themes, Live Stats Daemon & Per-Platform Modularization · 2026-08-19
- Theme format simplified:
theme setedits only thethemekey, preserving comments and formatting; themes no longer carryicons(a per-user font choice, filled from defaults); newlogo_colorandlogo_colors(per-row) fields - Live stats daemon (
daemon_live): pins the fetch at the top of the terminal and re-probes a lightweight module subset everydaemon_live_refreshseconds; hot reload viadaemon_live_reload(config and theme watched); flags--no-daemon-live,--daemon-live-stop,--daemon-live-reload - Windows:
wingetcounts only packages installed via winget; Chocolatey left the core probes (returns as a plugin); shell detection walks the parent process chain (cmd.exe is no longer reported as PowerShell); version-to-logo mapping uses build numbers - Plugin and extension timeouts: new
subprocess.rswith bounded pipe drains — grandchildren holding the pipe can no longer hang xfetch; optional per-plugin/per-extensiontimeout_secsin the config;with_timeouthelper in the API crates - Per-platform modularization: macOS and Linux mirror the Windows layout (
platform/<os>/version.rs,software.rs,network.rs, ...); Arch splitspacman(official) from a newaurentry (pacman -Qm); Gentoo portage count surfaced; WSL-aware presentation - Effects: intro animations via the new
effectsconfig key andxfetch effects install/list/removecommands
v0.5.0 · Performance, Package Managers & Distro Logos · 2026-08-18
- Performance rounds: package counts read directly from distro databases (dpkg/pacman/apk/flatpak, microseconds instead of subprocesses); PATH pre-check before spawning probes; battery/datetime moved into the parallel section; public IP hosts queried in parallel; probes spawned all-then-join (cold fetch 8.7 s → 0.05 s on WSL)
- Distro logos in
--gen-config: fetches the ASCII logo of the detected OS/distro from the newxfetch-cli/logoscatalog, with--logo <id>override andXFETCH_LOGOS_URLfor forks - New
--layout <name>flag for--gen-config; theconfigs/folder was removed — the template is now embedded in the binary and installers generate the first config withxfetch --gen-config - WSL presentation: new
os_wsl_stylekey (off/minimal/full) - More package managers: Void (xbps database) and Gentoo (portage) support; unknown config keys are ignored
- Windows:
wingetsupport added;choco list --local-onlyno longer miscounts;scoop listcounts rows properly - Parallel plugins: plugins run in parallel threads — API untouched, no plugin changes needed
v0.4.0 · Daemon Mode, New Layouts & Hang Fixes · 2026-08-17
- Daemon mode (
--daemon): pins the animated logo in a fixed scroll region and exits immediately; stop it with--daemon-stop - External command timeouts:
run_cmd_with_timeout()kills hanging commands — snap without the snapd daemon no longer blocks the fetch; per-command timeouts for package managers and hardware probes - Platform separation: new
src/info/platform/{linux,macos,windows}/structure with a shared contract andshared/machinery - New layouts:
section-box(bordered boxes per module group) andcustom-x(fully customizable border templates with{fill}/{title}, width auto/full/fixed) - New options:
show_keys,key_width,logo_color(names, 256-color indexes and hex RGB),logo_padding,logo_type(auto/ascii/image) - XDG_CONFIG_HOME support (macOS fix) and local CI scripts (
scripts/ci.sh,scripts/ci.ps1)
v0.3.0 · Image Rendering & Extensions · 2026-07-25
- Kitty image rendering overhaul: Added
logo_kittytoggle (native protocol vs half-block),logo_gapfor configurable image-text spacing,logo_width/logo_heightfor explicit sizing, and auto-responsive width (28% of terminal, clamped 12–42 cols) - Cursor positioning fix: Replaced
MoveUp/MoveToColumnwithSavePosition/RestorePositionfor correct cursor behavior across all image protocols - Stacked layout fix: Fixed
print_stacked_output()to handle image-only logos (was ignoring images without ASCII text) - Extension API: Created
api/crates/extension-api/—ConfigProviderRequest/ConfigProviderResponseprotocol,config_providers[]config field, stdin/stdout JSON communication - config-roulette extension: Picks a random or daily config from a JSON routes list, supports 100+ routes
- layout-override extension: Forces layout and/or module set at config load time
- Extension CLI: Added
xfetch extension install/list/removecommands - 100 image-based configs for config-roulette with
logo_gap: 3andlogo_kitty: true
Phase 0 · Foundation & Core
- Initialize Rust project with dependencies
- Cross-platform OS detection (Linux, Windows, macOS)
- System information gathering module
- Configuration system with JSONC support
- UI rendering engine with crossterm
Phase 1 · System Information Modules
- OS name & architecture display
- Kernel version detection
- Hostname resolution
- Shell detection and display
- Terminal emulator detection
- CPU model & frequency information
- GPU detection (discrete & integrated)
- Memory and RAM usage display
- Disk usage statistics
- Battery status and percentage
- System uptime calculation
- Package count for multiple managers (pacman, dpkg, scoop)
- Desktop environment / window manager detection
Phase 2 · Visual Customization & Layouts
- Custom ASCII art support from text files
- Image/SVG logo support via viuer
- ANSI color codes in ASCII logos
- Icon customization per module (Nerd Fonts)
- Color customization per module
- Default layout (side-by-side)
- Pac-Man layout with custom header/footer
- Side-block layout
- Tree layout for hierarchical display
- Section layout for grouped information
- Color palette display with style options
Phase 3 · Documentation & Examples
- Installation guide
- Configuration guide
- Quick install script for Linux/macOS
- PowerShell install script for Windows
- 20+ example configurations
- Sample logos (text and SVG)
- Uninstallation scripts
- Layout documentation
Phase 4 · Package Manager Expansion
- RPM package manager support (Fedora, RHEL)
- APK package manager support (Alpine)
- Nix package manager support
- Homebrew package manager support (macOS/Linux)
- Chocolatey package manager support (Windows)
- Multiple installed package manager detection
- Package count detection performance optimization
Phase 5 · Network & Connectivity
- Local IP address detection
- Public IP address fetching (with privacy option)
- IPv6 support
- Network interface information display
- Option to disable IP fetching for privacy
Phase 6 · Enhanced Modules
- Music player integration (MPD support)
- Spotify current track display
- Weather module with location API
- Timezone and world clock display
- User info and login status
- Display resolution and refresh rate
- Theme and color scheme detection
Phase 7 · Additional Layouts
- Compact layout for minimal output
- Horizontal layout variant
- Bottom layout with logo below info
- Minimal layout (text-only)
- Layout preview documentation
Phase 8 · Performance Optimization
- Parallelized slow hardware probes
- Module data caching
- GPU detection optimization for multi-GPU systems
- Lazy loading for optional modules
- Benchmarked and profiled performance
- Modularized file structure
Phase 9 · CI/CD & Distribution
- GitHub Actions for automated builds
- Binary releases for Linux x86_64, macOS (Intel & ARM), and Windows
- AUR package for Arch Linux
- Homebrew tap for macOS
- Install scripts covering all platforms (Linux, macOS, Windows)
- Automated Rust installation in install.ps1 for Windows
Phase 10 · Community & Ecosystem
- Themes repository and registry
- Theme download manager (plugin)
- Online theme preview tool
- Community theme contributions process
- Plugin system for custom modules
- Community issue templates for xfetch, plugins, configs, and api
- Contribution guidelines
Phase 11 · Testing & Quality Assurance
- Unit tests for info module
- Unit tests for config module
- Integration tests for layouts
- 41 tests total, all passing
Phase 12 · Advanced Features
Out of respect for the privacy of our users: we have decided to eliminate even the possibility, we maintain this as a record of what should not be done under any circumstances in the future.
Phase 13 · Documentation & Marketing
- Comprehensive user manual
- Project website with showcase
- Developer documentation