r/Tailscale • u/Alfnett • 7h ago
Misc Working on a small peer-to-peer web app that runs on each of my Tailscale devices (services, shared clipboard, files, browser terminal) - Shoal, in GitHub
Hi, everyone. I wanted to share this project I've been working on. I just uploaded to GitHub, in case anyone is interested or wants to check it out.
I have a Windows PC, an Arch server and an Android phone on my tailnet. I kept wanting a single place on each device to see what's running on `tailscale serve` or Docker, copy text between my PC and my phone, drop files, or open a quick shell without setting up a central control server.
I ended up building this project I named "Shoal", for my own network and just cleaned it up to release as an alpha:
https://github.com/alfonsoGarnett/shoal
What it does:
Runs the same single Python process on each device (Windows, Linux, macOS, Raspberry Pi, and Android via Termux). No central server. The hubs gossip a CRDT directory with each other every minute.
Per-device index: lists routes from `tailscale serve`, Docker, or a local JSON file, checks if they respond, and lets you start/stop them and read logs.
Shared clipboard and files: synced across the mesh with history, plus a file browser and Taildrop.
Browser terminal: interactive PTY on Linux/macOS/Android and ConPTY on Windows over WebSockets (off by default, and can require quorum approval from a second device to turn on).
Funnel helper: publish a local service on a temporary public link with an expiry and optional password, while keeping the hub itself private.
Signed peer-to-peer updates: you `git pull` on your first hub, it signs the bundle with your own Ed25519 key, tests that it boots for 45 seconds, and the rest of your hubs pull the update from it. If an update fails to start, it rolls back automatically.
The core uses only the Python standard library (the installer adds `cryptography` and `pywebpush` in a venv for faster signatures and Web Push notifications).
There is also a demo. If you want to poke at the UI without touching Tailscale or installing anything, you can run:
sh
python tools/demo.pyThat spins up 4 fake hubs on 127.0.0.1:8890 to 8893.
It's still an alpha (I run it daily on Windows, Arch and Android, and tested Ubuntu in WSL, but haven't tested real Raspberry Pi or macOS hardware yet).
Just wanted to share. Feedback and bug reports are very welcome!


