We just stopped using it that way.
Mesh is the coordination layer git always needed. Share code with your team — no server, no account, no one's permission required.
On one side: git daemon. It works. Nobody uses it.
It's raw, manual, and assumes you already know what you're doing.
On the other side: GitHub, GitLab, Bitbucket. Powerful. But you need an account. Admin rights. Sometimes a ticket filed with IT, and then you wait.
Git was designed to let any machine talk to any other machine. Push, pull, clone — peer to peer, by design. Linus built it that way.
Then we spent 15 years routing everything through a central server.
That's the gap. Mesh lives in it. It's what git daemon
should have grown into: automatic peer discovery, signed gossip, and
git's own HTTP transport wired together.
Great project. But it looks like it's built for publishing to a public network — for code that belongs to the world, discoverable by strangers.
We wanted something different: a private network for three people who already know each other, already trust each other, and just need to share a repo while they wait for someone in IT to approve a GitLab sub-group.
We could've spent weeks learning Radicle's trust model. But we're software builders. So we built mesh instead.
Your team already knows each other. You don't need a third party to sit in the middle and mediate that.
Mesh starts from that assumption. You exchange pubkeys once —
one mesh invite, one mesh join.
After that, every machine in your mesh authenticates every message
cryptographically. No CA. No certificate from a stranger.
Just your keys.
Every node keeps a full bare mirror of every repo. If your laptop is off, your teammate's node still has it. There's no server to go down because every node is the server.
Repos replicate automatically across all peers over signed HTTPS. Any git client works — git push mesh main and every node updates.
Pipelines defined in .mesh/mesh-ci.yml. Any node can be a runner. Docker or shell jobs. Assignment, execution, and log streaming over the same gossip channel.
A lightweight issues board per repo, synced across peers. No database. No SaaS. Drag to reorder, label to filter, markdown in the body.
mesh update pulls the latest release from GitHub and applies it in place. Or mesh update --from alice to get it from a peer on your LAN.
curl -fsSL https://raw.githubusercontent.com/kaizen-hq/mesh/main/install.sh | bash
mesh init
mesh start
mesh add-repo my-app ~/src/my-app
mesh invite # prints a token
# teammate runs:
mesh join <token>
git config http.https://localhost:7979.sslVerify false
git remote add mesh https://localhost:7979/my-app.git
git push mesh main