DevMesh
Peer-to-peer dev mesh for sharing local services across machines. Run services locally, discover peers on your network, and route traffic transparently by service name.
Features
- Register local services (from devmesh.toml)
- HTTP reverse proxy routes by Host header (e.g. http://mono:8080/)
- Peer discovery via UDP broadcast (same LAN or VPN)
- Version awareness with optional strict mode
- Branch-based namespaces (git branch → isolated mesh)
- Web dashboard and ASCII/JSON graph
- Graceful shutdown (Ctrl+C)
Install
macOS (Homebrew): brew install mdadul/homebrew-devmesh/devmesh
Rust (crates.io): cargo install devmesh
GitHub Release: Download devmesh-vX.Y.Z-.tar.gz from https://github.com/mdadul/devmesh/releases Extract and move the binary to your PATH.
From repo: cargo install --path .
Quick Start
-
Create devmesh.toml in your project root:
[services.mono] port = 3000 version = "1.0.0"
-
Add host resolution (one-time):
devmesh install
Add the printed line to /etc/hosts (or C:\Windows\System32\drivers\etc\hosts).
-
Start the proxy (keeps running):
devmesh proxy
-
In another terminal, register and run your service:
devmesh run mono
then start your app on port 3000
-
Access via http://mono:8080/
-
On another machine, run devmesh proxy and devmesh run mono. They discover each other; requests route to the nearest peer.
Commands
run Register and start agent for a service stop Unregister service status List local and peer services (--routes for routing view) install Show /etc/hosts line for service names proxy Start HTTP proxy + discovery (Ctrl+C to stop) graph Show mesh (--json for JSON, -o file to write) dashboard Web UI at http://127.0.0.1:3005 db status Show registry and peers paths/stats
--config PATH Use specific config file (global)
Configuration (devmesh.toml)
[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/subnet
[namespace] override = "my-ns" # optional, overrides git branch auto = true # default: use git branch
[services.mono] port = 3000 version = "1.0.0"
Environment
DEVMESH_CONFIG Path to config (overrides devmesh.toml) RUST_LOG Log level (e.g. devmesh=debug)
Namespaces
By default, namespace = git branch (sanitized: feature/foo → feature-foo). Services and peers are isolated by namespace. Override via [namespace] override or X-DevMesh-Namespace header.
Dashboard
devmesh dashboard
Opens http://127.0.0.1:3005. Use ?namespace= to view other namespaces.
Docs
devmesh docs
Serves documentation at http://127.0.0.1:3006.
License
See LICENSE file.