Getting started
A practical walkthrough — from a fresh Tailscale account to sharing several real dev servers through one URL.
1. Set up Tailscale (one-time)
tailscale up # sign up / log inEnable HTTPS certificates and,
for public sharing, the funnel node attribute.
Then verify:
npx tailscale-proxy doctor2. Start some dev servers
These runtimes are discovered by default: node, bun, deno, python,
ruby, php, go, java, dotnet, elixir, perl, and docker-published
ports. Run each from its project folder — that becomes the URL path.
# JavaScript / TypeScript
cd ~/sites/portfolio && npx serve -l 3000
cd ~/sites/docs && npx http-server -p 3001
cd ~/apps/web && npx next dev -p 4000
cd ~/apps/api && bun run dev
# Python (interpreter or uvicorn/gunicorn)
cd ~/apps/fastapi && uvicorn main:app --port 3010
# PHP / Ruby / Go / Docker
cd ~/apps/legacy && php -S 127.0.0.1:3004
cd ~/apps/rb && ruby -run -e httpd . -p 3005
cd ~/apps/gosrv && go run .
docker run -p 3030:80 nginx3. Share them
tsp # public Funnel (default)
tsp --private # tailnet-only ServeServices:
https://bigfoot.tail-scale.ts.net/portfolio/ → 127.0.0.1:3000
https://bigfoot.tail-scale.ts.net/web/ → 127.0.0.1:4000
https://bigfoot.tail-scale.ts.net/api/ → 127.0.0.1:41004. Save your preferences
tsp configure --ports 3000-9000 --runtimes node,bun,python
tsp # now a bare `tsp` uses the saved configCompiled binaries (a built Go or Rust server) have arbitrary process names, so
they show up only under --all. go run / cargo dev workflows are detected.
A real multi-service setup
Four services, each in its own folder under ~/work/help-ai:
cd ~/work/help-ai/services/agent && bun run dev # :3087
cd ~/work/help-ai/services/crawlee && bun run dev # :3120
cd ~/work/help-ai/services/workspace && bun run dev # :3122
cd ~/work/help-ai/apps/web && npm run dev # :4501
tsp https://bigfoot.tail-scale.ts.net/agent/ → 127.0.0.1:3087
https://bigfoot.tail-scale.ts.net/crawlee/ → 127.0.0.1:3120
https://bigfoot.tail-scale.ts.net/workspace/ → 127.0.0.1:3122
https://bigfoot.tail-scale.ts.net/web/ → 127.0.0.1:4501Restart a server and tsp picks up the new process automatically. If a project
folder runs more than one server, the lowest-port one is the main /<slug>/ and
the others get a -<port> suffix — all stay reachable, and tsp prints the map.