A Game Interface for a non-Game
This was originally a long post that I sent to a private Slack channel for Micropelago, but given that Slack's free-tier is now effectively ephemeral messaging I thought it would be good to clean it up and publish it. The post related to developing a GUI interface for Isle.
A GUI is the next major step for Isle, that much is for sure; what form that GUI takes is the main question. Originally I had thought that a simple web interface which hit a local port would be the simplest solution, and probably it would be. One concern with the idea is security... right now access to the daemon's RPC endpoint is handled via filesystem permissions to the unix socket. If using a web interface the RPC endpoint would be essentially available to any user, and a different auth mechanism would be necessary. Tailscale had a critical vulnerability in this area as well [0]. Stuff like that makes me cautious.
Another reason I'm shying away from a web interface (and which is almost entrely prejudice on my part) is that it's introducing a dependency on the web browser, which is constantly changing, increasingly bulky, and controlled by large orgs whose long-term interests don't necessarily align with the user's.
My second thought was then to just do a simple GUI in something like Qt or GTK. It could be lightweight, cross-platform, all those good things. While not the default these days, there's still plenty of modern projects which ship a cross-platform GUI, so it's certainly possible. And we can keep existing security gaurantees while putting a lid on performance.
But then I had a third idea which is kind of out there and I've been really excited to talk about.... What if Micropelago's UI wasn't based on the interactive document pattern that we've come to expect from an open-source internet project? The daemon does all the hard work, the UI can be literally anything. What if it looked like a game instead?
What's in my head is basically taking the style of pokemon gold/silver (top-down, simple pixel art), dropping the user as a little character on a digital island, and then to "manage" their island they go visit different buildings and talk to the characters inside. I've thought of a few possibilities already:
- Port authority: Firewall management
- Lighthouse (obviously): set up public address for the VPN
- Library: Share files with other "islands" in the network. Basically a different view on the dropbox/KBFS-style FUSE filesystem which is also on the roadmap. Maybe manage storage allocations here too.
- Town hall: Manage membership to the network (if you're an admin)
At each building are characters who can walk you through viewing/modifying the different configurable items. I'm thinking that dialogue trees are a much more interesting and natural way to explore functionality and get help than interactive documents ever could be, and it's probably easier for users to remember names/faces/places when they want to go back and do something. And anyway, in-world characters are so much more interesting than some text-box-checkmark-submit-button form in a GTK window; we could have a lot of fun with these.
Implementation-wise, cross-platform games are basically the default these days, so finding some open-source engine to handle this should be easy (citation needed). As long as it can make TCP connections on a unix socket it can talk to the daemon, and that's all it will ever have to do. The pixel art can be low-res and easy to make (or find creative-commons for); if you go back and look at the original pokemon gold/silver it's soooo basic, and I think Minecraft has proven that people don't really care about graphics. Music/sound is a big question mark for me still, but I'll whistle sea-shanties into a laptop mic if that's what it takes.
What really excites me about this idea is if you add on the ability to "visit" other islands in the network. That really clarifies what Micropelago is, and what it's working towards. It's a place, a real place, connected to a network of other similar islands, with real spaces that people can visit and interact with each other in. Beyond being a bit fun, that would help contextualize features by placing them somewhere in an apparently real place.
- Voice-chat with people by standing near them, rather than "joining a room", or step into a phone booth to speak to them directly
- Collaborate on a design by walking up to the same literal whiteboard; add more whiteboards to the world if you want more space to work with.
- Build a radio station on your island, and then other members can tune into it on their home radio.
Those are just examples of what I mean: rather than having a list of apparently disconnected features in some dry menu, the features make more sense in a physical space.
One final note is that, fundamentally, Isle is a daemon which speaks JSON over a TCP connection, and anyone can write a custom frontend for that if they like.
This idea is a bit out there, but Micropelago has no one to tell it what it can and can't do, and I'm hopeful that by building something fun it will make the project into more than just another private networking tool.
-----
[0] Tailscale Windows daemon is vulnerable to RCE via CSRF
Originally written: 2025-01-25
Published: 2025-02-08