Terminal UX: why command lines are making a comeback
8 December 2023 · 3 min read · Nasim Akhtar
Most apps get louder every year. More notifications, more panels, more motion. Meanwhile a lot of developers spend more of their day in the terminal, not less.
I don't think that's nostalgia. The command line still does a few things better than anything with a mouse, and it's worth being precise about what they are.
It shows you what happened, and stops
Here is git status:
$ git status
On branch main
Changes not staged for commit:
modified: design-philosophy.md
new file: terminal-aesthetics.md
Five lines. The branch, what changed, what's new. No spinner, no progress bar, nothing asking for your attention. The output is the answer and nothing else.
A GUI has to decide where to put things, what colour they are, what moves. A terminal mostly has to decide what to say. That constraint does a lot of the design work for you.
You say what you want in one line
When you already know what you want, a menu is a detour. Compare creating a project both ways:
# GUI
File → New → Project → Select Template → Configure Options → Create
# Terminal
$ npx create-next-app my-project --typescript --tailwind
The second one isn't just faster. It's a record. You can read the exact options you chose, change one, paste it into a README, or put it in a script and run it a hundred times. A sequence of clicks leaves nothing behind.
Questions follow questions
The terminal works well for finding things out step by step:
$ docker ps | grep nginx
nginx-proxy running 0.0.0.0:80->80/tcp
$ docker logs nginx-proxy --tail 5
[notice] nginx started
[info] ready to serve
Is nginx running? Yes. What has it been saying? That it started and is ready. Each answer tells you what to ask next, and each question is one line you can change and run again.
Small tools that snap together
This is the Unix idea: each tool does one job, and the pipe connects them. find lists files, head keeps the first few:
# Ten files over 100 MB, from here down
$ find . -type f -size +100M | head -10
Neither tool knows the other exists. You built a new command out of two old ones without anyone shipping a feature for it. That's the real advantage over a GUI: the GUI gives you the features its makers thought of. The pipe lets you make the ones they didn't.
Plain text isn't the same as bare
Modern terminals are not green text on black any more. They support:
- Better type: ligatures, real fonts, good rendering
- Colour that means something: syntax highlighting and status colours, not decoration
- Live feedback: progress bars and output that updates in place
- Completion: suggestions that know what you're typing and where
None of this changes the core deal. You type what you mean, you get back what happened.
The point
The terminal is not coming back because it's old. It's coming back because it respects your time. It doesn't compete for your attention, it doesn't hide what it did, and it lets you keep and reuse every step.
A good interface does what you asked and gets out of the way. The command line has always done that. Most of what we've built since still doesn't.