Ferris the Crab, mascot of the Rust programming language, with the Git logo on its forehead


Built with:

Ever since I learned Git, I've used it in all my development projects. Even on solo projects, I like to commit to Git, as it's such an ingrained part of my workflow.

I generally prefer using Git from the terminal rather than a GUI. I feel it gives me more control, since Git was built for the terminal. However, one thing annoyed me about Git's terminal experience: staging individual files. git-add has an interactive mode that aims to alleviate this, but I found its interface clunky. I looked around for alternatives, but those I found either did too much or had other problems. Thus, I decided to create gadd: a small command-line utility for staging files to Git.

I wanted to program more in Rust after using it for Advent of Code, and found it suitable for a terminal application like this. To interact with Git, I used Rust bindings for libgit2. This taught me a lot about how Git works under the hood ⁠— as is often the case, it is more complex than it looks on the surface!

Now I use gadd almost daily, and quite enjoy it. There's something extra satisfying about creating your own tool and tailoring it exactly to your needs.

gadd's terminal user interface

Git logo adapted from Jason Long (licensed under CC BY 3.0)