Glossary
- GUI: Graphics User interface
- CLI: Command Line interface
- TUI: Terminal User interface
- eg yazi, lazygit, terminal.shop, vim
I will use CLI & TUI interchangeably.
Context
A good experience when interacting with a GUI has a few things in common with a good experience in the terminal.
The intersection is ux.
The similarities
-
Follow conventions. Your users likely have common usage patterns that their muscle memory know to look out for
- Maintain common keyboard shortcuts
- CLI: maintain common flags/arguments eg
man
page, or--help
-h
-
Provide user feedback when doing stuff in the background.
-
Easy discoverability
- CLI’s achieve this via comprehensive text, suggesting commands & subcommands, and providing examples of common stuff.
jq
andgit
are good examples of this.
-
If you’re performing destructive actions, or state changes on the machine, inform the user.
-
This is true for both GUI & CLI apps:
By default, don’t output to the user information that’s only understandable by creators of the software. Catch errors & rewrite them for humans.
- UX copy is important
- CLI: When designing commands, subcommands, flags & arguments
- CLI: Don’t use ambiguous or similarly named commands
- There’s lots of writing on UX copy in the world of GUI apps.
Related reading
Been enjoying nerding out on this topic a bit. Here’s a few interesting links I’ve found so far:
- Rules that terminal programs “follow” : that’s where I learnt that
ctrl + w
will delete the last word 🤯 - Command Line Interface Guidelines: A great read. Would absolutely recommend putting aside an hour or two for this.
- 12 Factor CLI apps: I haven’t read this yet, merely skimmed it. It was cited a few times in Command Line Interface Guidelines.
- User experience, CLIs, and breaking the world: Another one I have’t read yet
- How we sold coffee from the terminal
- Dax tweeted a bunch of stuff while building sst’s multiplexer terminal ui.
- Data Science at the Command Line: Shared by Dandre, I’m yet to read this one.