This is what I come to HN to see - what a masterful and cool project. I'm literally dropping my plans today to make a project using this.
TUIs over ssh/telnet can be a lot of fun. Especially in cases where multiple people can interact with each other on the server. It simplifies the programming model as you only have one state on the backend that you render to multiple connections. Syncing up everyone becomes trivial. You can also use some React concepts, like rendering a virtual TUI and sending just the right set of minimal escape sequences back to the user to bring their display up to date.
A few months ago I implemented a telnet chat server[0] for fun and it was surprisingly easy to do so. Even by using a wasm vm that I was still working on at the same time.
This looks cool!
But: These mostly aren't command line applications, they're mostly terminal applications. They're no more "command-line" than running "firefox" from your shell is "command-line".
There's a big difference... a terminal application takes over your terminal and doesn't have all the usual advantages of command-line applications used from the shell, like history and easy scripting.
I love the general renaissance of terminal UI tools we are seeing in the last few years.
I can't quite put my finger on what I like about it so much. Something to do with the simplicity and directness of these UIs, guaranteed optimised for efficient keyboard nav, widespread adoption of vim-like navigation keys, and the fact that they link directly with my terminal shell so I can stay entirely in a stream of thought while working through complex series of tasks that weave in and out of these apps and shell interactions.
I do wish it was easier to select text from the terminal screen without using the mouse. It is supported in terminals to place text onto the system clipboard, but rarely implemented in most of these apps. It's the main reason my hands leave the keyboard.
Damn. I am generally not a fan of command line applications, but these libraries look amazing. I'm definitely going to be checking out Bubble Tea.
And the design of everything is really great. It's unique but not outlandish. Just clean, simple, and cute. Really impressive stuff here.
Awesome!
Just remember to use `ssh -a` (disabled SSH agent forwarding) when talking to untrusted systems.
Edit to add: by default, ssh doesn't forward the SSH agent, but that can be changed by config. Doesn't hurt to add the -a.
Charm's libraries for the CLI are just awesome. I think these guys are really breathing new life into the CLI and make it look appealing for all kinds of applications. Chose their bubbletea library for a CLI file transfer tool (https://github.com/ZinoKader/portal) and found it a delight to work with. Super easy to make something that looks and works great.
# Arch Linux (btw)
yay -S glow
Heh, nice take on the whole "I use Arch btw" meme.This is really cool.
No idea if the tools are any good, but I absolutely love your branding. Opinionated, but perfect for the demographic.
I love CLI tools, and I think we're just scratching the surface of what's possible. It's really neat to dig into the UI components that charm has available.
It feels as though many GUI-based web / chromium applications are collapsing under their own weight. They're slow and discoverability is bad. Maybe worst of all they're always distracting me with a popup / modal / alert that's unrelated to my current task.
A lot of these issues go away in a CLI, and I think there's a back-to-basics movement forming that could extend beyond the HN crowd.
While perhaps a bit more raw, if you’re interested in next gen CLIs and TUIs, see also Notcurses:
These apps look wonderful, only taking a casual glance at the repo, has anyone used, or would one recommend using Skate (https://github.com/charmbracelet/skate) as a personal PW manager or even keychain?
For a command line library, this site is really fun and well put together.
That website has such a great design and color scheme. I feel like I walked into a VR party populated with characters from an arcade machine in neo Tokyo where a couple of school kids were sinking quarters before Akira was exhumed to battle Tetsuo.
I like the idea of ssh sites, would love to see an optional notcurses client for them - it will solve the problem of delay even when scrolling (I'm talking about git.charm.sh) and also enable true rendering of markdown / pics / etc.
I've been using Charm tools and libraries for a while now, truly some of the coolest stuff I've ever experienced on the command line.
I really like the idea of glow and I actually use it to read my markdown notes that I edited in nvim. One thing that I miss is running glow in watch mode to edit markdown file in one pane of terminal and see results in another pane. I think I’ll pick up the idea of ssh tui for my website and blog. It will be fun.
Really nice design.
I like CLI and TUI, they can be both practical and aesthetically pleasing, in my opinion the "beauty" of tools is something that can improve the quality of life for the end-user.
But I have a few negative remarks.
- The glow.exe app on Windows is 19M, the launch is fast and I love that it is self contained and portable, but I think that even a pretty markdown viewer could be compiled to a much smaller binary, like easily 10x smaller without doing hardcore demoscene style binary compaction.
- I looked at the examples and source code of some simple widgets like the spinner or the progress bar, I am not fond of the API, too scattered and quite verbose, here again I think that the exact same thing could be written with 1/3 or half the lines without being more difficult to read.
I liked their contact email: vt100@charm... :)
Totally not relevant but those rollerskates look amazing in the Skate logo. In fact, all logos look eerily real in a way. I wonder what makes that so, it's literally as if i could grab them from the screen and put them on my desk. Well done, gfx artist !!
I wonder if the vt-100 terminal emulator will be used to surf the next "web"... Instead of web sites, the nerds will run their own ssh servers, then you can run programs and read files on their "web site" (ssh shell). This has many advantages over the current web, for example built in user management - you can allow anyone access by their public ssh key. Now you say what about graphics ? Text only might be a break from the ad ridden web today, but you could also ssh -X to run GUI apps.
What you are experiencing right now is what the millennials call "Yassification of the CLI"
I love the footer.
haters > /dev/null™
I hadn't seen Wish before. Seems like a great place to start building a modern BBS!
Gross candy-store like website. I can not believe that the start page is nearly 14 MB big.
And I still don't understand what they sell.
I feel like this is kind of missing the main goal of command-line apps being string-in/string-out. With modal text dialogs, you can’t awk/grep/sed your way through automations anymore. And is it really easier to code than a real GUI?
The SSH angle is neat though. It works much better then vnc/parsec at lower bandwidths.
I applaud the effort but I think the approach of trying to make the terminal more graphical is the wrong approach. The efforts should be at making graphical displays accept terminal protocols. As a simple test, will the command watch YouTube.com/qtre375fj show an embedded video? Think lisp machine interface.
Looks cool! Hope Rust gets some libraries like this, i'd love to make use of this functionality!
I don't know. I'm very skeptical about the recent TUI approaches. At least that's NOT what the current infrastructure is designed for.
I personally believe we really should graduate from the terminal infrastructure that was designed in the ancient time. We can make a good use of stuffs like client-side UI rendering (fast & reactive), graphical boxes (more compact boxes), image embedding, native multiplexing, capability negotiation, etc. These might be still possible on the existing infrastructure, but a clean slate should provide more consistent experience for everyone involved.
Reminds me of BBS.
Instant fan. I'm definitely going to be messing around with these. As someone who uses CLI constantly, this looks wonderful.
Also, this entire website is a work of art.
Is this like, a framework for making command line apps, the way Spring is a framework for making web apps?
Is Soft Serve for people who don't want to use GitHub?
These tools make me want to build command line tools!
Oh my god, I think this is the single best thing I've seen happen to open source world after linux distro options bombarding all over!
I wrote a side scrolling beat-em up in the terminal ("telnet exploit.courses"). Charm seems to have identified all the pain points, the Charm backend with KV store and user authentication would be something i'd need to implement multiplayer functionality. Gonna play with this stuff for sure.
Love the website!
I'm at the opposite end of the cli taste spectrum (my PS1 is a single character), but I love this site.
I have one major problem with a lot of the recent TUI stuff that’s been happening: it almost always assumes dark terminal, and uses techniques that work poorly or terribly on light terminals.
For example: bat’s default colour scheme uses white text for the contents of files except where syntax highlighting changes it. Not the default colour, but white. This makes it completely unusable for me without --theme=ansi (which can go in ~/.config/bat/config), because the text is literally invisible unless I highlight it. This is an idiotic or thoughtless default.
The fact of the matter is that you can’t reliably do anything even vaguely interesting in colours, because clients are too inconsistent. Do the bright codes higher contrast, or do they mean lighter? Different programs and different themes treat them different ways, and the effects matter greatly.
This particular app is mostly not too objectionable in my high-contrast light colour scheme, but there are a few places where it’s clearly not what was intended and doesn’t work as well, though still tolerable. Pane focus outline is a fair way off so that it’s much less obvious, and some of the colour choices grate. Markdown `code` highlighting, which is supposed to be salmon-coloured with a subtle lightening background, is way off and quite painful. Screenshot: <https://temp.chrismorgan.info/2022-01-24-git.charm.sh-in-lig...>. It’s all particularly bad for me with a light terminal, but I imagine it’ll look at least mildly dodgy even on many dark colour schemes.
There are no satisfactory choices in designing TUIs with colour. You can: stick to 5–6 colours plus bold and have it work pretty well for everyone but miss out on some desirable possibilities; go up towards 16 and have it start to not work properly for more people (e.g. blue could be clearly visible, or nigh-invisible against black and just about painful to read); use 256 or 24-bit and design for a particular background and character of colour scheme, and feel badly out of place on other sorts of colour schemes and work really badly in other sorts of backgrounds, especially as you can’t predict whether a lighter colour means higher or lower contrast; or specify the background colour (only even vaguely reasonable for full-screen TUIs) and badly annoy a lot of people.
It’s unfortunately a dead end for design as it stands: ANSI colour codes are just very insufficient. Things could be improved if apps at least tried detecting the terminal’s default foreground and background colours (printf "\033]10;?\033\\" and "\033]11;?\033\\") and adjusted things if that works, but you’re still just fundamentally quite limited in what’s possible.
, I like it, but I am not sure about diving into Golant again.
Any way to use it in other languages?
Or do I just keep poking at Rich[1] in Python?
Glamorous? More like glorious!
When you open the site on some mobile resolution, the ice cream cone looks like a pile of poo in the bottom left as the rest is cut out. Kind of funny considering the promise of a "glamorous cmd line".
I don't need it to be glamorous, rather to use it as little as possible.
When I started in computing the command line was the only way to make the computer do stuff, I don't miss those days.
While we're on the subject (and from Rich the other day) is there a library to do pretty command line apps for Java?
Wow, this is really cool.
Really effective use of colour. I like the aesthetic
... my eyes!
undefined
undefined
undefined
Color Scheme hurts my eyes.
I looked at their UI library. How did we get to a place where “The elm architecture pairs nicely with Go”.
This seems highly suspicious in light of recent supply chain attacks. Offering everyone a nice CLI experience, and so well branded and 1337 too.
According to Crunchbase, the company has two employees and receives millions in funding.
Something doesn’t add up here.
I love Charm; doing `ssh git.charm.sh` is a lot of fun and really sparks the imagination about SSH apps. They also have usable solutions for auth and storage, which like, if you're thinking of writing something like this are the first things you'd start reaching for. They also work hard to enable you to run all your own services, so you don't rely on the Charm cloud for everything. Definitely a good model for future punk projects IMO.