The missing Python counterpart to Wish
I had used Charmbracelet’s Wish to serve terminal interfaces over SSH in Go. Textual made rich terminal apps delightful in Python, but there was no equally direct way to put one behind an SSH address.
I liked how Charmbracelet’s Wish could turn a Go terminal app into an SSH experience, but I could not find that bridge for Python’s Textual ecosystem. So I created Textish and remain its active maintainer: import a Textual app, call serve, and let anyone open it with an ordinary SSH client.
I had used Charmbracelet’s Wish to serve terminal interfaces over SSH in Go. Textual made rich terminal apps delightful in Python, but there was no equally direct way to put one behind an SSH address.
I tried process-per-session, subinterpreters, and free-threaded Python before landing on fresh app and driver instances sharing one interpreter and asyncio loop: the simplest model for trusted, I/O-bound terminal apps.
The public API stayed small while the server grew the controls a real deployment needs.