A real-time network traffic visualization dashboard for Tailscale networks. Monitor device connectivity, analyze bandwidth usage, and explore network flows with an interactive graph interface.
brew install rajsinghtech/tap/tsflowdocker pull ghcr.io/rajsinghtech/tsflow:latestDownload from GitHub Releases.
Note: TSFlow requires Tailscale Network Flow Logs (Premium/Enterprise plans). Enable it in your Tailscale admin console.
export TAILSCALE_OAUTH_CLIENT_ID=your-client-id
export TAILSCALE_OAUTH_CLIENT_SECRET=your-client-secret
tsflowOpen http://localhost:8080
docker run -d \
--name tsflow \
-p 8080:8080 \
-v tsflow_data:/app/data \
-e TAILSCALE_OAUTH_CLIENT_ID=your-client-id \
-e TAILSCALE_OAUTH_CLIENT_SECRET=your-client-secret \
ghcr.io/rajsinghtech/tsflow:latestTSFlow supports OAuth (recommended) or API key authentication.
OAuth Setup:
- Go to OAuth clients in Tailscale Admin
- Create a new OAuth client with
all:readscope - Set
TAILSCALE_OAUTH_CLIENT_IDandTAILSCALE_OAUTH_CLIENT_SECRET
API Key Setup:
- Go to API keys in Tailscale Admin
- Create a new API key
- Set
TAILSCALE_API_KEY
| Variable | Description | Default |
|---|---|---|
TAILSCALE_OAUTH_CLIENT_ID |
OAuth client ID | - |
TAILSCALE_OAUTH_CLIENT_SECRET |
OAuth client secret | - |
TAILSCALE_OAUTH_SCOPES |
OAuth scopes (comma-separated) | all:read |
TAILSCALE_API_KEY |
API key (alternative to OAuth) | - |
TAILSCALE_TAILNET |
Tailnet name (- for auto-detect) |
- |
TAILSCALE_API_URL |
API endpoint | https://api.tailscale.com |
| Variable | Description | Default |
|---|---|---|
PORT |
Server port | 8080 |
ENVIRONMENT |
development or production |
development |
| Variable | Description | Default |
|---|---|---|
TSFLOW_DB_PATH |
SQLite database path | ./data/tsflow.db |
TSFLOW_POLL_INTERVAL |
How often to poll Tailscale API for new logs | 5m |
TSFLOW_INITIAL_BACKFILL |
How far back to fetch logs on startup | 6h |
TSFLOW_RETENTION |
How long to keep flow logs | 168h (7 days) |
TSFlow stores flow logs in SQLite with:
- 7-day retention for raw flow logs (configurable via
TSFLOW_RETENTION)
Mount a volume to persist data: -v tsflow_data:/app/data
git clone https://github.com/rajsinghtech/tsflow.git
cd tsflow
# Install dependencies
cd frontend && npm install && cd ..
cd backend && go mod download && cd ..Run backend and frontend separately for hot reload:
# Terminal 1: Backend (no embedded frontend)
make dev-backend
# Terminal 2: Frontend with Vite dev server
make dev-frontendFrontend runs on http://localhost:5173 and proxies /api to backend on :8080.
make build
./backend/tsflowThis builds the SvelteKit frontend and embeds it in the Go binary.
services:
tsflow:
image: ghcr.io/rajsinghtech/tsflow:latest
ports:
- "8080:8080"
environment:
- TAILSCALE_OAUTH_CLIENT_ID=${TAILSCALE_OAUTH_CLIENT_ID}
- TAILSCALE_OAUTH_CLIENT_SECRET=${TAILSCALE_OAUTH_CLIENT_SECRET}
volumes:
- tsflow_data:/app/data
restart: unless-stopped
volumes:
tsflow_data:cd k8s
# Edit kustomization.yaml with your credentials
kubectl apply -k .MIT
Built with ❤️ for the Tailscale community