No accounts, no sign up forms
No need to sign up anywhere, anyone can start publishing from the CLI with free unlimited identities (as long as there is a server that accepts you)
In Grasp every user identity is a cryptographic keypair and doesn't depend on anyone; every code state is signed; git servers that speak Grasp can be hosted anywhere, seamlessly used by many and don't have to be trusted; repositories can migrate seamlessly; issues and patches can flow freely.
No need to sign up anywhere, anyone can start publishing from the CLI with free unlimited identities (as long as there is a server that accepts you)
People running personal servers can freely interact with people who rely on third-party servers. It doesn't really matter where the code is hosted.
Without complicated sign ups and click-ops, sending small contributions to other people's code is often a single command.
Whether you want to host only your own code or code from your community, or even charge money to host code from others, everybody is still in the same ecosystem.
Whether you're running your own server or using someone else's, the server can impose any moderation criteria it wants, and the client-side can augment it.
Built-in issue filing and management with threaded discussions based on signed messages and pull request flow for more complex code contributions.
Short tutorial
nak is a command-line tool that wraps the basic remote functionalities of
git remotes for Grasp, but also provides an interface to issues and patches;
install.
1) Publish a repository
git init my-project
cd my-project
git add .
git commit -m "initial commit"
nak git init --owner <npub-or-hex> --identifier my-project --name "my-project" --description "Example NIP-34 repo"
nak git sync
nak git push
2) Send a patch
git checkout -b fix/readme-typo
nvim README.md
git add README.md
git commit -m "fix: correct README wording"
nak git patch send HEAD^
3) Fetch and apply patches
nak git patch
nak git patch 7ef59e
nak git patch apply 7ef59e
4) Open and discuss issues
nak git issue create
nak git issue
nak git issue cb44d2
nak git issue reply cb44d2
5) Clone from a GRASP reference
nak git clone <npub-or-nprofile-or-nip05>/my-project
1) Clone a repository the normal git way
git clone nostr://<npub>/<repo-identifier>
cd <repo-identifier>
2) Submit a PR from a `pr/` branch
git checkout -b pr/great-feature
git commit -am "improve the world"
git push -u
# for cover letters and extra options
ngit send
3) View open PRs as remote branches
git branch -r --list origin/pr/*
# or inspect them with ngit
ngit list
4) Update the same PR by pushing more commits
git commit -am "extra thing"
git push
5) Initialize or merge as a maintainer
git init my-project
cd my-project
git add .
git commit -m "initial commit"
ngit init
git checkout master
git merge pr/great-feature(e8246b2)
git push
GitHub made collaboration mainstream, but it has become a huge bottleneck, liability and central point of failure, not to mention the censorship. Getting everybody to migrate to GitLab or Codeberg is not the solution.
Self-hosting with Gitea or Forgejo can be a good fit for private teams or closed organizations, but for public open-source isolated forges fragment discovery, duplicate identity and account setup and make cross-project contribution harder and more annoying.
Grasp offers a protocol-centric model: many frontends, many CLIs, many server implementations, all interoperable around a standard for cryptographically signed identities and messages that are sent to and read from the same servers that host the git repositories.
Once you have a local git repository and a keypair you can sign a message announcing that repository and another message announcing the state of its branches.
Once you publish those messages to your list of chosen servers, those servers will be able to accept your git repository as long as it matches the announced state.
The announcement message can also be published to other servers that can act as aggregators where users can discover your projects.
On every new commit you sign a new repository state message and everything gets updated on your chosen servers. Anyone following you or your repository for updates can be get immediately notified.
Issues and patches are just other kinds of standardized messages that can be sent by anyone directly to your servers, so you can read them whenever you want, apply the patches or respond to the issues. These same servers may choose any criteria to filter out spam or inconvenient contributions they want.
While patches work similar to the old git-send-email approach, pull requests are more like the centralized forge approach: you publish your branch to a Grasp server then send a message to the target asking them to pull the branch and merge.
Full protocol specs: NIP-34 and Grasp.
Servers, web applications, CLIs, native desktop and integrations in other apps.
Fast web-based repository code viewers with minimal functionality.
Full-blown web-based GitHub-like experience.
Alternative CLI for managing repositories, issues, patches and pull requests.
Desktop native application for browsing repositories and code.
Grasp server reference implementation with full support for everything.
Community (or personal) server with built-in Grasp support, includes dynamic invite-based whitelisting access.
AI webapp builder that uses Grasp natively for source-code management.