Changelog Interviews Changelog Interviews #481

Making the command line glamorous

This week we’re talking to Toby Padilla, Co-Founder at Charm — where they build tools to make the command line glamorous. We talk about the state of the art, the next big thing happening on the command line and in ssh-land. They have an array of open source tooling to build great apps for the terminal and Charm Cloud to power a new generation of CLI apps. We talk through all their tooling, where things are headed for CLI apps, the focus and attention of their team, and what’s to come in bringing glamor to the command line.


Sign in or Join to comment or subscribe

2022-03-03T17:08:42Z ago

All the talk about command line applications was pretty cool, and I loved that you discussed the difference between “command line” applications (do one thing well, composable, scriptable, etc) and TUIs. BubbleTea and Bubbles look cool, but it awfully sounds like a re-invention (without historical context) of curses. There’s a lot of talk (in certain circles) about why the classic curses (and the newer ncurses) APIs are not good, and replacements that are available, but I’d would have loved to hear a discussion about the new BubbleTea API model and how it is better than the more mature and well known curses, turbovision and friends.

2022-03-04T19:32:46Z ago

Great question @guss77. Bubble Tea is based on the Elm architecture (, which is a functional reactive way of building front-end applications vs. ncurses being classically imperative. We also made it easy to pair with Lip Gloss which is very much like CSS. Basically Bubble Tea/Bubbles/Lip Gloss represent the past 10-20 years of UI best practices. Curses was certainly a great tool for its time, but doesn’t incorporate more modern methods for UI development. It’s also a language choice issue as ncurses is C but all of our frameworks are in Go, so able to take advantage of all of the language and platform features there as well. We’ve also tried to incorporate more modern default styling and features like support for auto-detecting light/dark terminal backgrounds.

2022-08-09T19:57:48Z ago

I was also a little bummed that there were no shout-outs to curses/ncurses during the episode. TUIs and widget libraries for TUIs are definitely not new. Any programming language that can do C bindings probably already has a library for this, or several. In many cases, those libraries do try to smooth over the rough edges of the original curses API.

On the other hand, if your project’s aim is “make TUIs cool again,” it probably doesn’t help to refer to your thing in terms of older things. So I get that, too, and still respect the hell out of what Charm is trying to do.

2022-08-09T19:23:08Z ago

Re: Adam’s question about Option-clicking links

Many popular terminal applications do have this feature, though it’s implemented client side. There’s usually a regex buried in the settings somewhere for how to recognize protocol URLs. Option- or Control-clicking them opens the link with the OS’s registered handler. iTerm 2 on macOS does this, as do most terminal apps included with modern Linux desktop environments.

Whether that’s in scope for a text-based remote administration interface to handle at the protocol level (SSH) could be a subject of debate.

Some other options that don’t rely on terminal support:

  • Have look at PopClip if you’re using macOS.
  • Text selection in X11 puts the selected text in the PRIMARY buffer, middle click pastes it; in Firefox, middle-click pasting a URL should open a new tab.
  • On other platforms, if you have a three-button mouse, try enabling middlemouse.contentLoadURL in Firefox’s about:config.

2022-08-09T19:38:10Z ago

Regarding there being “one terminal to rule them all,” be careful what you wish for. Was VHS really the better format? Is a monoculture around Chrome/Blink really a good thing for the Web?

Unix greybeards could probably regale you with similar-sounding tales of how VT100 won the “terminal wars.” I’m not up on that history, but I’m guessing one outcome was an ANSI standard to define the escape codes that we use for making color, bold, and underline in the Unix terminal to this day.

Fortunately there is some cooperation or at least cross-pollination regarding the “extended” escape sequences supported by these next-generation terminal emulators (undercurl is the one I’m thinking of), so maybe we won’t end up with

Player art
  0:00 / 0:00