So much of what people like about terminals isn't really about plain text!

  • low latency
  • information density
  • ability to automate (even copy and paste, not just scripting)

I also like how you create a trail through your actions. You can scroll back to see exactly what command did what, with what parameters, and what was returned. Feels much more "modeless" than most GUIs, where things keep getting stacked on top of your screen.

On a technical level, a CLUI command is conceptually similar to a file path or URL. Since a complete CLUI command is simply a path down the command tree, each potential subcommand is like a portion of a file path or URL. Flags, on the other hand, function like query parameters. CLUI's resemblance to URL paths means you can send someone a complete, executable CLUI command as a URL.

  • CLIs and REPLs make trails of execution and thinking visible, GUIs usually put new state on top of the old one
    • CLIs allow users to see the history of query -> result
  • menu items with arguments could start to look like CLI commands
    • using Alfred with menubar search is a small step in that direction (although there's no arguments/parameters that can be passed to the "command")
      Alfred menubar search
    • another idea of composing REPL with ad-hoc UI:

      The below operation is equivalent to type (export-image :format "jpeg" :scaling 2) in the console and hit enter.

  • "infinitely expanding" UI (like always scrolling down/right) feel interesting on the first look, but then the feeling of only having a small window ("light torch") onto a larger structure ("whole cave") is even worse somehow
  • CLIs and text-based interfaces could optimise for auto-completeness of the commands

    Strangely, I don't actually know of any APIs that are intentionally designed with autocomplete in mind. I do know many APIs, such as Processing, that are designed for brevity, which is irrelevant in an environment with good autocomplete.

    — Bret Victor - Learnable Programming

  • CLIs make it much easier to compose tools together to create environments
  • this seems related to CLI UX where the UX is not only useful in terms of seeing past commands, but also a way to issue new ones - a CLI that could feel less robotic, less like a single-line program, and more like a discussion with the computer
    • a history of operations could impact the next proposed subset of operations to the user
  • that's why CLI/REPL interfaces usually feel better - they give immediate feedback (cli ux)
    • sidenote, but it's sad that we still can't build fast UIs in 2020