Git is already
peer-to-peer.

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.

view on GitHub
alice's machine
bob's machine

There's a gap.

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.

We looked at Radicle.

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.

The trust is already there.

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.

What you get

Git sync

Repos replicate automatically across all peers over signed HTTPS. Any git client works — git push mesh main and every node updates.

Distributed CI/CD

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.

Issues board

A lightweight issues board per repo, synced across peers. No database. No SaaS. Drag to reorder, label to filter, markdown in the body.

Self-updating

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.

Get started in two minutes

1

Install

curl -fsSL https://raw.githubusercontent.com/kaizen-hq/mesh/main/install.sh | bash
2

Init & start

mesh init
mesh start
3

Add your repo

mesh add-repo my-app ~/src/my-app
4

Invite a teammate

mesh invite   # prints a token
# teammate runs:
mesh join <token>
5

Push

git config http.https://localhost:7979.sslVerify false
git remote add mesh https://localhost:7979/my-app.git
git push mesh main

Full documentation →