CLI tool
areofyl/fetch avatar
areofyl/fetch

fetch renders your distro logo as a spinning 3D relief with live system info

An animated 3D fetch tool for your terminal. Takes your distro's ASCII logo, turns it into a spinning 3D object, and displays live system info alongside it.

1,076 stars44 forksCISC

At a glance

What is it?
fetch is a single file C program that turns a distribution ASCII logo into a rotating point cloud with Blinn-Phong shading, and gathers the system information it prints itself. It replaces the usual neofetch style output with a draggable 3D object, and it is published under an ISC licence with packaging for several distributions.
Who is it for?
fetch is worth installing if you want your shell prompt startup to show something you have not seen before and you like that it reads the system directly instead of shelling out to another tool. It is not a system information script for scripting, since the output is a rendered animation and the config is a display list rather than a machine readable record.
Can I use it commercially?
Yes. ISC is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 10 days ago.
What is it written in?
Mainly C, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.

Editorial analysis

A logo becomes a point cloud from the density of its characters

The core idea is a rendering trick that anyone can implement but few bother to: take the characters of an ASCII logo, treat each one as a block of ink, measure how dark that block is, and place a point in three dimensional space accordingly. The result is a relief of the logo that can be lit and rotated, which is what fetch does. The README describes the result as a rotating 3D relief with Blinn-Phong shading, and the project positions itself as a donut.c inspired fetch tool. It is based on an earlier project of the same author's, gentoo.c.

The lighting model is why the result looks solid rather than like a cloud of characters. With a configurable light direction, a configurable spin axis and speed, and an extrusion depth, the same character data reads as a solid object with a front face, a back face and extruded sides. The configuration exposes light, spin, speed, size, depth, and separate outer and inner colors for the extruded side and the front or back face, so a logo can be recoloured without replacing the artwork.

Interaction is the other differentiator. You can click and drag the logo to rotate it by hand and release it to fling it spinning, which is not something a static ASCII art tool can offer. The program runs until you press a key, and that keypress passes through to the shell, so it works as a startup fetch rather than a process you have to kill.

System information is read directly, with no helper binary

The README is emphatic that all system information is gathered natively, and that neither fastfetch nor neofetch is needed. The data sources are listed field by field, and they are the ordinary Linux and macOS interfaces rather than a wrapper around another program.

The operating system comes from /etc/os-release. The host name is read from /proc/device-tree/model on ARM hardware or /sys/class/dmi/id/product_name elsewhere, the kernel from uname(), and uptime from /proc/uptime. CPU details come from /proc/cpuinfo, or from the device tree on Apple Silicon, or from sysctl on macOS. Memory and swap are read from /proc/meminfo on Linux and vm_stat on macOS, disks through statvfs() combined with /proc/mounts or getmntinfo, and the local address through getifaddrs(). Power comes from the ACPI platform profile file with a powerprofilesctl fallback, and battery state from the energy_now and energy_full files or from IOKit on macOS.

Two of the entries go further than the obvious. The shell is detected through parent process detection rather than by reading $SHELL, so it shows the shell actually running rather than the login shell. The display entry enumerates DRM connectors to report each monitor's active resolution and refresh rate from the CRTC mode, the name and physical size from EDID, and whether a screen is built in or external. Stats for memory, battery and uptime update in real time while the logo spins.

Building is a make and a single C file

The whole program is one source file, fetch.c, and the build is a plain make. The Makefile at the repository root sets the compiler to cc with -O2 by default, installs under /usr/local, links against the math library, and reads the version string from a VERSION file in the repository. A codename is compiled in as well, and the target OS and architecture are passed to the compiler as defines.

bash
make
./fetch

That produces the binary and runs it. On macOS the Makefile adds the IOKit and CoreFoundation frameworks to the link line when uname reports Darwin, which is the only platform conditional in the build. The README states that it works on Linux and macOS.

Installation is a second make target, and the interesting part is that the prefix is a variable rather than a hard coded path.

bash
sudo make install
PREFIX=~/.local make install

The second form is the one to reach for if you would rather not install system wide, since it drops the binary under your own home directory. The install target creates the bin directory under the prefix and copies the binary there with mode 755. There is also a test target that builds a separate tests/shared binary and runs it, followed by a Python script, tests/posix.py, so the project has a POSIX layer checked by a test suite rather than left to inspection.

The logo comes from fastfetch when it is installed

The ASCII artwork is not baked into the program, or at least not only baked in. By default fetch auto detects your distribution and grabs the logo from fastfetch if it is installed, preserving the original per character colors, which the README says means it works with any of fastfetch's 500 plus distro logos. Without fastfetch present, the built in Gentoo logo is used.

You can also name a logo directly, and the names in the README are the ones the tool understands.

bash
./fetch -l arch
./fetch -l NixOS
./fetch -l asahi

Third option, dropping a file into your own configuration directory, which is documented separately at docs/custom-logos.md.

code
# distro: gentoo
         -/oyddmdhs+:.
     -odNMMMMMMMMNNmhy+-`
...

The distro line is a comment that names the distribution, and the rest is the artwork itself. The point for a user is that the logo is data, not code, so writing your own is a matter of pasting ASCII art into a text file.

The config file is a list of fields, not a set of key value pairs

Most fetch tools are configured with key value pairs. fetch inverts that, and the difference matters if you have used the other ones. The file at ~/.config/fetch/config is a list of field names, one per line, in the order they should be displayed, and a field that is removed or commented out is hidden. The README shows the list, running from os, host and kernel through to shell, display, wm, displaymanager, theme, icons, font, cursor, terminal, cpu, gpu, memory, swap, disk, ip, battery, powerprofile, locale and colors.

code
os
host
kernel
uptime
packages
shell
display
wm
cpu
gpu
memory
disk
ip

Custom static fields are added as custom_ prefixed entries, and extra mount points are added by repeating the disk field with a path, so disk=/home and disk=/data. Appearance settings use the same lower case key style: label_color with a named color, separator with the character for the title separator, shading_mode, shading for the characters used to draw the 3D shading, and box to toggle a frame around the system data.

The shading options are the practical escape hatch. The default is ascii, and the README describes opting into blocks or sextants as alternatives, with the shading line taking a set of characters that support UTF-8. A terminal that cannot handle the fancier characters has a way back.

Nine distribution packages, one ISC licence

Packaging is where this project is most complete, and it is a good sign of how much attention it has received beyond the code. The README lists an AUR package named fetch-git with the maintainer PlayRood32, installable with yay or paru, and a note stating that the package was not compromised in the AUR package hack and is maintained and up to date. On Nix, the package is in nixpkgs unstable with the maintainer Ghastrum, and there is a flake, with nix-shell -p fetch offered as a way to try it.

Homebrew has a tap maintained by the author himself, brew tap areofyl/fetch followed by brew install fetch-git. Fedora and openSUSE are covered by the COPR and Open Build Service repositories of the maintainer RealOrangeKun, and both pages also show how to build an RPM locally with rpmbuild against the fetch.spec file in the repository. Ubuntu and Debian have a PPA, a local .deb build path using dpkg-buildpackage, and a pacstall option. Gentoo is in the GURU repository as app-misc/fetch.

The licence is ISC, with the text in the LICENSE file at the repository root, and the repository also carries a CONTRIBUTING guide, a Debian packaging directory and a _service file. The project is not archived, the last push was on 2026-10-13, and the release tags show v2.3.0 on 2026-08-21, v2.2.1 on 2026-07-23 and v2.2.0 on 2026-07-22, so the version moved quickly through the 2.2 line.

Editorial conclusion

fetch is worth installing if you want your shell prompt startup to show something you have not seen before and you like that it reads the system directly instead of shelling out to another tool. It is not a system information script for scripting, since the output is a rendered animation and the config is a display list rather than a machine readable record. Verify first that your terminal handles the shading characters you enable, since the ascii option is the fallback when the terminal cannot, and check the LICENSE file before shipping it inside a product.

Frequently asked questions

How do I build and install fetch?

Run make and then ./fetch to build and try it in place, and use sudo make install to install the binary system wide, or PREFIX=~/.local make install to keep it inside your home directory. The project is a single C file, fetch.c, and links IOKit and CoreFoundation on macOS.

Does fetch need fastfetch or neofetch installed?

No. The README states that all system information is gathered natively, reading files such as /etc/os-release, /proc/cpuinfo, /proc/meminfo and /proc/uptime directly. fastfetch is only used to obtain the distro logo artwork and its per character colors when it happens to be installed.

How do I change which fields fetch displays?

Create ~/.config/fetch/config and list the field names one per line in the order you want them, removing or commenting out any you do not want. The full reference is at docs/configuration.md, and the file also holds appearance settings such as shading_mode and box.

Can I use my own ASCII logo with fetch?

Yes, drop the artwork into ~/.config/fetch/logo.txt with a distro comment line such as # distro: gentoo at the top. You can also select a built in logo at run time with a flag, for example ./fetch -l arch or ./fetch -l NixOS, and the details are in docs/custom-logos.md.

Which platforms and package managers does fetch support?

The README says it works on Linux and macOS. Packages are listed for the AUR, nixpkgs, Homebrew, the Fedora COPR, the openSUSE Open Build Service, an Ubuntu PPA, Debian packages, pacstall and the Gentoo GURU repository.

Official sources

  1. areofyl/fetch on GitHub
  2. Issues
  3. License: ISC
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/areofyl-fetch.svg)](https://hysenlabs.com/projects/areofyl-fetch)

Was this useful?