If you spend any meaningful time on the command line, chances are you have discovered awesome-cli-apps — a community-maintained list with nearly 20,000 stars that catalogs hundreds of terminal tools organized by category. From fuzzy finders and file managers to HTTP clients and AI interfaces, it is one of the best starting points for modernizing a shell workflow.
Why CLI Apps Still Matter
Graphical interfaces come and go, but the command line endures. CLI tools are:
- Composable — they follow the Unix philosophy and chain together cleanly via pipes and shell scripts.
- Scriptable — they fit naturally into automation, cron jobs, and CI/CD pipelines.
- Lightweight — they run with minimal overhead on remote servers, cloud VMs, and HPC login nodes.
- Reproducible — behavior is determined by flags and config files, not hidden GUI state.
For researchers and engineers working on high-performance computing (HPC) clusters, this last point is especially important. Reproducibility is not a nice-to-have — it is a scientific requirement.
A Few Highlights from the List
The awesome-cli-apps repository covers an impressive breadth of use cases:
| Tool | What it does |
|---|---|
| bat | cat with syntax highlighting and Git integration |
| fzf | General-purpose command-line fuzzy finder |
| ripgrep | Fast regex search across directories |
| lazygit | Simple TUI for Git commands |
| jq | Lightweight JSON processor |
| rclone | Sync files to/from cloud storage providers |
| HTTPie | User-friendly HTTP client |
| tldr | Community-driven simplified man pages |
| ranger | Console file manager with VI keybindings |
| zoxide | Smarter cd that learns your habits |
This is just a fraction of what the list covers. There are sections for productivity, entertainment, development, data manipulation, and even AI/LLM interaction — all from the terminal.
From CLI Apps to Singularity Containers
On shared HPC systems like Bridges-2, users cannot install software system-wide, and dependency conflicts between tools are a constant headache. Singularity containers solve both problems elegantly:
- No root required at runtime — unlike Docker, Singularity containers run as the invoking user, which is a hard requirement on most HPC clusters.
- Frozen dependencies — the exact version of the tool and all its libraries are baked
into the
.sifimage, eliminating “it worked last week” failures. - Drop-in replacements — a thin wrapper script lets users call
batinstead ofsingularity exec bat.sif bat, so the experience is transparent. - Module system integration — Singularity containers fit naturally into Lmod/Environment Modules, making them first-class citizens alongside traditionally compiled software.
A minimal Singularity definition file for a tool like bat looks like this:
Bootstrap: docker
From: ubuntu:22.04
%post
apt-get update && apt-get install -y bat
%runscript
exec bat "$@"
Build it once, distribute the .sif file, and any user on any cluster with Singularity
installed gets the same binary.
What We Have Been Building at PSC
Over the past few years, the Biomedical Applications Group at PSC has been containerizing CLI tools — many of which appear on the awesome-cli-apps list — and deploying them as modules on Bridges-2. Tools like bat, dust, rclone, visidata, and lazygit are all available as Singularity containers with corresponding module files.
The awesome-cli-apps repository serves as a useful roadmap for identifying which tools are worth packaging next. If a tool is popular enough to be curated there, it is probably useful enough to deploy on a shared system.
Getting Started
If you want to explore the list yourself:
- Browse awesome-cli-apps on GitHub.
- Check the pscedu organization for existing Singularity definition files.
- Read the building Singularity containers post for a step-by-step guide to packaging your own tools.
The terminal is not going anywhere. With Singularity, neither is reproducibility.