Captain's Log

Terminal7 0.20: SSH, WebGL power, improved restore & E2E tests May 1, 2022

Exciting news! We’re back on iPad’s testflight with a faster version that can run over SSH. In iPadOS 15.4, Apple solved the WebGL bug that was crippling many hybrid apps and frameworks. Terminal7 was no exception. The bug forced us to go back to “dom mode”, where rendering was slow and buggy.

Praise be the gods as this is now in the past - I’ve been using WebGL power for the past couple of weeks, and it’s very fast. Thanks to xtermjs WebGL addon, Terminal7 rendering is now accelerated by the GPU. We’ve also added “Nerd” fonts for enhanced support to tools such as lsd.

To use Terminal7, you’ll need a Mac/Linux/WSL server to work on. The server needs sshd configured with PasswordAuthentication yes and preferably T7’s backend - webexec - installed and running. webexec runs as a user’s agent that listens to connection requests on port 7777. On a new request, the client’s fingerprint is checked against ~/.config/webexec/authorized_tokens, and if it fits, webexec starts a PeerConnection to generate an answer and sends it back to T7.

On the first connection, T7 will instruct you on installing webexec and how to copy its token.

Another way to connect to a server is through peerbook.io. PeerBook is a web sockets based signalling server that lets me work on my home’s desktop from the coffee shop. For each user, peerbook stores a list of verified peers between which he forwards ICE candidates and setup a direct connection ASAP. It runs on AWS and has 2FA using email & OTC. Unfortunately, it’s not production-grade, and we can make no guarantees. The version has a lot of changes under the hood as well. To support TypeScript, we’ve revised our tool chest replacing webpack, karma, mocha and chai with vite, rollup, and Tests are very fast and local dev is swift. We’ve also refactored the communication layer, laying the groundwork to support mosh-style running over SSH and plain SSH. Before starting the refactoring, we’ve added a testing framework based on docker-compose and playwright. We now have tests the cover communication over direct http connections and peerbook. Check out the QA folder and its README.md.

One eyesore we didn’t get around to fixing is the flaking log messages window. If you quit the app when you’re connected to a host, it will start by reconnecting to the server and restoring the layout when you relaunch it. It takes a bit of time, and at one point, the logs will be hidden, and you’ll be left with a blank screen. When it happens, you should wait a bit longer, and gods willing, you’ll reconnect successfully. If you’re less fortunate, you’ll get the error pop-up with the reset button.

If T7 hangs or fails to connect, you can try quitting the app and starting it over. T7 now remembers your last gate and uses there server’s memory to restore the previous session. The restore is in Monochrom for now. If you’re inside an editor or using a full-screen program like htop, you should press good old CTRL-L to refresh the screen.

If you run into a problem you can re-create, please do and press Cmd-9 to copy the last 100 lines of the log to the clipboard. Then, please press the help button and post it on our community’s discord server. Enjoy! If you have any feedback, please share it on our discord server.