8/21/2026 at 4:55:43 PM
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.
by joshka
8/22/2026 at 6:37:09 AM
> 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?
by anon7000
8/22/2026 at 7:56:45 AM
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.
by jeroenhd
8/22/2026 at 2:32:57 PM
> 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.
by the__alchemist
8/22/2026 at 4:52:00 PM
> 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.
by zahlman
8/22/2026 at 10:57:16 PM
I suspect the u ubiquity of electron persists more because maintaining both web and desktop interfaces is somewhat simplified, and as a corollary, you don’t need a separate JS and C/C++/QML team. Qt has gotten pretty good, but JavaScript and typescript are easier to hire.by d-us-vb
8/23/2026 at 4:41:14 AM
Pay for cheap labour, get a cheap product.I thought Claude could do anything nowadays.
by pjmlp
8/23/2026 at 8:56:20 PM
QML is a Javascript Supersetby bionade24
8/24/2026 at 2:20:52 PM
But it runs on Qt, which is most certainly not.by d-us-vb
8/23/2026 at 5:58:42 AM
I think Qt is a bit different here because of Qt Quick etc but I've tried using "native" GUI frameworks a lot and ultimately the web DOM model is pretty nice for iterating easily.Querying into the DOM and working off of that means you're not futzing about holding onto a bunch of component references for the one thing you might need later on.
Web layout is also pretty easy to just get right, native GUI frameworks have a different kind of layout model that is not as amenable to "arbitrary" data (at least at first blush).
the reactive programming model also works quite well. While there are native GUI frameworks that lean into reactive programming, they tend to be doing a bunch of weird stuff that cause other issues.
And at the end of the day, when you package something like a Qt app it still often ends up being quite chunky.
In the end tho... the simplest thing is if you do web stack you get a web UI _and_ your "native" GUI in one go. Build things once, not twice. Hard to argue against that when that's presented.
by rtpg
8/22/2026 at 5:10:02 PM
they wont work on android though. thats the main reason i started using more TUIs myself. i needed to be able to run a bunch of python scripts on linux, windows and android/termux. or if any of the linux phones ever matures, or sailfish, then the same scripts will run thereas well, probably without any modifications neededby 4k93n2
8/22/2026 at 9:31:01 PM
KDE has a framework based on Qt's QML that works on Android. It is called Kirigami. They have written apps and even a complete Plasma Mobile using it. The apps work both on Android and Linux.Mobile has significant paradigm changes that makes using both terminals and traditional GUIs harder anyway though. I do expect the need for completely different cross-platform libraries for mobile UIs.
by okanat
8/23/2026 at 4:54:07 AM
Termux is not the right way to execute Apps on Android, Pydroid does the job.Also, Qt does support Android development.
by pjmlp
8/23/2026 at 5:51:20 AM
why is it not right? ive been using it for years and everything works just fineby 4k93n2
8/23/2026 at 6:20:48 AM
It is trying to fit GNU/Linux into Android/Linux, on a model that has only worked so far because internal politics have prevented the replacement of Linux kernel with Zirkon.The official NDK documentation on what is supported for NDK written code on non rooted devices, and the hurdles that Termux faces to keep running on standard Android images via PlayStore distribution, show why it isn't right.
by pjmlp
8/22/2026 at 8:59:11 AM
> 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?
by pwdisswordfishq
8/22/2026 at 10:36:39 AM
Those two are not contradictory statementsby Almondsetat
8/22/2026 at 3:22:28 PM
> Those two are not contradictory statementsI 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.
by zbentley
8/22/2026 at 10:39:08 AM
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.
by embedding-shape
8/22/2026 at 10:59:23 AM
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 GUIsby Almondsetat
8/22/2026 at 11:02:02 AM
Compliant with what? The proposal is "throw out all the compatibility and build some other kind of terminal" in which case nothing is portable.by Arainach
8/22/2026 at 12:37:47 PM
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.
by TylerE
8/22/2026 at 12:53:59 PM
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.by shevy-java
8/22/2026 at 3:16:08 PM
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
by zbentley
8/23/2026 at 8:14:51 AM
”GUIs always look bad outside of the "main" platform.”I think this is slightly wrong in two ways.
i) If you want platform native then reimplement the gui on every target platform. It’s as ”simple” as that.
If you need to ship to multiple platforms then preferably you need lots of plarform specific engineering in any case.
”I just want my hobby tool” scenario likely does not require cross platform support unless there is market for it. I mean rather than offering the tool on multiple platforms it should be offered on multiple languages first, perhaps. As soon as you are not writing the tool for yourself we are talking markets and distribution. Likely most people can chill out and just implement the gui for themselves (and not even publish it in githubb).
ii) cross platform quick-and-dirty way. Without screenreader support, multiple language and glyph support etc. Game ui:s look the same on all platforms. Websites look the same on all platforms.
There is place and time for deep ui engineering that respects the _critical_ cross platform issues like accessibility (screen readers etc) and different languages and scripts.
And then there is the situation where you want just few images to click. The latter is vastly simpler, fast and fun. But harder to convert to a professional quality gui experience. For small tools and MVPs this sounds like a fair tradeoff.
by fsloth
8/22/2026 at 12:47:49 PM
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.by psychoslave
8/22/2026 at 2:55:21 PM
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.by messh
8/22/2026 at 11:33:09 AM
> 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
by eviks
8/22/2026 at 7:33:01 PM
TUIs would be great if they didn't have to render all text the same size, for me that's the main win with GUIs, you have total freedom with what you can do with your pixels.I would definitely be pro minimalist unicode-character-themed GUIs for what it's worth. Where every graphical primitive is basically a unicode character, without the restriction on font size.
by i_am_a_peasant
8/22/2026 at 8:02:50 PM
That's not total pixel freedom, you're still limited to textby eviks
8/22/2026 at 7:57:47 PM
Some terminal emulators, for example Kitty, can render text at various sizes (within the same window).by leephillips
8/22/2026 at 8:43:50 AM
> 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?
by wiseowise
8/22/2026 at 9:57:49 AM
> cross-platform GUIs always look bad outside of the "main" platformqBittorrent 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.
by notpushkin
8/22/2026 at 9:10:14 AM
>So because TUIs look universally badYou 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.
by Dilettante_
8/22/2026 at 9:39:00 AM
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.by WA
8/22/2026 at 12:18:20 PM
You can handle mouse events in a TUIby catlifeonmars
8/23/2026 at 8:28:37 PM
And I want to read proportional fonts, like just about anything except terminals already uses.by yencabulator
8/24/2026 at 8:28:23 AM
Yeah, already in 1990, what an achievement. /sby pjmlp
8/25/2026 at 4:03:50 AM
I thought that UI looked vaguely familiar, and then I realized that the BIOS on many computers uses that design. I never really connected the dots.by catlifeonmars
8/22/2026 at 6:03:03 PM
>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"sounds like your terminal emulator is just crap, terminal and iterm on mac just work
by dirasieb
8/22/2026 at 8:14:58 PM
iTerm2. Doesn’t work out of the box or something, but I’ll take a look at my config.by WA
8/24/2026 at 11:12:53 AM
> not "23 lines pasted"If you mean what Claude Code does when you paste longer text, you can just press Cmd-V again to show the full text.
by maleldil
8/22/2026 at 1:08:49 PM
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.by christophilus
8/23/2026 at 8:30:20 PM
Wayland runs over a UNIX domain socket you know.And if you meant "virtual machine" or "cloud" by saying "container", `waypipe ssh myhost`.
by yencabulator
8/24/2026 at 8:29:42 AM
It is as easy as any X Windows or RDP connection.by pjmlp
8/22/2026 at 10:06:06 AM
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.
by trueno
8/22/2026 at 12:14:36 PM
Except web. Which inexplicably got all of these when no one was lookingby singpolyma3
8/24/2026 at 8:34:18 AM
Fast and good DX, not really, unless we are comparing it to command line tools, instead of 4 GL and RAD tools from the 1990's.Especially when I keep bumping into Electron apps.
by pjmlp
8/22/2026 at 12:38:12 PM
Not fast.by TylerE
8/22/2026 at 12:56:28 PM
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.by psychoslave
8/22/2026 at 3:26:01 PM
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.by zbentley
8/22/2026 at 1:30:15 PM
How so?You can make slow things with it of course but it's not inherent.
by singpolyma3
8/23/2026 at 10:58:31 AM
BearLibTerminal might be something on this line, although its purpose is mainly for developing rougue-like games. It simulates a terminal in a GUI with a high-level APIby ziotom78
8/24/2026 at 3:19:13 AM
yeah, something along those lines - but more robustly defined.by joshka
8/22/2026 at 12:45:24 PM
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.
by barnabee
8/22/2026 at 2:12:41 PM
[flagged]by jrop
8/22/2026 at 1:08:41 PM
charm.sh builds many such things. I love them and their personality.by tyre
8/22/2026 at 9:19:39 AM
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...
by Brian_K_White
8/22/2026 at 9:37:43 AM
HTML/Javascript would like a wordby crostlybostly
8/22/2026 at 10:04:42 AM
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.
by flossly
8/22/2026 at 11:00:42 AM
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.
by mr_olive
8/22/2026 at 2:23:10 PM
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.
by iskra
8/25/2026 at 11:12:03 AM
Cool! I'd say we need a big linux distro to buy into it, so that it provides it's config-panel and package manager UI in this format.by flossly
8/22/2026 at 10:32:59 AM
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.by fc417fc802
8/22/2026 at 1:19:31 PM
> I'd say http://localapps should give an overview of all web apps running locally, with links to them.Malware will thank you.
by antonvs
8/22/2026 at 12:16:22 PM
Bring back installable PWA on desktopby singpolyma3
8/22/2026 at 2:21:36 PM
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.
by NBJack
8/22/2026 at 11:56:31 PM
[flagged]by Brian_K_White
8/22/2026 at 12:00:22 PM
MGR? <https://hack.org/~mc/mgr/>by teddyh
8/22/2026 at 4:55:13 PM
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.
by tptacek
8/22/2026 at 8:06:47 PM
> as you're drawing interfaces with punctuation charactersYeah, in my hypothetical new protocol, the character cell is still there, but it's not the element that drives the main abstraction. The layer above that being more semantic is where the smarts is. So borders, interactive areas, mouse hit mapping to elements, etc. ends up being built into the protocol rather than being a cell level thing. Cells having proper borders being similar to how they allow for underline, being able to have both images and text, ...
I think it's important to do something about the VT100 +kitchen sink stack and to have that as something that still works with that in areas of the new terminal proto. I've got a slopcoded rust library in the works that's about fully mapping the full list of terminal protocols and related things in one coherent library (VT100, ECMA48, DEC modes, iTerm extensions, Kitty, ...). From there I think making that fairly isomorphic with the terminal emulator layer (I have a RIIR ghostty slopfactor there too that fits).
I think ghostty / superlogical looks at this from the perspective of doing pty things and then transfering that calculated state across the wire while doing fun stuff with windows, panes etc. with replay and that sort of thing. I think this is valuable too.
I suspect that there's possibly a way to do a bit of a hybrid on this - normal pty things with the extra sidecar of more semantic structured, but it'll make things more complex for app builders on that side of things.
(On another comment I saw you mentioned "couldn't help noticing how much of the tedious work of putting a TUI together". I think probably textual in python is probably the best of the low ceremony libraries for making TUIs if you haven't checked that out yet. I think someday there will be a good Rust library that has that level of put together-ness. I have some ideas on this for ratatui and have seen a bunch of things that are directionally right for this, but nothing that gets close yet).
by joshka
8/22/2026 at 7:27:38 AM
> 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.
by fc417fc802
8/22/2026 at 12:52:15 PM
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.by joshka
8/23/2026 at 4:27:51 AM
Upon reflection, I think the only thing I'm opposed to is visible "features". As long as the final output remains a dumb grid of cells with extremely limited capabilities I can see where it would be useful for accessibility (or other) purposes to have a bunch of metadata in a standardized format describing the model that underlies the final output. A number of times I've been frustrated by the lack of additional channels when processing streams of data.by fc417fc802
8/22/2026 at 12:09:32 PM
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.
by torginus
8/22/2026 at 12:47:26 PM
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.
by joshka
8/22/2026 at 6:15:43 PM
I was suggesting something that could be done without changing the protocol itself.From what I undestand, the terminal is essentially a concatenative text buffer extended with control commands allowing you to move the cursor (pen) to draw more sophisticated stuff, and update UIs.
The logical way to extend this would be to allow genericdrawing commands over the protocol, at which point the whole thing starts sounding like X11.
I'm sure the Unix people at MIT in the 80s saw this as the natural evolution from text terminals to graphics based ones.
Not saying this is a bad idea, but sounds suspiciously like a retread of history.
Or you might want to stop before that, as you suggested, at targeting fixed size cells for rendering, and keeping the console-like UX throughout. I'm sure there's a sensible intermediate step, but if you want to do things like displaying graphs or images (turning the terminal into something that's halfway between a terminal emulator and a Jupyter notebook), it'd be awkward to respect the character grid and the non-square characters themselves.
I'm curious what you think about how far this new protocol should go, and in what direction. You mention 'semantics', as describing behavior, not just what gets drawn to the screen, which neither X11 nor tty does.
by torginus
8/22/2026 at 8:11:04 PM
The problem succinctly is when the terminal emulator only sees cell values and instructions it can't do anything more with things. Two really good examples are implementing accessibility well, and scrolling / changing things above the terminal pane without rewriting the whole history.by joshka
8/22/2026 at 9:43:13 PM
What you describe sounds a lot like the HTML/CSS split, with having a separate semantic/display data. I think that's a rather large jump from the 80x25 model, retrofitting that much data sounds like quite the challange.Not sure how you're planning on doing that, can you incrementally extend the current model, or will it require a completely new protocol?
by torginus
8/23/2026 at 11:07:52 PM
New protocol entirely. The existing stuff is too baked as having positioning, movement, cells as the unit of abstraction. You need to have that available, but not as the core abstraction level. The core has to be areas, words, layout, etc. Not: "move to 20, 35, start red, bold, print border characters"by joshka
8/24/2026 at 7:24:24 AM
Cool, thanks for answering! I don't really want to take any more of your time, is there some place I can read up on this new proposed protocol?by torginus
8/25/2026 at 12:01:36 AM
It's mostly something I'm thinking a bunch about recently. Nothing written up yet aside from the above. I'd go read Mitchell Hashimoto's Lobsters interview fora different take and see how that resonates with you as well as the recent blog posts about TUIs and accessibility.by joshka
8/22/2026 at 1:01:55 PM
Damn, what an epic library name.by fractorial
8/22/2026 at 5:43:19 PM
Grok Build uses your library and it has the best TUI of any app I've ever used. It has a lot of features that we take for granted in GUIs like scrollable regions, buttons, collapsible panes, and text selection.I don't know why Codex and Claude Code haven't switched over; both apps have a terrible UI in comparison.
by quantumwannabe
8/23/2026 at 11:15:02 PM
Codex uses Ratatui also since June last year. You might be interested to read https://github.com/openai/codex/issues/8344There's a lot of things you can do to get to 90-95% fidelity with a normal scollable terminal, but that last 5-10% is impossible. And it's because the you're throwing away a bunch of information about mouse movements, clicks, scrolling, keyboard on the input side and all the layout info on the output side (the terminal just sees cells, locations, etc.).
A good analogy is what if your webserver could only send pixels, not html. And receive raw mouse movements. The amount of stuff you have to do to reconcile that across operating systems and hardware would be enormous. That's what you realistically have when you're writing a tool that reimplements all the bits from a terminal emulator in a tui.
by joshka
8/22/2026 at 5:59:24 PM
I’ve found some of my favorite TUI apps by scrolling around in the built-with-ratatui page. I have always bounced off of rust but ratatui must be a great library!!by chamomeal
8/22/2026 at 4:48:08 PM
Not only I want people to stop making TUIs, I want you to stop maintaining your TUI library!by internet2000
8/22/2026 at 4:22:47 PM
So...emacsby vatsachak
8/22/2026 at 6:19:44 PM
Which is kind of a poor man's Lisp Machines.by pjmlp
8/22/2026 at 2:32:32 PM
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).
by jrop
8/22/2026 at 8:20:13 PM
I have built a pretty full version of that idea in rust (codex tui2). There's a while tonne of downsides that make it basically impossible to really get to 100% good on this.> 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.
All that is not true. Take scrolling for example. Each terminal emulator implements this subtly differently (mouse/trackpad/speed etc.), scrolling will never feel native unless you push the control of it into the terminal emulator.
There's more than that, each and every point on this becomes something that you have a gap between native and the terminal emulator that you're building to run in the terminal.
See https://github.com/openai/codex/issues/8344 and https://github.com/openai/codex/pull/9640
Claude code and gemini have both had various versions of the same idea at times. I'm unsure where they ended up.
by joshka
8/22/2026 at 9:20:00 PM
[flagged]by jrop