Shard VPS
An Android app to run my server from my phone: a full SSH terminal via xterm.js, a PC key row above the soft keyboard, and a list of live sessions to resume.
The problem
SSH clients on Android tend to fail at the same thing: the soft keyboard has no Ctrl, Esc, Tab
or arrow keys — precisely what any terminal tool needs. Typing is possible; using vim, htop or a
session manager is not.
How it is solved
Real emulation with xterm.js inside a WebView. Rather than reimplementing ANSI escape-sequence handling, I use the emulator that already solves that problem and feed it from the native SSH channel in Kotlin. Full-screen applications work because the emulator is real.
A PC key row above the keyboard. Ctrl, Alt, Esc, Tab, arrows and function keys, always
visible, with sticky state for the modifiers.
A list of live sessions. The app queries which terminal sessions are running on the server and offers to resume them directly — which is 90% of what I do from my phone.
One security decision
The APK is distributed publicly, so form placeholders use documentation values (my-server.com)
instead of my real details. Credentials live in Android’s secure store. It is a small rule, but it is
exactly the kind of detail that leaks when you build a tool for yourself and then publish it.