ngit

nostr plugin for git

git clone, fetch and push over nostr:// — with pull requests and issues that live on relays, not on a forge.

curl -Ls https://ngit.dev/install.sh | bash

More install options →

How it works

Two layers, pulled apart

Git already separates what the refs point at from the objects themselves. ngit puts the first on nostr relays as signed events, and leaves the second on ordinary git servers. The refs become the source of truth — so the server holding your objects is just storage, and can be swapped without telling anyone.

author git server objects git server objects relay refs relay refs relay refs user
—— refs · signed nostr events · source of truth —— objects · any git server · interchangeable

One rule to remember

A branch becomes a pull request when it starts with pr/

That is the whole flow. No fork, no account on anyone's server, no web UI in the loop. Push the branch and contributors and maintainers see a proposal.

Review, comment, label and merge from the CLI — or from gitworkshop.dev in a browser.

git checkout -b pr/my-feature
# ... commits ...
git push -u origin pr/my-feature

Why it's different

Collaboration without the platform

state on nostr

Branch and tag refs are signed nostr events. That's what the repository is — so losing, changing or distrusting a git server costs you nothing but a re-push.

PRs from git push

Push a pr/ branch and it becomes a pull request. Issues, comments, labels and merges are all ordinary ngit commands.

GRASP: one server

A GRASP server is a relay and a git server in one. ngit init creates your repository on relay.ngit.dev automatically — no signup, no setup.

Try it

Clone ngit with ngit

ngit develops itself on nostr. Once installed, this works like any other clone URL.

git clone nostr://danconwaydev.com/relay.ngit.dev/ngit