Top
Best
New

Posted by mmulet 9/9/2025

Show HN: Term.everything – Run any GUI app in the terminal(github.com)
I made a built-from scratch Wayland Compositor to display any GUI app* in the terminal! I think there is a lot of unexplored potential in custom Wayland compositors, a lot of really cool things you can embed existing applications into! So, I started with embedding apps into the terminal because that is the easiest input/output (output is just utf-8 and I use the great `chafa` library for that, and I just read from stdin for the input).

If you have any other ideas for cool Wayland compositors, let me know. I purposedly wrote 80% the app in Typescript to appeal to the most developers and attract cool contributions (I do all drawing with the familiar Canvas2D api, so if there is interest, I can also fork this out into a cool Terminal canvas, let me know!)

I have a blog post here about how I did it, but it’s pretty high level and non technical, so please ask if you have any questions.

[How I Did It](<https://github.com/mmulet/term.everything/blob/main/resource...>)

*technically only Wayland apps and x11 apps with Xwayland. But on Linux that’s mostly everything.

1094 points | 144 commentspage 2
taviso 9/11/2025|
It's fun, but reminds me of a trick using Xvfb.

For example...

    $ Xvfb :7 &
    [1] 21688
    $ xeyes -display :7 &
    [2] 21697
    $ xwd -display :7 -name xeyes -out /dev/stdout | convert xwd:- sixel:-

It looks like this: https://imgur.com/a/Eq2ToVO

Obviously no input though, you would have to use xdotool! The main benefit is that you probably already have all these tools installed :)

FortuneIIIPick 9/11/2025|
Looks like you're on Windows? You can run X apps with XMing, I used to do it years ago. You can run the actual X app and use it, not just get a screenshot.
taviso 9/11/2025||
The point is to view it in a terminal (e.g. XTerm, Konsole, etc), of course you can just run it in an X server.
SJC_Hacker 9/11/2025||
This could be useful for testing UI elements of apps ...

Modern UI applications are way too tightly coupled for my liking, and difficult to test especially if you don't practice "separation of concerns", e.g. decoupling the app logic from its presentation.

Haven't looked at the full thing but something like this might allow you to write tests for UI apps without actually having the UI backend...

tracker1 9/10/2025||
This is pretty cool, I can see this being useful when I need to run a one-off remotely. Not sure about attaching a running program then detaching again, or mirroring... I wouldn't mind being able to SSH to my desktop and manipulate say the running Discord client, or similar.

Another similar thing that I'd been meaning to look into is the RDP remote apps stuff.

anthk 9/10/2025|
Just use a CLI discord client, or fire up an IRC client against some Bitlbee server.
tracker1 9/10/2025||
It was an example, not the only use case. 99% of what I want to do remote is just fine over SSH (over Wireguard)... Mostly remote VS Code usage since my desktop is much beefier than my laptop when travelling.
kposehn 9/10/2025||
Wow. I love this! I actually have a specific, esoteric use for this: VSCode on iPad

Hopefully supports iPadOS one day.

lights0123 9/10/2025||
I tend to use https://github.com/coder/code-server#code-server for my remote development needs.
mmulet 9/10/2025|||
I know there are ssh clients for iPad. So it should work. I’m going to try it right now!
mmulet 9/10/2025||
Behold! running on the iPad! Screen Recording - https://github.com/mmulet/term.everything/blob/main/resource... A video of it on the iPad - https://github.com/mmulet/term.everything/blob/main/resource...

Absolutely no mouse support though, anyone know of an iPad ssh client with mouse support?

(still working on getting vscode to run smoothly)

oarsinsync 9/10/2025|||
> anyone know of an iPad ssh client with mouse support

Blink terminal for iOS and iPadOS. Ships with vscode support built in too.

jsjohnst 9/11/2025||||
> anyone know of an iPad ssh client with mouse support?

Prompt 3 from Panic

mmulet 9/11/2025||
Thanks, I’ll check that out
jamiek88 9/11/2025||||
I literally laughed in delight at this.
chamomeal 9/11/2025|||
That is absolutely insane lmao
chamomeal 9/11/2025||
Oohh wow you’re right, that’s crazy!!
Guestmodinfo 9/11/2025||
I like it. I always want to run things in a terminal. Because 1. I used to think that's more secure than X 2. I always seem to get better audio of the videos that I run in tty and my mouse is much smoother in the tty. Yes I can move mouse in tty.

Also someone mentioned a cool project like carbonyl. They also mentioned brow.sh which I have heard but they described it in detail so that's another plus when term.everything kind of projects come they drag other cool projects to he foreground

Point 1 of mine may be pure superstition.

How term.everything works on tty I don't know maybe it will be horriblebecause of the resolution thing but still it's a nice direction.

IshKebab 9/10/2025||
I started working on this with the Kitty image protocol, but unfortunately that protocol is really unsuited to this sort of thing. Performance will be awful.

The protocol is sort of:

1. I'd like you to display this PNG. Here's the data: ...

2. Ok I've got the data.

3. Ok now display it at this position.

4. Ok now remove it from the screen.

We're talking motion-PNG here. Just think about how awful that is.

I wish someone would add some kind of AV1-over-terminal protocol. That would be actually useful.

The other thing I was going to try was a custom GUI that used normal terminal text for the text of widgets, but Kitty images for the rest. It's quite a hard problem though.

f33d5173 9/11/2025||
What you're describing is a graphical shell. If you want it over the network, we have a protocol for that, it's called X. Misusing a terminal for this is fundamentally pointless.
IshKebab 9/11/2025||
Nope. X is too slow to be useful except on local networks, and alternatives like FreeNX or xpra are difficulty and janky to set up. Also X is dying so you really mean something like waypipe or worse (which also jankily failed to run some external command when I last tried it).

But I don't want that anyway. I want something graphical that's actually integrated into the terminal.

ranger_danger 9/10/2025||
https://www.youtube.com/watch?v=dcjkezf1ARY
IshKebab 9/11/2025||
Probably not running over a network. Also I'm not seeing anything GUI-like.
ranger_danger 9/11/2025||
How about this then: https://github.com/saitoha/libsixel
IshKebab 9/11/2025||
Sixels are hilariously inefficient. Think "motion xpm".
ranger_danger 9/11/2025||
But it's running over a network. I'm not sure what you're asking for otherwise.
ugh123 9/10/2025||
This could be used on build machines I own where I occasionally need to interact with the desktop and/or browser on the machine and vnc or other desktop sharing is impractical or exposes security issues.
quotemstr 9/10/2025||
Great job! If you tug on this thread long and hard enough, you develop this enough and you get RDP (which you can try via xrdp, GNOME's remoting thing, etc.).

The reason the terminal ecosystem doesn't get much more sophisticated over time isn't just the herd-of-cats fragmentation, but also evaporative cooling: people who do really cool things with terminal come to realize that what they really want is remote desktop (perhaps rootless) and leave terminal stuff as-is while they invest in more sophisticated systems instead.

camdroidw 9/11/2025||
Going to be a repetitive asshole but guys please remember lesson 1 of marketing for engineers: learn to post videos/screenshot first thing.

Also, I'm lost for words, this is plain awesome.

nxobject 9/11/2025|
Surprisingly enough, my keyboard is missing the "V", "N", and "C" keys. Thank you for helping me save money by not buying a new keyboard!
More comments...