Top
Best
New

Posted by underdeserver 1 day ago

Stop Making TUIs(sockpuppet.org)
321 points | 412 comments
ricardobeat 53 minutes ago|
Hard disagree. Make more TUIs!

TUIs have downsides like accessibility, poor mouse support, but work really well if you focus on keyboard input. It is a better/faster input mode to begin with, especially for power users, but also for average people; you'd be surprised at how much more user-friendly an arrow-keys driven UI can be vs modern web interfaces.

I've been building my own TUI framework [1] and getting amazing results. Good TUIs are more of a GUI than a dumb text terminal.

If we had a cross-platform usable GUI framework, and more consistency across OSes, the story would be different.

[1] https://github.com/ricardobeat/milktea

01100011 3 minutes ago||
I have old wrists, essential tremor and tics. I try to avoid the mouse where possible. Yes, please make more TUIs!
hylaride 19 minutes ago|||
Yeahs ago I remember when my big bank switched from a TUI front end to a web front end for their front line staff. What originally took a few quick keyboard/tab combinations that was hard wired into employee muscle memory immediately took 2-3 times longer. Fortunately, the need to go into a physical bank doesn’t matter as much, but it’s still a regression…
a2ff6eeb0 45 minutes ago|||
GUI programs can also use the keyboard.
boredatoms 38 minutes ago||
A lot of us do the vast majority of our non-browser work on remote systems. GUIs are objectively bad for this
genidoi 5 minutes ago|||
You are probably thinking of pre-LLM GUIs. We are mere months into the era of LLM GUIs that are good.
jayd16 15 minutes ago||||
That's an indictment of ssh workflows not GUIs.

RDP works fine but it's based on a full desktop experience. Despite having the technology, we don't have the ability to remote in and run a single graphical program in a single window with the same ease.

We need something as seamless as Parallels for remote remote apps. But I guess we just settled on web apps.

rgzz 30 minutes ago||||
Well in plan 9 they work fine remotely so I wouldn't say they're objectively bad.
bmitc 23 minutes ago|||
Terminal programs are GUIs. So you are using a GUI to access those remote systems. Thus, there's no reason why another GUI couldn't do the same.

Everyone always acts like GUIs couldn't possibly make HTTP requests, interact over TCP or WebSockets, or do other remote communication. But they're actually, more often than not, more well suited for that than browsers for specific use cases, which are the use cases where you'd desire a devoted GUI.

mawadev 15 minutes ago|||
Plus, when you ssh into a server and don't want to rdp it, you at least have more degrees of freedom when you juggle complicated commands, like k9s
hedgehog 17 minutes ago|||
It's not hard to make a portable UI framework if you accept similar limitations to the terminal (limited OS integration, accessibility support, etc). You can do anything you want and ship it through RFB.
leephillips 22 minutes ago||
I’ve been enjoying making TUI programs for my own use. It turns out that the Kitty terminal emulator, with its saveable sessions of arrangements of panels that can communicate with each other, is an interesting framework for TUIs:

https://lwn.net/Articles/1080821/

mihaic 39 minutes ago||
The people that keep arguing for TUIs for everything seem like religious fundamentalists that can't be convinced with any argument that user interfaces should be about the user, and need to adapt to the task at hand.

Every time I use Claude Code, I'm wondering why the hell I'm regressing to the level of a machine. I paste an image that I want fixed, and I don't see the preview of it. I can't cut or edit text somewhere in the middle of a long sentence like in a normal user interface. I can't visualize any helpful graphics, not even Latex. I'm forced to interface like a machine when I'm a human being.

Why can't developers understanding that GUIs and TUIs both have their usage, it just depends on the task?

I'm fine to use vim over ssh into a server, just don't force me to edit fine typography with it.

zahlman 19 minutes ago||
> The people that keep arguing for TUIs… Every time I use Claude Code

As far as I can tell, practically everyone arguing for TUIs thinks Claude Code is a horrible example.

hylaride 10 minutes ago|||
I have mixed feelings in this debate, too. The big issue with GUIs is that they’ve become so bloated, especially as the default framework is now often electron apps. Web based frameworks tend to start keeling when large amounts of data need to be handled in the DOM, etc. When I use slack and discord, I sigh when I start seeing UI rendering lag when I switch channels and projects.

Though there’s been some recent progress in alternative models, the fact is native frameworks have some catching up to do. Some in particular (SwiftUI) are downright awful

voidnullvalue 24 minutes ago|||
Claude Code should be heavily sandboxed to be used safely. Are you advocating requiring a gfx stack in the sandbox just to use Claude Code?
tptacek 20 minutes ago||
No?
starik36 21 minutes ago||
I had the same feeling. I've since been using Claude Desktop and I have the convenience of the UI with Claude Code built right in. It even supports the same commands.
joshka 1 day ago||
As a ratatui library maintainer, NO - please don't stop making TUIs ;)

As a developer outside of that, I love the scratch the itch apps stuff mentioned in here. I have a vibe coded SwiftUI chess repertoire builder app that fits in that same sort of space that I'm currently working on, where I'd probably not have chosen to explore the idea if not for coding agents.

I agree with the article that the terminal is an odd shape which you're fighting against historical specs, etc. The key observation I have though is that the mismatch of terminal apps and libraries to deal with this are all fundamentally built around character cells and cursor movement plus various CSI/OSC/ASC/DEC/xterm/... protocols which are complex and have varying support and interact in weird ways.

To get a good terminal UX, I think the answer to this is probably to throw all that compatibility mess away and redesign a modern terminal protocol that bakes in accessibility, regions, scrolling, selection, proper keyboard, etc.

I know Mitchell Hashimoto has a bit of a different perspective on this, which seems like it's to define some more protocol stuff and continue to build up on things. I think that probably gets to 95% pretty well. But a 100% good is a full replacement.

tptacek 14 minutes ago||
Ratatui is such great work.

The New Terminal, the complete break from VT100, is I think the most powerful rebuttal to what I'm saying about TUIs.

My take is that the Morlocks should pack everything that is great about TUIs (and there are great things about them) and move them upstairs to live alongside the Eloi in GUI-land. Let 1000 Bloomberg terminal interfaces bloom.

But there's another even more ambitious take on this, which is to take everything that's pleasant and good about Eloi world and bring it down into the Morlock caves. I don't think you can accomplish that so long as you're drawing interfaces with punctuation characters, but there's nothing to say a terminal has to work that way; you can have a terminal with rich out-of-band-signaled UI. Not just, like, Kitty graphics, but something more like a real terminal that is meant from day 1 to work with all the complexity of a Bloomberg terminal.

You could have had it in 2010, but it's a king hell mess to put together, and you'd sort of assume nobody was going to use it (because it's a break from VT100 compatibility). But that doesn't matter anymore! We are the music makers, &c &c.

I think a lot of very smart people assume we're going to build up from VT100 to something incrementally but significantly better (Ghostty is already materially better than anything I'd used prior). But I hope those people eventually set their sights higher.

anon7000 10 hours ago|||
> To get a good terminal UX, I think the answer to this is probably to throw all that compatibility mess away and redesign a modern terminal protocol that bakes in accessibility, regions, scrolling, selection, proper keyboard, etc.

Why not just… a GUI framework or layout that’s meant to be keyboard driven and information dense?

jeroenhd 9 hours ago|||
TUIs run on any OS with minor patches to support quirks, GUI frameworks need a lot of work. TUIs don't need to follow any OS guidelines, cross-platform GUIs always look bad outside of the "main" platform.

If you're only targeting macOS/Windows/Gnome/KDE then the solution is easy: just grab a GUI control set and go ham.

Then there's remote access: you can spawn an X11 app through X forwarding and have a terrible laggy experience on Linux, you can use RemoteApps on Windows to have a good remote experience (but almost no other platform), you can use VNC to have an awful cross-platform experience, or you can use a TUI and have all the graphs and interactivity you need over a responsive, low-bandwidth connection on any combination of client+server.

the__alchemist 2 hours ago|||
> TUIs run on any OS with minor patches to support quirks, GUI frameworks need a lot of work. TUIs don't need to follow any OS guidelines, cross-platform GUIs always look bad outside of the "main" platform.

Have you tried to write a GUI program lately? I suspect things may have changed. I can write one using Qt, EGUI, etc (Or many other options), and it will just work on Windows, Mac, Linux/Wayland, and Linux/X.

Basically, you write your application on top of a GUI framework that smooths over OS differences for you.

zahlman 17 minutes ago||
> I can write one using Qt, EGUI, etc (Or many other options), and it will just work on Windows, Mac, Linux/Wayland, and Linux/X.

This is hard to square with the continuing obsession with Electron.

zbentley 1 hour ago||||
That ubiquity is the reason for the limitations of terminals/TUIs discussed in grandparent. Those two are not separable: they’re everywhere precisely because they target the lowest, oldest common denominator (teletype console behavior assumptions from the 1960s).

I expanded on this point nearby: https://news.ycombinator.com/item?id=49400697

pwdisswordfishq 8 hours ago||||
> I think the answer to this is probably to throw all that compatibility mess away

> TUIs run on any OS with minor patches to support quirks

So, which one is it?

Almondsetat 6 hours ago||
Those two are not contradictory statements
zbentley 1 hour ago|||
> Those two are not contradictory statements

I really think they are. The reason for terminals’ ubiquity is precisely their age, and their age results in them standardizing and accumulating bizarre behaviors.

Even in the microcomputer era, standardizing behavior to where it’s literally everywhere someone might want it takes time (e.g. the browser compatibility wars). Re-standardizing terminal behavior is both chasing a way wider (in terms of the number of places folks expect terminals to work the exact same way) but shallower in feature complexity target compared to browsers, and would necessarily be replacing a widely adopted existing standard behavior, not providing something largely novel like the graphical web was. That’s a tall order. I am hopeful for and impressed by the efforts of folks like Hashimoto, but expectations here should be tempered.

embedding-shape 6 hours ago|||
Maybe not, but they do sit on opposite end of an axis looking something like:

    TUI that runs on any OS |----------------| TUI without any compatibility mess
You really can't have both at the same time, either you have great compatibility (which will be a mess), or you don't, to varying degree of course.
Almondsetat 6 hours ago|||
Basically any OS can install any compliant terminal emulator, meaning the cases in which you really have to patch your TUI for another OS are few and infinitely more manageable than GUIs
Arainach 6 hours ago||
Compliant with what? The proposal is "throw out all the compatibility and build some other kind of terminal" in which case nothing is portable.
TylerE 4 hours ago||
How so? The idea is you build all the OS specific stuff into the terminal, not into the programs running INSIDE the terminal. Think Infocom Z-Machine, at the ultimate level, although obviously emulating a full on virtual CPU is overkill.

In any case we can surely do better than emulating DEC hardware from 50 years ago.

shevy-java 4 hours ago|||
It depends. If the OS can run e. g. ncurses, you have access to quite a lot of software here, such as htop. Though, I am not sure if it works on windows; but I think it works on OSX. Windows is very strange.
messh 2 hours ago||||
Html has also some of these properties, targeting the browser. Don't get me wrong. I do like TUIs, they are light weight and compose very nicely with the rest of the terminal (eg tmux). Also, i generally prefer just cli commands over tuis when possible.
eviks 5 hours ago||||
> TUIs don't need to follow any OS guidelines, cross-platform GUIs always look bad outside of the "main" platform.

TUIs look bad everywhere, so that's strictly worse

psychoslave 4 hours ago||||
There is not much difference between a TUI and a GUI once the premise is "let's start from scatch all other again for each applications". Sure then there is no guideline that comes between idea and implementation. But there is also no built-in accessibility, UX best-practices and many specificity of handling a vast experience of building something stable over a large period of time with many feedback from many different scenario.
wiseowise 8 hours ago|||
> TUIs don't need to follow any OS guidelines, cross-platform GUIs always look bad outside of the "main" platform.

So because TUIs look universally bad, they're better than cross-platform GUI?

notpushkin 7 hours ago|||
> cross-platform GUIs always look bad outside of the "main" platform

qBittorrent looks great on KDE, and would look great on macOS too if they used native icons (I’ve made a theme for that but was too lazy to install it when I was switching laptops). No idea about Gnome and Windows, but probably alright as well.

So, Qt can get you a long way. But you should of course adapt your app to platform conventions and guidelines.

Dilettante_ 7 hours ago|||
>So because TUIs look universally bad

You can't stay engaged if the menus don't bleep and bloop at you and confetti rains down on every click? That's a personal problem. A minimal UI is not automatically a bad-looking UI.

WA 7 hours ago||
No, but I want to click to place the cursor in my 10 line prompt wherever I want. I want to double click to mark words. I want to use a scroll bar. I want to copy paste properly and not "23 lines pasted". I don’t want to read docs to find all keystrokes the TUI supports to achieve what I want.
catlifeonmars 4 hours ago||
You can handle mouse events in a TUI

https://ratatui.rs/concepts/backends/mouse-capture/

christophilus 4 hours ago||||
It’s trivially easy to run a TUI in a container. Not so much with GUIs. And, since I run as much as possible in containers, and as little as possible on my host machine, I much prefer TUIs.
barnabee 4 hours ago||||
Agreed. This is exactly what I want, ideally with components and libraries and panels and data shareable and extendable between applications.

The closest in spirit is Probably something like Dear ImGui[0] and the ecosystem of components and apps built with it, but it's not quite there for me. Something is missing.

[0] https://github.com/ocornut/imgui

jrop 2 hours ago||
[flagged]
trueno 7 hours ago||||
there's a million gui frameworks under the sun and i still haven't found one that feels like what everyone has been asking for:

good dx, cross platform, fast, not ugly.

pick i dunno 2 or 3.

tui's get to check 2 or 3 of these just like any other gui library. somehow there still isn't a silver bullet here.

now i personally don't build tuis but guake style dropdown simple command and i have some other thing someone made open immediately running in ghostty? hell yea. with that said yes there are some stupid tuis out there that are anything but simple.

singpolyma3 4 hours ago||
Except web. Which inexplicably got all of these when no one was looking
TylerE 4 hours ago||
Not fast.
zbentley 1 hour ago|||
Not “not ugly” either. The flexibility is too high and standardization of UX is too low. Technically, we’re missing adoption of default standard toolkits like swing or GTK, and politically a11y/compliance checkers are a far cry from something like the HIG of old.
singpolyma3 3 hours ago||||
How so?

You can make slow things with it of course but it's not inherent.

psychoslave 4 hours ago|||
That depends what is build and how. Granted that a modern web browser is indeed an order of magnitude heavier than an OS, once that ticket is paid anyway, one can built very far, without relying on any additional bloat that contemporary web frameworks puts on top of it. There is not that much more data to send though HTTPS to bring a far more convenient UX than what raw text bespoke tweaks can offer over SSH.
tyre 4 hours ago||||
charm.sh builds many such things. I love them and their personality.
Brian_K_White 7 hours ago|||
Countless reasons.

Invent a gui client environment that is universal, works the same way everywhere, over any kind of channel, and is already implimented and supported everywhere, and utterly weightless in all dimensions (ram/cpu/network), and then you might be able to ask that question without it being incredibly ignorant.

Today the closest you might be able to say is web/electron, which is gross on all counts. If anything the closest is X11, which is not remotely close enough.

That's why not just...

teddyh 5 hours ago|||
MGR? <https://hack.org/~mc/mgr/>
crostlybostly 7 hours ago|||
HTML/Javascript would like a word
flossly 7 hours ago|||
we need a way to access locally running web apps without doing an ugly http://localhost:8022 and having to remember that.

I'd say http://localapps should give an overview of all web apps running locally, with links to them. Those links should follow a naming scheme where the hostname ends with `.local` or smth.

So: http://claudecode.local

mr_olive 6 hours ago|||
Hah, I was dealing with this problem today.

My approach: Add entries for my localhost apps to `/etc/hosts`, and set up nginx as a reverse proxy.

Now when I go to `http://myapp.local` in the browser, `/etc/hosts` tells it to go to `localhost:80`. The http server sitting there knows which port to send the request to. I also made a systemd service that starts nginx automatically.

Now I have meaningful URLs for local apps, and I don't have to remember which one is listening on which port.

iskra 2 hours ago||||
Rather than typing http://localhost:8022, name each app and put them behind one local proxy:

1. In /etc/hosts (or dnsmasq): 127.0.0.1 ourapp.test 2. Caddy in front: ourapp.test { reverse_proxy localhost:8022 }

Caddy auto-provisions local certs, so you get https://ourapp.test, no ugly ports and no "not secure" prompt.

For the overview idea: a tiny local dashboard that scans common dev ports (3000, 5173, 8080...) and lists each running app by name is a ~100-line utility. This is exactly the kind of small tool I build, happy to make a quick version for you.

fc417fc802 6 hours ago||||
Won't that be cluttered by various random processes listening via 0/0? Perhaps we need a standardized service that web apps can register with.
singpolyma3 4 hours ago||||
Bring back installable PWA on desktop
antonvs 3 hours ago|||
> I'd say http://localapps should give an overview of all web apps running locally, with links to them.

Malware will thank you.

NBJack 2 hours ago|||
Definitely not weightless. So much bloat has been dedicated to various frameworks for it, and modern browsers are notorious for how much RAM they require. I'm particularly reminded of this each time I try to visit websites on one of my older Raspberry Pis. You are just pushing much of that complexity and overhead to the client.

That same Pi won't even blink at a local TUI.

internet2000 21 minutes ago|||
Not only I want people to stop making TUIs, I want you to stop maintaining your TUI library!
torginus 4 hours ago|||
I have a question - I've briefly looked at the API, and it seems like a mostly general-purpose user interfance library.

What do you think of replacing the 'render' part with something that's more like a generic UI? You could keep the UX the same, yet your app would look like a desktop app (or at least close to it).

Trying to fit in the limitations of 80x25 text rendering is cool, but there's nothing in the underlying architecture that of modern graphics display that's predisposed to that, it all ends up as GPU commands.

I'm sure you could get most of the way to what I'm describing with just replacing the font/character set with one that renders things like borders in greater detail.

Hell, you could even add this as post-processing. You look at the terminal output with cellular automata like rules, and try to render UI primitives fitting that.

joshka 4 hours ago||
If you're redesigning a protocol layer, then I'd say you still want to target fixed size cells as the unit of rendering. It's just not the central abstraction like it is in the current terminal approach. Because you're one step above here, you have th ability to do better border handling. There's a lot a things you miss trying to force borders through a character set thing (e.g. missing characters depending on your font, missing ability to position borders naturally, interaction with background color, adjustment of size and space of rendered text due to interaction with unicode characters and fixed positioning) ...

But in general, going with a fresh new protocol allows you to do a bunch of things semantically that are currently done as pure graphical stuff and that's useful.

fc417fc802 9 hours ago|||
> To get a good terminal UX, ...

At that point you're just inventing a new DOM variant and aren't fundamentally different from any other opinionated GUI framework. The value of the terminal for me is the minimalism. I absolutely despise all these new "features" that get added via protocols. I _want_ the boring grid composed entirely of extremely primitive character cells where WYSIWYG in terms of any underlying abstraction. The only innovation I welcome in this space are improvements to portability and speed.

My snarky response to the author's title would be that you can take your GUIs and all the janky flashing lights they entail and shove them up your ass.

joshka 4 hours ago||
The problem is that cells don't compose well as an accessibility thing. You need a DOM equivalent in order to realistically do a bunch of things that are meaningful at an app level. TUI libraries are all basically doing that DOM thing already - just custom and treating the final shippable product as the cells, positions and imperative instructions for how to tell a terminal what to do. I' just saying that a more declarative interaction is very likely the sort of simple and boring that helps portability (long term) and speed.
fractorial 4 hours ago|||
Damn, what an epic library name.
vatsachak 46 minutes ago|||
So...emacs
jrop 2 hours ago||
The approach you're describing (redesign the protocol) is one path. Another is to sidestep the protocol entirely by using a platform that already owns its rendering surface and happens to run in a terminal: my preference is Neovim.

Let me get the caveats out of the way first: this only makes sense if you already live in Neovim. The whole ergonomic case is muscle memory you already have. If you're not a Neovim user, you're just buying another learning curve. Also, the language is Lua (not Rust) so it won't appeal to the ratatui crowd on that front, and there's no proper layout system yet.

Neovim [0] renders to its own buffer system (extmarks, floating windows, virtual text) rather than emitting ANSI escape codes. Under the hood it's still a terminal app, but from the UI author's perspective you're not fighting terminfo, CSI sequences, or varying terminal support. You get proper cursor tracking, scroll regions, and editable text areas out of the box.

On the UI framework side, morph.nvim [1] provides a React-like component model (h(), state, reconciliation) on top of Neovim. It's not a general answer the way ratatui is, but for the slice of devs already in Neovim (there are dozens of us!), it's a pragmatic way to get GUI-framework-like ergonomics without the terminal protocol fight.

For a sample of what TUIs in this paradigm can look like, I've been working on tuis.nvim [2] (Docker, K8s, SystemD services, process management, and more all as native Neovim buffer TUIs).

[0] https://neovim.io

[1] https://github.com/jrop/morph.nvim

[2] https://github.com/jrop/tuis.nvim

tescreal 3 hours ago||
Counter proposal: stop making gui, ONLY make TUI.

+ seamless cli integration + network portable + graphics (!!) with modern emulators + always themable + scriptable + works with any navigation modality + you can copy & paste entire segments of your window easily + easy to consistently theme + did i mention entirely network/os transparent? + blazing fast

tongue-in-cheeck mostly, but i assure tfa, the tui serves useful functions. i spend >80% of my time in terminal, and having a pane to do some task a gui would otherwise be needed for is a sheer blessing. being able to essentially move my session to a laptop is wonderful. no mucking with screen sizes or weird X11 wonkery (if you still use x11). what would blow my socks clean off is a tui/gui+gui/tui backend pair so we can have our tui and you can gui it tooie.

bee_rider 53 minutes ago||
TUIs and GUIs are both mostly bad for the same reason, you have to learn a new “language” of interaction for with each program, finding the buttons and figuring out how the designer thought the information should be hidden from you.

Stop building user interfaces in general. A command line interface is best. If someone doesn’t want to learn how to talk to the computer, they can ask a chatbot to drive the CLI for them.

Edit: the only TUI anyone should be willing to learn is their text editor, vim or emacs, because that’s fine for 99% of tasks.

matherial 13 minutes ago|||
> TUIs and GUIs are both mostly bad for the same reason, you have to learn a new “language” of interaction for with each program ... Stop building user interfaces in general. A command line interface is best.

A command-line interface is a "language" like any other. Each tool has its distinctive keywords, many have complex non-standard grammars (e.g., openssl, ffmpeg). And for more complex tools, the learning curve for this language is hilariously steep. I've been using ffmpeg on and off for two decades and I still feel quite helpless with it.

I think your argument makes sense, but it's just an argument for a standardized language, whether that's GUI, TUI, or CLI. Unfortunately, every other program or class of programs tries to innovate in some weird way. There's no reason why switching from Photoshop to GIMP should be so confusing, but it is.

dbtc 31 minutes ago|||
Also ncdu. And *top.
bhaak 3 hours ago|||
Emacs does that.

If you run an emacs server you can connect to it with an emacs in TTY and one in GUI mode.

amrit3128 2 hours ago|||
With ghostel, the terminal experience inside emacs has become fantastic. Vterm was acceptable, but still too slow for me. Combine them with packages such as ultra scroll and emacs reader, I'm having.ore fun than ever in emacs
tescreal 3 hours ago|||
Emacs does everything. I want everything to be more like Emacs
DonHopkins 1 hour ago||
I know, me too, which is why I named my cat Emacs! He's awesome.
nmz 1 hour ago|||
https://arcan-fe.com/ proves you can have all of that and more without having an archaic TUI.
TacticalCoder 33 minutes ago|||
> i spend >80% of my time in terminal,

My life is spent inside terminal and Emacs. Every time I reach for the mouse, I consider it a major fail. Like: big time failure.

Now at times I'll use the mouse: for example when I'm designing a 3D part to then 3D print to fix something around the house. In that case a mouse makes sense. Or for gaming: a mouse makes sense.

But for most of what I do, even just moving my hand away from the home row position to reach for the mouse is a massive fail.

perching_aix 53 minutes ago||
> network portable

They're an absolute torture to work with over a dodgy connection, which often may not even be your fault. Looking at you AWS.

matheusmoreira 6 hours ago||
No, thanks. I don't want a mere "user" interface, I want a programmer's interface. I don't like the command line because I'm a "unix nerd", I like it because it lets me rapidly cook up little programs and execute them.

Here's an example I just pulled out of my shell history:

  c=3afba1a; reset; laptop "virtdev ssh liblinux -- git -C liblinux format-patch -1 ${c} --stdout" | tee /dev/tty | termux-clipboard-set
This huge oneliner clears the screen, logs into my laptop via ssh, then logs into my development virtual machine, then generates a patch from the specified commit, and this data gets piped into my Termux terminal and my phone's clipboard. Then I paste it into the ChatGPT app for code review.

I didn't need to think to write this, I just wrote it right there in the terminal using the shell's line editor, just because I needed it, and it completely solved my problem. It's as easy as pressing up on keyboard now, and I can easily turn it into a script if needed. Nobody had to bend over backwards to add monstruous features to the apps to accomodate me. I knew what my computer needed to do, and I made it do it.

In my opinion we need more of this, not less. More unix and less iphones.

unchar1 5 hours ago||
From the article

> CLIs have purposes for which they’re irreplaceable. Building a CLI is almost always a good idea. Building a TUI almost never is.

You're also arguing for CLIs which are absolutely great. But TUIs provide none of the composability of CLIs nor the malleability of GUIs

messh 2 hours ago|||
If you use the terminal a lot then TUIs keep you there wo the need to manage yet a other window in the OS. For e.g. you can run nvim in another pane in tmux.
matheusmoreira 4 hours ago||||
It's a fine point if made in isolation, but TUIs tend to be more technical and useful simply because they require using a terminal at all. GUIs tend to be made for the non-technical iPhone audience.

So while I'm not fundamentally opposed to graphics, I'm absolutely opposed to the "average user" culture surrounding it. I don't care about the "normal person", I don't want "user experiences" that hide the computer, I want all of the computer's primitives exposed so that I have full control.

https://contemporary-home-computing.org/RUE/

TylerE 4 hours ago||
> GUIs tend to be made for the non-technical iPhone audience.

Except for, you know, every serious professional application ever.

israrkhan 1 hour ago|||
Maybe compatibility goes away a with TUIs. But portability, speed, remote access, and less resource usage are still key advantages.
singpolyma3 4 hours ago|||
TUIs are not CLI programs though. They're GUIs which render in a terminal
matheusmoreira 4 hours ago||
The shell's line editor is a TUI. It's a simple text editor embedded right there in the command line. It can even render your shell history by pressing the arrow keys.
singpolyma3 3 hours ago||
Sure yes. A terminal is a GUI. But it's a GUI used to both run cli programs (which can be piped etc) and TUIs (which cannot)
embedding-shape 6 hours ago|||
I agree, authors whole "The time has come to re-evaluate terminal and command line interfaces." is weird, if anything we should be moving MORE towards terminal and command line usage.

Another example from recent history, I just wanted a easy way to mount all connected drives, so whipped up:

    lsblk -l | grep -i part | cut -d " " -f 1 | xargs -I{} sudo mount -m /dev/{} /mnt/{} # automount_all
How would you even approach this with a GUI? You'd need something like Automator or whatever is called on macOS, then manually pipe GUI elements together (or some other way?), and finally there is no automated way of actually testing that it works, so once it breaks because the inevitable OS upgrade, you'll need to manually fix it. Then whatever solution you came up with or used, is almost never reusable for other things.

Meanwhile, a shell alias/function just sits there, easy to see what it does, can control anything in your computer, GUI or not (one way or another), lets you build up your own "database" of tools that all compose together (again one way or another) and finally is easy to put under automated testing.

croes 5 hours ago||
The article is not against CLIs but TUIs.

It’s extra mentioned that CLIs are mostly a good idea but TUIs aren’t.

regularfry 4 hours ago|||
One version of this is "every application is actually a repl with ideas". I do wish the lisp community cared more about GUIs because it feels like there's a huge gap where exactly this sort of extensibility could be merged with precisely the richer sort of visual interaction the article wants.
LudwigNagasena 4 hours ago||
That example doesn't use any TUI.
matheusmoreira 4 hours ago||
The line editing in my shell is absolutely an example of a TUI. It's a simple text editor embedded in the command line.
ijcisnfjsj 43 minutes ago||
It isn’t anywhere near related to the intention of the blog’s author.

But I think you know that very well and just wanted to write your little argument to make yourself sound a little bit more of a “unix nerd” as you put it. This little move you’re trying to pull here? Yeah, it’s the HN version of LinkedIn’s humble brag post.

Please, mate. Let’s just not.

sjbzbeiks 11 hours ago||
Tabs vs spaces.

I’ve always appreciated the positive side of TUIs and appreciated less the positive side of GUIs. I didn’t grow up with a computer at all and in one of my first adult jobs I had to use a TUI at Papa John’s for punching in orders, it was 20x faster than anything I used after it at other restaurants that were GUI driven (keyboard speed wins for me, fit my brain perfectly). I think I learned it in 5 minutes. I was just a normy trying to pay bills.

I dunno why we gotta be insulting to people’s preferences, the article is genuinely bad about this.

WhyNotHugo 9 hours ago||
What you're comparing is really "keyboard-driven" via "mouse-drive".

A GUI can be keyboard-driven and as fast as a TUI. The sad truth is that the status quo for GUIs is absolutely terrible, and most were rushed out and not properly tested to check if they're really usable without a mouse.

moooo99 4 hours ago|||
> The sad truth is that the status quo for GUIs is absolutely terrible, and most were rushed out and not properly tested to check if they're really usable without a mouse.

This is the key point. No platform UI paradigm focuses on keyboard navigability and speed, all focus on mouse and visual effects for discoverability in a pursuit to dumb down the user experience enough to make it usable for everyone, breaking power users in the process (and increasingly also accessibility stacks).

krzyk 5 hours ago||||
Yes, but GUIs are by default mouse driven, very rarely one can see a keyboard driven one (I haven't seen any).

And TUIs are only keyboard driven. So the choice for speed if you don't need graphics is always - TUI (or CLI).

regularfry 4 hours ago|||
> very rarely one can see a keyboard driven one

Not so. GUIs absolutely should be keyboard-drivable, if they're written to the human interface specs of whichever platform they're hosted on. That doesn't mean they don't support being mouse-driven or even that mouse isn't the default, but in my experience if the developer has taken any sort of care with the interface then keyboard interaction will be at least as good, if not better, with the keyboard.

> And TUIs are only keyboard driven.

Not true either. There's a line in my .vimrc saying "set mouse-=a" specifically because I want to turn off the mouse in that particular TUI app. If a TUI app doesn't support the mouse they've just not added that support, it's not that it's not possible.

graemep 1 hour ago||||
A lot of GUIs can be muse driven.

The problem is discoverability. You need to go out of your way to learn shortcuts.

vidarh 5 hours ago||||
> And TUIs are only keyboard driven.

Plenty of TUIs support mouse to various extents too. Claude Code is an obvious example (try the scroll wheel for example).

I agree with you that TUIs are keyboard driven first though - and so you can be certain it will work well.

JodieBenitez 4 hours ago||||
> And TUIs are only keyboard driven

Absolutely not.

cpach 5 hours ago||||
Emacs is primarily keyboard driven.
singpolyma3 4 hours ago|||
A TUI is a GUI.
lenkite 6 hours ago|||
A GUI requires a lot more work to be keyboard-driven and as fast as a TUI.
jbstack 10 hours ago||
I like TUIs for largely the same reasons as you, but I don't think this is actually a valid criticism of the article. It specifically addresses this by pointing out that you can make your GUI keyboard driven if you want to, so this isn't really an advantage of TUIs per se. It just happens that TUIs tend to be keyboard focussed while GUIs tend to be mouse focussed. But that's a design choice rather than an inherent property of TUIs vs GUIs.

I agree that I found the article to be poorly written. Mainly because it takes a long time to make its point. I didn't really need to see a million examples of the author's vibe coded slop before getting to the topic which the title suggested the article would be about.

notpushkin 7 hours ago||
> I didn't really need to see a million examples of the author's vibe coded slop before getting to the topic which the title suggested the article would be about.

Agreed. One would hope the article would go into detail of how to make a great GUI (including tips on how to make sure it’s easy to navigate with a keyboard).

hadlock 34 minutes ago||
MacOS: what is my purpose

Me: you exist so I can launch iTerm2, Chrome, and VS Code

MacOS: oh, my god

I can't ever imagine using walled garden graphics api in 2026. Particularly for work tooling

bayindirh 3 hours ago||
Sorry, no.

I don't want to forward a whole desktop environment just because I want to use a small application I have written for myself.

TUIs are much more portable, easier on eyes, can be information dense, and resistant to lassiez-faire UI library changes on platforms. They don't need GPUs to render, megabytes of RAM to run, great amounts of bandwidth to access from afar.

I'll write a library for the functionality, and will slap a TUI on top. You want a GUI, write it yourself. Everything is GPLv3 licensed. You can do whatever you want as long as you respect the license.

messh 1 hour ago||
TUIs also live where the rest of the interesting stuff happens, in the terninal. They don't force you to move to a different env
fschuett 3 hours ago||
> They don't need GPUs to render, megabytes of RAM to run

They do these days, because you still need a terminal emulator and those are then basically GUIs in themselves. Ain't the 80s anymore :^)

bayindirh 2 hours ago||
I still have quite a few systems which doesn't have a GUI attached to it, and I access them via a pure console.

Most, if not all these systems have Matrox G200 or similar low end 2D integrated graphics which are just there to see the text during boot, nothing else. I sometimes SSH from these systems to my own systems to use TUI or CLI tools.

If I want to go a step further. We have a couple of real VT320s.

Working at a datacenter has it perks, it seems. :^)

omnibrain 1 hour ago||
Yes, stop making TUIs. Make GUIs in Terminals!

It’s ridiculous how far we have fallen behind the Terminal GUIs from the early 90ies. Look at the Turbo Pascal IDE and business apps built with it. Windows, window management, scrolling in windows, rich dialogs. Everything there. While many modern TUIs are just lists with numbers you can select. Everything is pretty rudimentary

I was missing a real terminal GUI library for some software I built. The rudimentary libraries did not work for me.

That‘s why I took Free Vision (the Turbo Vision derivative for Free Pascal) and ported it with the help of Claude Code over to modern Delphi, then modernised the object system and added lots of features and from there we ported it to go.

There are still lots of bugs and oversights (some caused by me not really knowing how original TV worked) that I fix as I go along using it for real projects.

https://github.com/oldwired/fv-delphi-modern https://github.com/oldwired/fv-go

JodieBenitez 4 hours ago|
> Stop Making TUIs

No, I don't think I will :)

It's great for admin tools, alongside CLIs.

It's portable, it's fast, it's discoverable, it has zero bullshit effects, it's as secure as my shell, it's efficient.

And what is this point about agents making it easy to generate GUIs ? They are equally good (if not better) at generating TUIs using any of the great frameworks for this.

rafram 2 hours ago|
> It's portable

Not really?

> it's fast

It's not - most terminals are ridiculously slow, and each TUI framework requires its own hacks to do partial "repaints" using ANSI escapes, because clearing and redrawing the entire screen (yes, just a screen of monospace text!) is unworkable.

> it's discoverable

With no ergonomic way to build a menu bar, display hints/tooltips, or even support modified keyboard shortcuts well across platforms? I don’t think it is.

> it's as secure as my shell

Extraordinarily insecure, in other words.

> it's efficient

As above.

hadlock 27 minutes ago|||
I guess you haven't tried ratatui then. All my cli offer a ratatui dashboard mode, and about 50% of the dashboard mode end up as a status dashboard down the road
JodieBenitez 2 hours ago|||
> Not really?

It is, everywhere I need it. Never had to change a single line across the various OS/Terms I used. Can't say the same for web apps or even so-called cross-platform GUIs. Been there, done that.

> It's not - most terminals are ridiculously slow, and each TUI framework requires its own hacks to do partial "repaints" using ANSI escapes, because clearing and redrawing the entire screen (yes, just a screen of monospace text!) is unworkable.

I don't care about these details. I care about the app feeling snappy and responsive. It sure does. Again, I wish it was the case for GUIs.

> With no ergonomic way to build a menu bar, display hints/tooltips, or even support modified keyboard shortcuts well across platforms? I don’t think it is.

Discoverable as in "you can start the app and figure it out along the way without prior documentation reading". And we do have hints, menus and what not. Trying to nitpick ?

> Extraordinarily insecure, in other words.

Are you implying the app running from my ssh session is more exposed than a web app or a API endpoint for a GUI app ?

Like all things, TUI is not a panacea and has its place.

More comments...