I recently participated in the Handmade Network Visibility Jam and built a tool that I’d been wanting for my own use:
In a nutshell, Escape Artist shows ANSI escape sequences that are normally invisible. It’s kinda like View Source for the terminal; my hope is that it will be useful for anyone working on shells and terminal applications.
Tech Stack
Escape Artist is primarily written in Rust, using Axum to serve up a web UI using Tailwind+Preact. Events get streamed to the front-end over a websocket. I took great pains to keep the front-end simple; nearly all business logic lives in the Rust back-end, there is no front-end build step, and all dependencies are bundled with the application.
Escape Artist compiles down to a single-file 1.8MB executable, and nearly half of that is Tailwind and an embedded font.
Lessons Learned
Parsing escape sequences out of a stream of bytes is remarkably tricky. Thankfully the vte
crate does most of the heavy lifting for us.
This minimal approach to web UI was generally pretty nice! I occasionally ran into a bit of trouble wrangling JS libraries that assume everyone is using NPM, React, and a bundler like webpack, but overall it wasn’t too bad.
I ended up needing to roll my own tooltip solution using Floating UI, and… wow. Their introductory tutorial is one of the best I’ve ever seen for a library in any language.