GoE is a decentralized Git protocol built on Ethereum and EthStorage, providing a new standard for trustworthy, on-chain code hosting.
It redefines code ownership and verifiability, making your repositories secure, censorship-resistant, and permanently accessible — just like blockchain assets.
With GoE, your code is:
- Censorship-resistant — leveraging Ethereum’s permissionless network and global consensus for truly open collaboration.
- Immutable and traceable — GoE stores Git repository state fully on-chain: smart contracts track branch heads and the metadata of Git objects, while the actual repository data is stored in EthStorage. Together, they provide a tamper-proof, verifiable history.
- Web3-native — fully compatible with Ethereum wallets, DAOs, DApps, and identity systems.
- Fully usable — no new blockchain or extra node infrastructure required.
- Git-native — seamless compatibility with standard Git commands via the
goe://protocol.
GoE uses a three-layer model for seamless Git integration:
- Git Remote Helper — handles the
goe://protocol for all Git commands. - Ethereum Smart Contracts — manage branches, commits, and access permissions on-chain.
- EthStorage (EIP-4844 Blob) — stores large Git data objects efficiently on Ethereum L2.
📘 Design Document:
For a deeper technical overview of GoE's architecture and on-chain Git mechanics, see our design doc.
GoE introduces a custom Git protocol to access on-chain repositories.
goe://<repo_address>:<chain_id><repo_address>— the smart contract address of the repository<chain_id>— the chain ID where the repository is deployed
This protocol is automatically handled by the Git Helper installed with
goe-cli. No additional setup is required.
npm install -g goe-cliManage wallets that act as your on-chain identity.
- Create a wallet
goe wallet create- List wallets
goe wallet list- Unlock a wallet
goe wallet unlock- Lock a wallet
goe wallet lock🔑 Note: Wallets are secured using a password-derived key stored in your system keychain.
- Unlock: Enter your password to derive a key and store it in the system keychain to decrypt your private key for Git operations.
- Lock: Remove the derived key from the system keychain to secure your wallet.
Create and manage on-chain repositories and permissions.
- Create a repository
goe repo create <repo_name> --chain-id <chain_id>- List repositories
goe repo list --chain-id <chain_id>- List branches
goe repo branches <repo_address> --chain-id <chain_id>- Set default branch
goe repo default-branch <repo_address> <branch_name> --chain-id <chain_id>- Grant / Revoke push access
goe repo grant-push <repo_address> <user_address> --chain-id <chain_id>
goe repo revoke-push <repo_address> <user_address> --chain-id <chain_id>goe wallet create
goe wallet unlockgoe repo create my-project --chain-id 11155111
# Output:
# Repo address: 0xABCDEF...git init
git remote add origin goe://0xABCDEF...:11155111
echo "# My Project" > README.md
git add .
git commit -m "Initial commit"# The first push creates the branch on-chain (e.g. master),
# and this branch becomes the default branch automatically.
git push origin masterGOE_GAS_INC_PCT environment variable.
Examples:
- 0 → default gas (no increase)
- 1 → +1% gas
- 100 → +100% gas (double the base gas)
# Increase gas by 10%
GOE_GAS_INC_PCT=10 git push -u origin main# Only needed if you want to change it later.
goe repo default-branch <repo_address> master --chain-id 11155111goe repo grant-push <repo_address> <collaborator_address> --chain-id 11155111For a practical guide with example commands and workflows, see test-guide.md.
-
GoE is fully compatible with existing Git workflows.
-
All commits and repository history are verifiable on-chain.
-
“Not your keys, not your code.”