Run Any GUI App Right in Your Terminal
Ever found yourself context-switching between your terminal and a bunch of GUI windows? Maybe you're SSH'd into a remote machine and need to quickly check a graph, or you just prefer the keyboard-centric flow of the terminal but still need visual tools. What if you could launch a browser, an image viewer, or even a code editor without ever leaving your shell?
A new tool called term.everything
is making this possible. It lets you run graphical applications and have their output rendered directly in your terminal. It’s one of those ideas that feels obvious in hindsight but is pretty wild to see in action.
What It Does
In simple terms, term.everything
is a tool that acts as a middleman. You tell it to launch a GUI application—like Firefox, GIMP, or LibreOffice—and instead of opening in a separate window on your desktop, it captures the application's graphical output, converts it to ANSI/Unicode characters, and streams it back to your terminal. It effectively turns your terminal emulator into a minimal, text-based desktop environment.
Why It’s Cool
The immediate reaction might be "why would I want a pixelated version of a GUI app?" but the use cases are surprisingly compelling.
- Remote Development & Debugging: This is a game-changer for working on headless remote servers or via SSH. You can run a GUI-based debugger or profiling tool on a remote machine and interact with it directly in your local terminal session. No more complicated X11 forwarding setups.
- Terminal-Centric Workflows: For developers who live in the terminal, this minimizes context switching. You can keep your focus on one window instead of alt-tabbing around your desktop.
- It’s Just Clever: The implementation is technically impressive. It’s not doing simple screenshots; it’s providing a real, interactive view of the application. The project leverages
Xvfb
(a virtual framebuffer) to run the app headlessly and then uses a custom renderer to translate the graphical output for the terminal.
How to Try It
Ready to give it a spin? The project is open source on GitHub.
-
Clone the repo:
git clone https://github.com/mmulet/term.everything cd term.everything
-
The project includes a
Dockerfile
, which is the easiest way to get a working environment with all dependencies. Build the image:docker build -t term.everything .
-
Run the container, making sure to forward the
TERM
environment variable and disable TTY allocation for proper rendering:docker run -e TERM=$TERM --rm -it term.everything
Once inside the container, you can start experimenting with commands. The repo's README has examples, but the basic syntax is term.everything [your-command]
. Try launching xeyes
or xclock
to see the magic happen.
Final Thoughts
Is term.everything
going to replace your desktop? Absolutely not, and it’s not meant to. The experience is naturally a bit slower and lower fidelity than a native window. But as a practical tool for specific scenarios—especially remote work—it’s incredibly useful. It’s one of those projects that pushes the boundaries of what we think a terminal can do, and that’s always exciting to see. It’s definitely worth a few minutes of your time to clone it and run xeyes
just for the novelty alone.
Found this interesting? Follow @githubprojects for more cool projects from the community.