2 November 2023

The Next Generation of the Command Line

By Christian Rocha

We started Charm four years ago with the goal of making the command line glamourous, powerful, fun and modern. Today we’re excited to announce that we’ve raised $6MM led by Gradient, Google’s AI-focused venture fund, with participation from new and existing investors Cavalry Ventures, Fuel Capital, Firestreak Partners, as well as the founders of Supabase, Foursquare, Fleetsmith (acquired by Apple), Honeycomb and others.

Charm started as a group of friends exchanging .vimrc tips and building open source libraries. We have a background in consumer tech, with a focus on iOS apps, but have always shared a passion for open source command line tools. We’d spent a lot of time at companies like Apple, Last.fm, TweetDeck, Zenly, and The Huffington Post building fun, UX forward products that users loved, and wanted to bring that modern product thinking to the command line.

Why the command line? Why now?

The command line has been a ubiquitous platform for computing for the past 30+ years thanks, in part, to its focus on simple tools that do one thing well, the ability to easily compose those tools into unique solutions, and a massive library of existing command line programs from which to draw from. Many of these attributes stand in stark contrast to the web and its siloed data, lack of composability and large, opaque solutions that often include a healthy dose of tracking, ads and other dark patterns.

The command line seemed to us like a healthy alternative to the web and closed mobile platforms. It was also ripe for an update with a focus on user-centric design and encrypted, self-hostable networked services. We wanted to build the command line platform for the next 30+ years.

Why open source?

The command line and open source have a long history together and most of the tools available for the command line are open source. It was important to us, from the start, to stay open source and provide open source, self-hostable solutions to our apps. We also love working with the open source community and have built the team around amazing open source contributors.

Glow and Glamour

An example of a Little Bubble Tea TUI
Glow uses Glamour to render markdown, obviously.

Our first two projects were Glow and Glamour. When we thought about modern product development one thing we felt was lacking when building command line apps was the separation of concerns between structure and style. On the web you have HTML and CSS, specialized languages that allow for parallel development. We wanted that on the command line so we built Glow and Glamour around that concept.

Chart showing Glow star growth over time
Markdown is the true medium of developer expression.

Bubble Tea and Lip Gloss

While it was a great step forward to be able to style command line output based on markdown structure, we needed a better framework for interactivity. Christian, who has a background in Haskell and Elm, wanted a way to build textual user interfaces in a stateful manner without having to think about rendering. With that foundation, we created Bubble Tea, a TUI framework for Go based on the Elm architecture. It ended up being a great pairing of functional programming concepts and Go’s less functional nature.

This allowed us to easily build animated, reactive, TUI-based applications. We saw amazing adoption of Bubble Tea and it now powers over 4,000 apps, boasts 20k stars on GitHub, and is in use at major companies like AWS, NVIDIA, Microsoft Azure, and many others.

An example of a Little Bubble Tea TUI
“Would it be weird to make this progress bar bounce?” we wondered.

After building a couple formidable Bubble Tea applications we also realized we also needed first class styling and layout tools. Lip Gloss was born and is the layout engine for not only nearly every Bubble Tea TUI, but also many general purpose CLI-based tools. Over 4,800 open source tools use Lip Gloss to date.

Chart showing Bubble Tea ecosystem growth, in terms of GitHub stars over time
Our studies show devs who build terminal stuff like weird mascots.

SSH, Wish, and Soft Serve

With our TUI tooling solidly in-place, we started to think about designing command line first APIs for services. We settled on using SSH as our protocol. Using SSH keys, we could offer seamless API access without passwords, with anonymity and end-to-end encryption. We could even bridge identity to HTTP based APIs with JWTs. This led to the development of Wish and the Charm Cloud, both of which leverage SSH based APIs and power the backend to tools like Glow and Skate.

Another advantage of the SSH protocol is that you can use it interactively with a TUI streamed from the server. With Wish, we made it easy to plug a Bubble Tea application into an SSH server and stream the TUI remotely. That along with Git’s support for SSH allowed us to build Soft Serve, self-hostable Git server with a first-class TUI.

Gum and VHS

Non-toxic?

Two of our latest releases have focused on bringing our platform not just to Go developers but to people writing scripts and using shells. Gum takes many of the Bubbles from our Bubble Tea component library as well as styling and layout feature from Lip Gloss, and creates a single binary that makes it super easy to add interactive UI, input elements, and styling and layout to your scripts and shell pipelines and quickly apply advanced. It’s our fastest growing project to date.

VHS mascot

VHS

  • GIFsGenerated

Create terminal GIFs with code!

VHS is a tool that lets you elegantly script and record screencasts of command line apps and render them as GIFs. It’s something we built for ourselves so we could make recordings in our READMEs and social media posts but it’s found wide adoption in the community.

Chart showing Gum and VHS star growth over time
A pair of hockey sticks.

Why Gradient

The Gradient Ventures Logo
Red, white and awesome.

From our very first conversation with Darian, we knew that we had found a partner that shared our long term vision for the command line, respect for the developer community and passion for open source. Gradient and Darian felt like the best possible partners to help us take Charm to the next level and we’re excited to be part of the Gradient family.

What’s next

We’ve been working on the next generation of our platform on both the frontend and backend. Over the next couple of months we’ll begin rolling out alpha tests of major updates to our projects and platform. We’ll also be working on sustainable open source software development and ethical monetization.

We want to work closely with the community on the future of Charm and the command line, so please join us on Discord or sign up via email below for our next alpha launch.

EOF

Read this post in your terminal with Glow:

glow -p https://charm.sh/blog/the-next-generation.md Copied!

By Christian Rocha

2 November 2023

Christian founded Charm in 2019. He enjoys silence, bitter melon, and applicative functors.

Lets chat!

Have a question about a command line thing you’re building? Got an idea for a new feature? Just wanna hang out? You’re always welcome in the Charm Discord.