Tailscale + DigitalOcean droplet operations CLI
A unified CLI for managing DigitalOcean droplets with Tailscale integration. Power control, snapshots, and Tailscale Serve/Funnel from one tool.
- Status Dashboard — View all droplets with status, IPs in a table
- Power Control — On/off/reboot with optional snapshot before shutdown
- Snapshots — Create on-demand or automatic pre-shutdown backups
- Tailscale Serve — Expose ports on your tailnet
- Tailscale Funnel — Expose ports publicly via HTTPS
- Auto-config — Fetches droplet info from DO API on init
git clone https://github.com/Finesssee/tdops.git
cd tdops
cargo build --release
# Add to PATH
cp target/release/tdops ~/.local/bin/- Rust 1.70+
- DigitalOcean API token (read + update permissions)
- Tailscale installed (for serve/funnel commands)
# Initialize with your DO API token
tdops init
# View all droplets
tdops status
# Power on a droplet
tdops power on my-droplet
# Power off with snapshot prompt
tdops power off my-droplet# Show all droplets in a table
tdops status
# List configured droplets from config
tdops listtdops power on <droplet> # Power on
tdops power off <droplet> # Power off (prompts for snapshot)
tdops power off <droplet> -s # Power off with snapshot
tdops power reboot <droplet> # Reboot
tdops power snapshot <droplet> # Create snapshot only# Check serve status
tdops serve status
tdops serve status -d <droplet>
# Expose port on tailnet only
tdops serve start <port>
tdops serve start <port> -d <droplet>
# Expose port publicly via Funnel
tdops serve funnel <port>
tdops serve funnel <port> -d <droplet>
# Reset all serve/funnel config
tdops serve resetConfig is stored at:
- Windows:
%APPDATA%\tdops\config.toml - Linux/macOS:
~/.config/tdops/config.toml
do_token = "dop_v1_..."
[droplets.web-server]
id = 123456789
public_ip = "1.2.3.4"
tailscale_ip = "100.x.x.x" # optional
[droplets.database]
id = 987654321
public_ip = "5.6.7.8"Run tdops init to auto-generate this from your DO account.
┌─────────────┐ ┌──────────────────┐ ┌─────────────┐
│ tdops │────▶│ DigitalOcean │ │ Droplets │
│ CLI │ │ API │────▶│ (VPS) │
└─────────────┘ └──────────────────┘ └─────────────┘
│ │
│ ┌──────────────────┐ │
└────────────▶│ Tailscale │◀──────────┘
│ (SSH/Serve) │
└──────────────────┘
- Power commands use the DigitalOcean API
- Serve/Funnel commands use
tailscaleCLI via SSH - Status fetches live data from DO API
- Fork the repo
- Create a feature branch (
git checkout -b feature/foo) - Commit changes (
git commit -m 'Add foo') - Push (
git push origin feature/foo) - Open a Pull Request
MIT