Changelog
Changelog
v0.8.0 · Crates.io Install, Slimmer Dependencies & HTTPS Public IP · 2026-08-21
- crates.io:
cargo install xfetch-cli is now supported
- Dependency tree slimming: removed the AVIF encoder chain (
ravif/rav1e/rayon) — 196 → 133 crates, zero vulnerabilities; image codecs 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
IpAddr validation, 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
labels config 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 key
formats config 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 set edits only the theme key, preserving comments and formatting; themes no longer carry icons (a per-user font choice, filled from defaults); new logo_color and logo_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 every daemon_live_refresh seconds; hot reload via daemon_live_reload (config and theme watched); flags --no-daemon-live, --daemon-live-stop, --daemon-live-reload
- Windows:
winget counts 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.rs with bounded pipe drains — grandchildren holding the pipe can no longer hang xfetch; optional per-plugin/per-extension timeout_secs in the config; with_timeout helper in the API crates
- Per-platform modularization: macOS and Linux mirror the Windows layout (
platform/<os>/version.rs, software.rs, network.rs, ...); Arch splits pacman (official) from a new aur entry (pacman -Qm); Gentoo portage count surfaced; WSL-aware presentation
- Effects: intro animations via the new
effects config key and xfetch effects install/list/remove commands
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 new xfetch-cli/logos catalog, with --logo <id> override and XFETCH_LOGOS_URL for forks
- New
--layout <name> flag for --gen-config; the configs/ folder was removed — the template is now embedded in the binary and installers generate the first config with xfetch --gen-config
- WSL presentation: new
os_wsl_style key (off / minimal / full)
- More package managers: Void (xbps database) and Gentoo (portage) support; unknown config keys are ignored
- Windows:
winget support added; choco list --local-only no longer miscounts; scoop list counts 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 and shared/ machinery
- New layouts:
section-box (bordered boxes per module group) and custom-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_kitty toggle (native protocol vs half-block), logo_gap for configurable image-text spacing, logo_width/logo_height for explicit sizing, and auto-responsive width (28% of terminal, clamped 12–42 cols)
- Cursor positioning fix: Replaced
MoveUp/MoveToColumn with SavePosition/RestorePosition for 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 / ConfigProviderResponse protocol, 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/remove commands
- 100 image-based configs for config-roulette with
logo_gap: 3 and logo_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