A simple launcher for accessing VS Code (code-server) from your iPad over Tailscale.
Visit one URL, tap Open VS Code, and you're in. Based on the Tailscale iPad + VS Code guide.
https://your-server.your-tailnet.ts.net/ → Dev Portal (launcher)
https://your-server.your-tailnet.ts.net/vscode/ → VS Code in the browser
- Ubuntu server (24.04 recommended) with
sudoaccess - Tailscale account
- Tailscale installed on your iPad
- MagicDNS enabled on your tailnet
- HTTPS certificates enabled on your tailnet
git clone <your-repo-url> dev-portal
cd dev-portal
chmod +x scripts/*.sh
./scripts/install-ipad-dev.sh
sudo tailscale up
./scripts/start-ipad-dev.shThen on your iPad (with Tailscale connected), open the Portal URL printed by the start script.
| Script | Purpose |
|---|---|
scripts/install-ipad-dev.sh |
One-time install of code-server, Tailscale, and Caddy |
scripts/start-ipad-dev.sh |
Configure Caddy and start the HTTPS stack |
scripts/start-local.sh |
Local preview on http://127.0.0.1:3000 (no Tailscale) |
- Open the Portal URL in Safari
- Tap Open VS Code
- Safari → Share → Add to Home Screen for a home-screen icon
HTTPS is required for clipboard support and other browser features in VS Code.
dev-portal/
├── portal/ # Static launcher page (PWA-ready)
│ ├── index.html
│ ├── styles.css
│ ├── manifest.json
│ └── icon.svg
└── scripts/
├── lib.sh # Shared helpers
├── install-ipad-dev.sh
├── start-ipad-dev.sh
└── start-local.sh
| Problem | Fix |
|---|---|
Tailscale is not authenticated |
Run sudo tailscale up and sign in |
| HTTPS certificate errors | Enable MagicDNS + HTTPS in admin console, then re-run start-ipad-dev.sh |
| VS Code page blank or broken | Use /vscode/ with a trailing slash |
| Can't reach server from iPad | Confirm both devices are connected in the Tailscale app |
| Caddy fails to reload | Check logs: sudo journalctl -u caddy -n 50 |
- code-server runs on
127.0.0.1only — not exposed publicly - Access is limited to your Tailscale network
- Password auth is disabled because Tailscale provides authentication
- Consider locking down your server to Tailscale only for extra protection
MIT