Peer-to-peer dev mesh for sharing local services across machines.
DevMesh lets you run services locally on your machine, discover peers on the same network (LAN or VPN), and route HTTP traffic by service name. Use http://mono:8080/ instead of http://localhost:3000—DevMesh routes to your local service or to a peer if you're not running it.
devmesh.toml1. Install Rust first: rustup.rs
cargo install devmesh
Or from repo: cargo install --path .
Or run devmesh setup for an interactive wizard.
[services.mono]
port = 3000
version = "1.0.0"
devmesh install
Add the printed line to /etc/hosts (macOS/Linux) or C:\Windows\System32\drivers\etc\hosts (Windows).
devmesh proxy
Leave this running. Press Ctrl+C to stop gracefully.
devmesh run mono
# Then start your app on port 3000
curl http://mono:8080/
On another machine on the same network, run devmesh proxy and devmesh run mono. They discover each other. Requests route locally first, then to peers. Round-robin when multiple peers have the same service.
setup | Interactive setup wizard |
from-docker | Discover services from Docker (--write to merge into config) |
run <service> | Register service (from config) |
stop <service> | Unregister service |
status | List local and peer services (--routes for routing) |
install | Show /etc/hosts line |
proxy | Start HTTP proxy + discovery |
graph | ASCII mesh (--json, -o file) |
dashboard | Web UI (port 3005) |
docs | Serve this documentation (port 3006) |
db status | Registry and peers paths/stats |
Global: --config PATH uses a specific config file.
Config is loaded from devmesh.toml (cwd), ~/.devmesh/config.toml, or DEVMESH_CONFIG / --config.
[proxy]
port = 8080
version_strict = false # true = reject on version mismatch
cache_ttl_secs = 1
[discovery]
port = 35555
# broadcast_addr = "10.42.0.255" # for VPN
[namespace]
override = "my-ns" # overrides git branch
auto = true # use git branch (default)
[services.mono]
port = 3000
version = "1.0.0"
[services.ui]
port = 3001
# Multi-port: api at api:8080, api-8001:8080
[services.api]
port = 8000
ports = [8001]
devmesh from-docker discovers running Docker containers with published ports. Preview with:
devmesh from-docker
Merge into devmesh.toml with:
devmesh from-docker --write
Containers with only unpublished ports (e.g. 8080/tcp) are skipped. Multi-port containers (e.g. RabbitMQ 5672, 15672) are supported.
Services and peers are isolated by namespace. Default: namespace = current git branch (sanitized, e.g. feature/foo → feature-foo).
[namespace] override = "staging" — fixed namespace[namespace] auto = false — use "default" instead of gitX-DevMesh-Namespace: staging — per-request override (proxy)Dashboard and API support ?namespace= to view other namespaces.
devmesh dashboard
Opens http://127.0.0.1:3005. Shows local services, peers, version mismatches. Use the namespace input to switch namespaces.
Set version in [services.X]. Clients can send X-DevMesh-Expected-Version: ^1.0 (semver range). If target version doesn't match:
version_strict = false (default): warn onlyversion_strict = true: return 409 ConflictMajor version mismatches are highlighted in status and dashboard.
RUST_LOG=devmesh=debug for verbose logs.