gum
A tool for glamorous shell scripts 🎀
A CLI tool that adds polished interactive elements, text prompts, choice menus, confirmation dialogs, file pickers, and loading spinners, to any shell script using simple one-line commands, no Go knowledge required.
Gum is a command-line tool written in Go that lets you add interactive, visually polished elements to plain shell scripts without needing to know Go. Think of a normal shell script as a set of instructions a computer follows — the problem is those scripts are usually just plain text with no way to ask the user for input in a friendly way, or show progress nicely. Gum solves this by giving you simple commands you can drop into any Bash or shell script to add things like text prompts, dropdown choice menus, confirmation dialogs, file pickers, loading spinners, and scrollable text viewers.
The way it works is simple: each interactive element is its own subcommand (for example, "gum input" to collect typed text, "gum choose" to present a menu, "gum confirm" to ask yes or no). These commands print their result to standard output, so you can capture the user's answer in a variable and use it later in your script. You control the look and feel through command flags or environment variables — changing colors, borders, widths, and prompts without writing any interface code yourself.
You would use Gum when you want to build a script that guides someone through a multi-step task — like automating a Git commit workflow, selecting files to process, or confirming a destructive action — and you want the result to feel polished rather than raw. It runs in the terminal, so it suits developers, system administrators, and power users who live in the command line. It is written in Go and builds on the Bubbles and Lip Gloss libraries from the same team.
Where it fits
- Add a choice menu to a Bash script so users pick from a list instead of typing raw input.
- Build an interactive Git commit workflow script that prompts for commit type, scope, and message.
- Show a loading spinner in a shell script while a slow command runs so users know it hasn't frozen.
- Create a file picker inside a shell script so users select which files to process without hard-coding paths.