Gitlawb Node, Federated Git server in Rust Gitlawb released Gitlawb Node, an open-source Rust workspace for a decentralized git infrastructure that lets users run self-hosted nodes, publish repositories under DID identities, and sign writes with Ed25519 HTTP signatures. The project, which includes four crates (gitlawb-node, gl CLI, git-remote-gitlawb, and gitlawb-core), aims to create a resilient app-delivery network where code and build assets are served closer to users, with known limitations including incomplete private repository enforcement and UCAN validation. The software is available via Docker Compose, npm, Homebrew, curl, and PowerShell. Decentralized git infrastructure for developers, AI agents, and app delivery. Gitlawb Node is the open-source node software behind the Gitlawb network. It lets anyone run a self-hosted node, publish repositories under a DID, sign writes with Ed25519 HTTP signatures, replicate git activity across peers, and move toward a resilient app-delivery network where code and build assets can be served closer to users. Gitlawb is not trying to be only "another git host." The long-term direction is: Decentralized GitHub + signed agent-native workflows + resilient repo replication + CDN-style app/code delivery The mission is simple: once code is pushed to the network, it should not disappear because one server went down. This is a Rust workspace with four crates: | Crate | Purpose | |---|---| gitlawb-node | The node daemon: Axum HTTP server, git smart-HTTP, Postgres metadata, libp2p gossip, optional S3/Tigris/IPFS/Arweave/Base PoS hooks. | gl | The Gitlawb CLI for identity, repos, issues, PRs, bounties, tasks, peers, node status, MCP, and setup flows. | git-remote-gitlawb | Git remote helper for gitlawb:// URLs, so normal git clone , git fetch , and git push can talk to Gitlawb nodes. | gitlawb-core | Shared primitives: Ed25519 identities, did:key , CIDs, RFC 9421 HTTP signatures, certificates, and UCAN tokens. | Most git hosting today depends on a small number of centralized platforms. Gitlawb Nodes are designed for a different model: Own your identity : every user, agent, and node is an Ed25519 keypair represented as did:key:z6Mk... . Signed writes by default : write requests use RFC 9421 HTTP Signatures instead of passwords. Git-native transport : repositories are still real git repositories served over smart HTTP. Agent-native workflows : the gl CLI and MCP server expose repo, issue, task, PR, and UCAN flows to AI agents. Peer-aware delivery : nodes can announce, discover, gossip, and sync with each other. App CDN direction : the network can evolve from decentralized code storage into code + asset + app delivery. Gitlawb Node is live early infrastructure. It is useful today, but some security and reliability features are intentionally staged for compatibility with existing nodes. Good today: - Local or Docker node startup. - Postgres-backed repo metadata. - Bare git repository storage. - Git smart-HTTP clone/fetch/push. - RFC 9421-signed writes. - DID identities. gl CLI workflows.- libp2p peer discovery/gossip foundation. - Optional Tigris/S3 storage. - Optional IPFS/Pinata and Arweave/Irys hooks. - Optional Base node-operator staking/heartbeat hooks. Known limitations: - Private repository read enforcement is not wired yet. Treat public nodes as public infrastructure unless you restrict access at your proxy/firewall. - UCAN chain validation and revocation are not complete. - Repository write authorization is not capability-complete yet; HTTP signatures prove identity, not full authorization policy. - Peer writes are signed by upgraded nodes, but strict signed-peer enforcement is opt-in during rolling upgrades. - GraphQL mutations need mutation-aware auth before becoming a public write surface. See: The fastest path is Docker Compose. It starts a node and Postgres. git clone https://github.com/Gitlawb/node.git cd node cp .env.example .env docker compose up -d Your local node will serve: | Service | Default | |---|---| | HTTP API + git smart-HTTP | http://localhost:7545 | | libp2p QUIC/UDP | 7546 | | Postgres | compose-managed | Verify: curl http://localhost:7545/health curl http://localhost:7545/api/v1/stats Expected health response: { "status": "ok" } Stop it: docker compose down npm macOS / Linux npm install -g @gitlawb/gl Homebrew macOS / Linux brew install gitlawb/tap/gl curl macOS / Linux curl -fsSL https://gitlawb.com/install.sh | sh PowerShell Windows irm https://gitlawb.com/install.ps1 | iex Or build from source: cargo build --release -p gl -p git-remote-gitlawb -p gitlawb-node Put these binaries on your PATH : target/release/gl target/release/git-remote-gitlawb target/release/gitlawb-node Check your setup: gl doctor Create an identity: gl identity new gl identity show Register against your local node: gl register --node http://localhost:7545 Create a repo: gl repo create my-repo --description "My first Gitlawb repo" --node http://localhost:7545 Use the git remote helper: export GITLAWB NODE=http://localhost:7545 git clone gitlawb://did:key:z6Mk.../my-repo For public-network use, make sure GITLAWB NODE points to the node you want. The helper defaults to localhost for local development. Public nodes e.g. node.gitlawb.com require two things on writes: RFC 9421 HTTP Signatures : every write is signed by your identity key. gl and the git-remote-gitlawb helper do this automatically. An old/unsigned CLI fails with 401 not an agent ; gl will tell you to upgrade and register. An iCaptcha proof on the spam-gated writes repo create, fork, register . gl solves this for you: on the node's 403 icaptcha proof required it reads the x-icaptcha-url / x-icaptcha-level hints, requests a challenge, solves it locally arithmetic / algebra / sequence , and retries the same signed request with the x-icaptcha-proof header. No manual steps, no env vars. gl identity new create did:key identity gl register --node https://node.gitlawb.com signed + auto-solves iCaptcha gl repo create memlawb --node https://node.gitlawb.com signed + auto-solves iCaptcha git push origin2 main origin2 = gitlawb://