Top
Best
New

Posted by rickcarlino 6 days ago

Why TUIs are back(wiki.alcidesfonseca.com)
422 points | 420 commentspage 2
pelcg 6 days ago|
There are a lot of TUIs in existence worth looking at if one is interested or curious about them [0], [1], [2]

[0] https://github.com/rothgar/awesome-tuis

[1] https://terminaltrove.com/explore/

[2] https://github.com/ibraheemdev/modern-unix

Even before Claude Code, I always see htop as the prime example of a good TUI.

herrherrmann 6 days ago||
There are a lot of points in there that are just generally bad in modern applications – e.g. UI inconsistencies, lack of automation and general configurability (shared ways to handle windows, layouts, keyboard shortcuts, etc.). I think it’s fair to say these things are just hugely lacking in modern operating systems. Linux might come close, but only with lots of tinkering. macOS is clearly lost and degrading now, and Windows was never close to having these qualities.

I don’t know if TUIs will be the answer, but it’s an interesting development!

GoblinSlayer 6 days ago|
Windows has a hot key control for input and display of keyboard shortcuts https://learn.microsoft.com/en-us/windows/win32/controls/hot...
_jackdk_ 6 days ago||
The diagnosis for GNU/Linux is better than I expected but I think is still incomplete. Yes, you have two major toolkits (GTK+ and Qt) and many minor ones (most of which wrap one of the majors). Qt is proprietary but also available under a free software licence, but what if you don't want that that complexity? It feels like modern GTK+ is less of a cross-platform toolkit and more of a runtime layer for libaidwaita and the GNOME stack. So if you don't want to conform to GNOME's UI conventions, it's not clear where else to go.

Also, the explosion of new languages in recent years means having to write a new set of FFI wrappers around existing libraries, and it's easier to make an idiomatic library for TUI development than wrap all of GTK+ or Qt.

zozbot234 6 days ago||
The xfce folks are keeping GTK+ 3.x around, mostly for its advanced theming support. Isn't that quite enough?
_jackdk_ 6 days ago||
I didn't realise. That's good news. Whether it's enough, I don't know the UI space well enough to say.
Pay08 6 days ago|||
Qt's license really isn't hard to figure out. If it's free software, you use the free software license. If it's propietary/commercial, you use the propietary license.
okanat 6 days ago||
You can also use most of the core components (labels, buttons, grid views, image and media players) with LGPL in commercial apps. Only the more complex and more value-adding components like charts are GPL.
GoblinSlayer 6 days ago||
I wrote bindings for gtk, it's 16kb of text. I imagine riir of curses will be much more mork.
osaariki 6 days ago||
TUIs are great for low friction remote work. I do a lot of data processing work on remote VMs with a mix of interactive debugging/eyeballing and bulk jobs. TUIs are a great fit for the sorts of tools I build to support this work. The other UI paradigm I end up reaching for is locally hosted web UIs, as models are really good at one-shotting HTML reports with graphs and tables. Inside VS code those get automatically tunneled to the local machine.
rmunn 6 days ago|
This nails it. The fact that the app interface looks exactly the same whether it's running locally or in an SSH session means I don't have to learn it twice. And while some GUI apps (VS Code for example) can be run remotely and still look the same, it takes a certain amount of ceremony to set that up. And worse, that ceremony has to be done for each app and is different for each app.

Running TUI apps over SSH isn't ceremony-less either — you have to set up SSH keys and copy your public key over into the remote end's authorized_keys file — but it's ceremony that you would have already had to do anyway to get access to the remote computer in the first place. And once that ceremony is done, you can now run any TUI (that the remote computer has installed) remotely without any more ceremony.

JamesStuff 6 days ago||
There is only so much rounding of borders you can do in the terminal! On a 16” MacBook, you can’t have Activity Monitor take up less than about 2/5 of the width of the screen! There is so much padding around every single element.

I don’t need pretty buttons, I need usability and readability. Without having a 50” display!

maxrev17 6 days ago|
Somewhere along the way everything got dumbed down and all the info removed. It’s some condescending ‘so dumb ppl can take it in’ marketing bs I hear from time to time. And it sucks! I also doubt it’s true. Fashion be fashion.
mgaunard 6 days ago||
Power users have always preferred the command-line, since expressing what you want to do as a programming language is of course much more powerful and productive than clicking menus.

To avoid context-switching from the command-line, many essential UIs were made text-only. Another route would have been to integrate the command-line within graphical applications, but few did it -- the main example that comes to mind is Jupyter.

pocksuppet 6 days ago||
Blender is a 3D modelling program with a scripting language in it (Python). When you open the scripting pane, it's a command line. But it doesn't try to force the whole program to be in the command line, only the part where the command line is actually useful.
Ferret7446 6 days ago|||
TUIs are much closer to GUIs than CLIs. As a CLI enjoyer, I was resigned to the small win that at least many people distinguish TUI and CLI now but then I saw your comment.

There are quite a few GUIs that can be navigated with keyboard, e.g. menu bars can usually be activated with alt or win and single key presses

mgaunard 6 days ago||
As I said, the advantage of the TUI is that they avoid context-switching.
danny_codes 6 days ago||
Except the part where you switch into the TUI from a normal bash prompt, and your normal bash invocations get eaten by the parser..

Which is essentially exactly the same thing, except your UI is trash relative to a normal GUI

mgaunard 6 days ago||
You're not switching, it's all in the same pane, doesn't mess with windowing or focus, your keyboards shortcuts still work etc.
throwaway27448 6 days ago||
TUIs don't use the command line (ie bash, fish, etc), though. They use ncurses
whatever1 6 days ago||
Because we are all working on remote machines these days. Laptops have become thin clients that run fat local electron browsers that connect to the actual computer via http / ssh.

We made our machines 100x faster and instead of running compute locally we just made 100x slower client software.

droidjj 6 days ago||
> The most popular claim is the memory consumption, which to be fair has been decreasing over the last decade, but my main complaint (as I usually drive a 64GB RAM MacBook Pro) is the lack of visual consistency and lack of keyboard-driven workflows.

Lucky you. I avoid electron apps because I'm limping along with 16gb.

schmorptron 6 days ago||
I think part of it is also that we're able to still LARP as full developers of complex systems while vibe coding by seeing an interface that makes us look like l33t h4xx0rs even though we're just pressing continue 15 times
bartread 6 days ago||
> look like l33t h4xx0rs even though we're just pressing continue 15 times

I feel seen.

I also think there’s a certain element of reacting against absolutely everything becoming a bloated electron app.

I have no doubt - if it hasn’t already happened - that some apps will unironically embrace the most ridiculous option by shipping as electron apps that implement a TUI layer as their front-end.

john01dav 6 days ago|||
> I have no doubt - if it hasn’t already happened - that some apps will unironically embrace the most ridiculous option by shipping as electron apps that implement a TUI layer as their front-end.

Claude code is almost there

https://levelup.gitconnected.com/theres-a-react-app-running-...

Suro 6 days ago||||
Considering the insane memory consumption of claude code running in my terminal, electron was never really the problem, bad software was the culprit all along.
fasterik 6 days ago|||
The culprit is using web technologies where they don't belong, which Electron is also guilty of. Claude Code is 400k lines of JavaScript for a TUI where a sane implementation in C would be two orders of magnitude less code.
onemoresoop 6 days ago||||
Can’t say that electron does not encourage bad software, quite the opposite
treyd 6 days ago||
It's an example of bad code that further encourages more bad code.
jorvi 6 days ago||||
Yup. VSCode is really fast and memory-frugal for an Electron application of that complexity.

Likewise, Gnome has proven that you can write entire UIs in Javascript and have them be quite performant.

Electron (well, Node is a big sub-culprit) and Javascript in general just make it really easy to create a slow, bloated application.

Redster 6 days ago|||
Always has been.
WD-42 6 days ago||||
Claude code is react and their desktop app is Electron. But “coding is largely a solved problem”.
ornornor 6 days ago||||
> shipping as electron apps that implement a TUI layer as their front-end

A significant number of these apps are nodejs apps so it’s not that much of a leap!

bartread 6 days ago||
Yeah, I noticed some TUI libraries in npm when I was working on a Typescript project a couple of years back so I'm sure people are doing it.
samgranieri 6 days ago||||
I really wish that 1Password wasn’t an electron app. Or Spotify. (Maybe I should just use Spotify in the browser).

We need to advocate and evangelize for native apps, like RapidApi on macOS and also Tower.

MarsIronPI 6 days ago||||
Just wait till you hear about the wonders of React + Ink! Now you can have JS bloat in your terminal too!

Jokes aside, I don't understand how devs can bring themselves to ship such inefficient apps.

girvo 6 days ago|||
Except most of the TUIs I’m seeing are god awful with horrible input latency because they’ve reimplemented everything from scratch in python or whatever. Multiple hundreds of ms per keystroke: it sucks.
koliber 6 days ago|||
Bad UI plagued software development since ages immortal. The reason is not AI. Good UI design is a skill (or art?) and not an afterthought. But most people do not see it that way and that is why things are the way they are.
PunchyHamster 6 days ago|||
No, it's just misaligned incentives.

Companies make UI/UX to prioritise first 30 minutes of the experience, to keep user using it long enough that they stick with it. Not the 8h/day work the UI will get when a tool become pillar of your work.

exe34 6 days ago|||
> since ages immortal

since time immemorial?

flir 6 days ago||
3rd Sept 1189.

Anything after that is time memorial I guess.

derektank 6 days ago||
[dead]
the__alchemist 6 days ago|||
FYI this is why I still use Vim sometimes. I am OOM more productive in JetBrains, but sometimes I have to feel like Hiro Protagonist. So, Vim it is.
arcanemachiner 6 days ago|||
Sometimes I swear that people are just making up acronyms here to troll people.

I assume you mean "orders of magnitude" and not "out of memory". I have never seen the former used as an acronym before, let alone without some kind of contextual clue. (In typical Baader-Meinhof fashion, I'm sure I'll see it again in the next 24 hours...)

lucketone 6 days ago|||
https://news.ycombinator.com/item?id=48001905
Narishma 2 days ago||||
> I assume you mean "orders of magnitude" and not "out of memory".

I mean they mentioned Jetbrains, it could be either.

the__alchemist 6 days ago|||
Nailed it!
jbvlkt 6 days ago||||
I have just combined those together. I use astronvim as main editor but when I need IDE I switch to Idea. I use ideavim with configuration as close as possible to astronvim. So text editing is the same for me in both programs. Modal editors are still great and they can do a lot of work that looks like magic for AI era trained developers.
Cpoll 6 days ago|||
Did Hiro even use a keyboard? I remember everything was VR in Snow Crash.

I, of course, pretend I'm Zero Cool.

dbish 6 days ago|||
I’m relatively certain it’s just this at the end of the day. Everything I see people doing in their custom built TUIs or claude/codex CLI can be done, likely even easier, in a simplified IDE or easier to scan UI, but it feels nice/cool/cyberpunk/work-like to look like you’re doing more.

Everyone will have a “reasonable” explanation though for why they have to stay in the terminal even when they aren’t really coding anymore and it wouldn’t be hard to have a window next to your terminal if you really have to, but live and let live. Whatever makes you happy as be all become managers.

I too like a cyberpunk interface even if it’s last the need :)

allthetime 6 days ago|||
It is much easier to quickly generate a usable tui for simple monitoring and management than a usable gui. Go + lipgloss + bubble tea and a single prompt will give you whatever you need in a minute or two - much faster to compile and no platform specific issues. I can’t speak for anyone else, but I do a lot of work in the terminal still and I’d much rather stay in that context then open up yet another window
majormajor 6 days ago|||
> I can’t speak for anyone else, but I do a lot of work in the terminal still and I’d much rather stay in that context then open up yet another window

I do a lot of work in the terminal and that's exactly why I'd rather have other windows to the side so that my terminal can stay exactly focused on what I'm doing there. Those other windows might also be terminals, but I have a big screen, and I want to make use of it to see things all at once. A GUI gives far more flexibility for arranging those multiple views.

I've sat with coworkers taking two to twelve keystrokes to flip between things that I just have side by side in separate IDE windows, browser windows, or tabs... or can switch between with a single click instead of those keystrokes.

kajman 6 days ago||
Window managers are more flexible than multiplexers, but I also think there's a higher floor of effort juggling multiple separate GUI programs than going between tabs and panes in a terminal emulator.

Multi-monitor terminal juggling also probably loses out to GUIs, though for me it's usually IDE or Browser on one and multiplexer on the other. One big zellij session connected to multiple terminal emulators is probably the best way I could think to handle that.

rmunn 6 days ago||
> a higher floor of effort juggling multiple separate GUI programs than going between tabs and panes in a terminal emulator.

Depends very much on your window manager. Tiling window managers such as Hyprland let you open multiple windows and it will automatically arrange them side-by-side. Want one of them to be 60% and the other 40%? No problem, there's a keyboard shortcut (configurable) for that. Have four windows open in a grid arrangement and want to switch between them? Just slide the mouse, no clicking needed so the movement can be as rough and imprecise as you want, OR if you don't want to take your hands off the keyboard then SUPER+arrow keys (also configurable) will move the focus to the next window in that direction. (And if you are in focus-follows-mouse mode then it also moves your mouse cursor to be in the middle of the focused window, so you won't lose window focus by accidentally bumping your mouse and moving it one pixel). Keyboard shortcuts for maximizing and un-maximizing windows, for throwing them onto other workspaces and switching between workspaces...

I throw windows around my screen all the time, and rarely take my hands off the keyboard to do it. It's the fastest, most flow-like window manager experience I've found yet.

pocksuppet 6 days ago||||
This used to not be the case - we've regressed. In the distant past you could just drag a couple of widgets onto a form and update them from a timer.
tempaccount5050 6 days ago||||
Not anymore it isn't. "Claude, make this a web app".
allthetime 6 days ago||
Just what I need! A bloated react app to manage my systemd units
logicprog 6 days ago|||
Just use something like Tk or wxWidgets.
tempaccount5050 6 days ago|||
So just tell it html only if you want.
allthetime 6 days ago|||
How does the browser interact with the os? A tui exe has direct access. With “only html” now we need a server of some kind. How is multiple layers and running processes superior to a thin terminal based wrapper around the relevant io?

That said, obviously it depends on the use case. I’m not going to make a tui to interact with locations on a map - a web app makes a lot of sense in that case. But something like lazydocker makes sense more sense as a light terminal based program

sophiabits 6 days ago|||
A browser is OOM more expensive to run than a terminal app, regardless of what you're running inside said browser
vineyardmike 6 days ago|||
I've literally never met anyone in real life who used a computer that didn't already have a browser running 24/7
eVeechu7 6 days ago|||
Is that because they are much more likely to pay the ultimate price at the hands of the OOM killer?
wild_egg 6 days ago||||
Can get a GUI with the same prompt if you tell it to use TCL/tk instead of Go + Charm stuff
dbish 6 days ago|||
It’s very easy to do the same thing in a variety of ways and simple guis are basically solved by Claude/codex for almost anything.
mr_mitm 6 days ago||||
TUIs already increased in popularity before agents became a thing. The low latency, the ease of remoting and the limited screen real estate which forces the developer to carefully design the interface are genuine advantages. I've been using mutt, vim, tig, tmux, newsboat, etc for over a decade at this point, and the cyberpunk feeling faded quickly.
setr 6 days ago||
The low latency and instant startup is by far the primary value add imo. Nothing else comes close.

The inherent lack of UI bloat is an added bonus.

regexorcist 6 days ago||||
No it can never be the same. The terminal is about not having to switch from the keyboard. My entire workflow is tmux panes with different TUIs and terminals. Not to mention performance, with a neovim IDE you may have tens of them open in different panes for example. I wouldn't try that with VSCode.
logicprog 6 days ago||
You can make even lighter weight and just as keyboard driven GUIs. The only downside, as you say, is them not integrating with Tmux.
regexorcist 5 days ago||
Projects like opencode are making the distinction between GUI and TUI almost meaningless. And that "only" downside is a massive, deal-breaking one. At this point I only have a browser besides the terminal, and I can see that going away soon for the most part thanks to LLMs.
xiaoyu2006 6 days ago||||
But GUIs are hard to built - mainly because of tech debts around all three major platforms. But nontheless displaying graphics is harder than outputting control chars.
PunchyHamster 6 days ago|||
You could whip up decently usable UI in Delphi far quicker than similar one in any TUI framework.

The problem is that world went away from that and into HTML/CSS/JS/DOM mess that makes simple UI things hard and complex UI things slow and/or hard, on top of the bloat.

smackeyacky 6 days ago|||
This is a recent development.

VB6 could have you roll a GUI interface in minutes, so even trivial tasks could have a GUI.

The tools for CDE on Unices were arguably even better but CDE never really got any momentum.

That it’s tough to put together a GUI now is definitely a regression and Microsoft shooting themselves in the feet regularly over the last 25 years is squarely to blame.

ghusto 6 days ago||||
It isn't, at least for me. I choose between GUI and terminal apps based on which one is easies. Sometimes the "easy" option really isn't easy at all.
james_marks 6 days ago||||
Hot take: TUI’s default to providing utility, GUI’s are prone to extra style/bloat.

Obviously both are capable of the other.

The vanilla HTML styles look bare, so you have do _something_. TUI’s look sort of cool in their simplest form.

keyringlight 6 days ago||
It's an aspect I've wondered about, constraints do make you consider what's essential. For example in btop (screenshot in the article) the graphs are rendered with dots at low resolution, if there was another version where those graphs were full resolution is it telling you meaningfully more?
rmunn 6 days ago||
Since the dots in btop's rendering are using the Braille characters, meaning you get six dots in the space that would be taken up by one alphanumeric character, the resolution on those dots is surprisingly high. A maximized terminal on my screen is size 316x86, so that's 316×2 x 86×3 = 632x258 of "Braille dot resolution" (a term I just made up) available for the graphs. Sure, that's lower than the 2560x1600 pixel resolution of my screen, but you're entirely right to ask "Does that really matter?" The graph would be smoother with about 4x more horizontal pixels and 6x more vertical pixels to work with, but I doubt I would glean any more information at first glance.
jbvlkt 6 days ago|||
[dead]
deadbabe 6 days ago|||
I don’t understand why developers aren’t just learning to use CLIs and be comfortable with terminals even without cute little interfaces.

Are people really that put off by seeing some text on a screen and nothing more? Is tmux that difficult to learn?

sillysaurusx 6 days ago|||
I’ve been running Claude with --dangerously-skip-permissions. It’s so nice that I’m not sure I can go back. Pressing continue 15 times is surprisingly heavy, but you don’t notice till you don’t have to do it anymore.
ne8il 6 days ago||
I would try switching to Auto Mode which is their own recommendation as a safer alternative to that but still avoids needing to confirm actions endlessly: https://www.anthropic.com/engineering/claude-code-auto-mode
sillysaurusx 6 days ago||
I’d love to. It’s not available to Claude Pro nor Claude Max subscribers. Eventually I got fed up with waiting and just turned off permissions.
isityettime 6 days ago|||
Try an external sandboxing tool. When you need to adjust the sandbox, close the agent, launch it with the new params, and resume the session. It doesn't take long to arrive at a stable configuration; for me it's mostly about rw access to the CWD, read access to other local repos, and access to Nix. Other than that I can just use YOLO modes and not sweat it.

I briefly evaluated a bunch (had an LLM make a list of those that satisfied some basic criteria, then visited READMEs and websites) and chose nono. No regrets: https://nono.sh/

chrisweekly 6 days ago||
Cool, 1st I've heard of nono.sh. FWIW I've been happy w smolmachines microvms.
isityettime 6 days ago||
Hey, thanks for the tip! I'll also give those a try.

Even if I end up liking virt-free like nono stuff for agents, I am trying to explore and learn about microVM options lately for other development purposes as well. This is a serendipitous recommendation for me. :D

slig 6 days ago|||
I'm on the $100/m plan and it works.
dnnddidiej 6 days ago|||
I associate CLI prompt and typing 100wpm and lots of scrolling logs with l33t, but claude code is more 1992 DOS program vibes.
bee_rider 6 days ago||
CLI makes a lot more sense than TUI to me. A TUI program feels like a new thing to learn, a CLI program is just a new tool in my toolbox.

I can see some point to having an auto-updating dashboard or the like, though.

sghiassy 6 days ago|||
Thank you for this comment. As a principal engineer in FAANG, this the correct answer
rubslopes 6 days ago|||
I thought that that was the case for me, but then I tried using Claude Code through the desktop app last week and it was so bad. Slow, glitchy... I went back to the TUI in no time.
zer0zzz 6 days ago|||
Can it be much more simple of a reason and that tuis fit into many of our existing tmux based work flows?
yokoprime 6 days ago|||
Having worked with development since the early 2000s, I think its great that development has become more accessible and I dont particularly like that the old guard tries to gate-keep the idea of "being a developer". Being an engineer I feel requires more credentials, it always has. But if you feel like you're a developer, all the more power to you!
dlivingston 6 days ago|||
I mean, I guess there's that novelty for the first few years of your career. I've been doing this a decade. I don't care about looking and feeling like a l33t h4xx0r and I doubt my peers do either.

TUIs just solve the right problems in the same world we're already working in - the terminal. That they're fast to launch and terminals have modern features like rich color and mouse support just adds to that.

walrus01 6 days ago|||
"Claude, write a set of scripts using bash and python that trade this $10,000 on S&P 500 listed stocks until it reaches 5 million, make no mistakes"
dominotw 6 days ago||
lol most depressing comment of the day
xmodem 6 days ago|
TUIs suck and the only reason they are seeing a re-surgency of relevance is because everything else sucks more along one or more critical metrics. Given the truly incomprehensible amount of CPU and GPU power we have available, this is truly a blight on our industry.
More comments...