Show HN: Term.everything – Run any GUI app in the terminal (github.com)

1094 points by mmulet ↗ HN
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.

70 comments

[ 3.7 ms ] story [ 83.4 ms ] thread
(comment deleted)
I wish you success in further development, don't stop!
(comment deleted)
(comment deleted)
This is so cool, thanks for sharing! Having this on a Mac would be great but I understand that this might be a huge undertaking :)
(comment deleted)
Neat! I did a similar project many years ago just to see if I could with ANSI color stuff to animate video in my terminal. Worked really well, but it looked like absolute butt (unlike this project).

Nicely done!

I was about to asked about X11, but ended up learning about Wayland.

Thanks for sharing!

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.

Just use a CLI discord client, or fire up an IRC client against some Bitlbee server.
This is absolutely unhinged and I love everything about it
It is funny but this is what I wished things did when I first started using Linux back in the day. '98-'99 timeframe, then I "learned" better that there was Xorg/X11,etc.
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.

Wow. This is amazing. I have started running a lot of stuff in containers by default for a whole host of reasons, and this may make my workflow even better on the occasions when I want to run a graphical app.
You could use a terminal graphics protocol to render real graphics. But there is already waypipe¹ to do that kind of remoting. Without using an actual terminal.

1. https://gitlab.freedesktop.org/mstoeckl/waypipe

> You could use a terminal graphics protocol to render real graphics.

It already does that[1].

> But there is already waypipe¹ to do that kind of remoting.

That requires Wayland on the client side, doesn't it? I don't expect this to be super-practical anyway, but it's fun to see how far you can push a terminal.

[1] "If your terminal supports images (like kitty or iterm2) you can render windows at full resolution (performance may degrade)."

Super cool! I also really am glad you added videos and examples in your github repo its nice to get an overview
Outstanding project! Keep it up. If it ever gets renamed, consider - Terminal.All, T.All, or TAll.
That's awesomely useless, it straddles the line between programming and art.

I am sure it was a great and fun learning experience.

Well done !

This is one of those things I'm going to keep in my back pocket for a very specific time I need it for a weird reason.

I love it.

This will be very useful when it exits beta.