Since the Linux Terminal app was introduced for Android, I’ve been curious about the possibilities it could open up for personal app development.
Considering that a smartphone is a portable computer, it makes sense that a user ought to have the ability to run their own apps on their own devices. The notion of running bespoke scripts or utilities for personal workflows feels logical and privacy friendly (and is long overdue).
Exploring and installing tools
The Android Linux Terminal app is technically a webview which connects to a local Debian Bookworm VM, and works well. All the usual suspects worked straight away.
It is a tradition that the first thing to do is run neofetch
:

The Gemini CLI installed, and the authentication step was straightforward. Of course I have also configured it to be a simple adhoc helper, so I can just type ? "How do I..."
and get an answer.

The new edit
text editor had no issues. It even recognizes menu clicks with the finger, which is a nice touch (ha…).

More developer focused tools like docker
and uv
installed using their normal Linux instructions, and didn’t feel slow at all.



uv
and docker
Reaching ports from the outside
One limitation though, is that the ports are only accessible locally from the device itself. That is, http://localhost:8080
from the Android device worked, but http://<my-phone-ip>:8080
from another device on the network did not.
But this was overcome thanks to Tailscale, a ‘mesh network’ utility that allows connecting devices together securely, even if they are on different networks. I installed Tailscale using its convenience script. With this in place I was able to access the container port from my desktop using the Tailscale DNS address.

Developing remotely on Android Linux with VSCode
With the tooling in place and network connectivity established, the next logical step was to try and develop remotely on the device. This wasn’t necessary of course, a very simple way to work could be to develop on the desktop, push it up to Github, and pull down in Android Linux Terminal. But that’s a lot of extra steps and for personal app development, a fast feedback loop is important.
To that end, there is a VSCode extension for Tailscale. With Tailscale running on the desktop, the extension can connect to the Android Linux instance, and open a VSCode Remote Session. Here I have VSCode connecting remotely, editing, and running files directly on Android’s Linux environment.

This is where the power of personal development comes in. I can now write Python scripts in a familiar environment, and run them on the Android device. I don’t need permission from anyone, I don’t need to publish it anywhere, I can just write a script and run it.
My book rating prediction example
In the screenshot above, I’m actually training a simple machine learning model right on the device. This model uses my existing Goodreads data to then predict whether I would like a new book, given some metadata about it.

Developing TUIs with Textual
TUIs (Terminal User Interfaces) are interactive user interface applications for the terminal. A popular library for this is Textual. It’s made for Python, and is pretty simple to use.
Continuing on from my book rating prediction example above, I wrote a simple Textual app that would allow me to enter a Goodreads URL. The app would then grab the book metadata from the page, pass it to the model, and output the prediction.

Here it is in action:
My thoughts
The experience isn’t as difficult as I was expecting, it was simple and intuitive. It does feel viable that anyone could develop their own little personal standalone scripts or apps for the Android Linux Terminal, and deploy it directly.
It feels quite refreshing to work this way and not having to live under the constraints and chokehold that the present duopoly of app stores have been imposing on us for years, or running the risk of running afoul of opaque rules that allow no recourse. I can just write something and run it. It can be sloppy, experimental, crude, it can break frequently, and that’s okay.
Because it’s a sandboxed environment, it does have limitations — there are no USB devices visible, it’s a local only network, there is no Android OS/API access — but those limitations are probably what make this viable in the first place. I am not sure how much of this will be opened up, looking at this video demonstrating a full Debian desktop environment, and unpublished enhancements that allow running Doom, it seems like they might want to allow us to develop Android apps in a desktop environment just by plugging in to a dock. This could be interesting in terms of testing and deployment and Android API access. It also reflects a modern demographic trend of people who use phones as their primary device, many who don’t bother with desktops or laptops at all.
There’s still some work that could happen to make personal app development easier, such as being able to launch a script from the home screen, but I can probably live without it for now.
I’m already thinking of other things I could do, involving more helper scripts, a spongebob mocking generator, or even exploring if running a local LLM is feasible… I might need to wait for hardware acceleration to be available to do that though.