CrFetch - 'NeoFetch' in Crystal


This project came about when I was playing around with NeoFetch. I didn't like the fact it was all in one shell script, while it's nice for a shell script it makes for other developers time to be wasted having to sift through functions and variables. I wanted to make a fetch script that was minimal, easy to extend, follows OOP standards, easy to run, and lightweight. While I've build other tools using Crystal, this is my first one that has been using proper OOP methodology. Overall it's more for me to learn Crystal better as well as how Crystal works overall, but it would be great to get this to a state where others can use it on any system or at least every UNIX-like system.

Goals: The goal for this ultimately would be for this to have a Library of System classes that can be used for others, and then a CLI app that works with that Library.

Note: This now works for Linux and Mac. I'm not sure I have the time or resources to have it work on the Windows or BSD variants for it. Perhaps for Android I may try in the future to do something.


A simple fetch program to print your system details.

The idea is for it to work much like NeoFetch.


I have a cake file that will build the project as intended so I would recommend using that via cake, but you can also build it via crystal build if you prefer.

$ shards && cake # => ./bin/crfetch


After you've compiled the project just run the binary.

$ ./bin/crfetch

If you haven't compiled the binary, then you can just run like

$ crystal run src/


Follow install instructions.

Make sure to run tests before developing.

$ crystal spec

All tests should pass before developing. If tests do not pass make sure to look at the log and figure out why, if it's a bug or a feature that you're wanting then make an issue and if you want to then make a pull request for it.


  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request