Radicle
Installation
# Via pre-compiled binaries (recommended)
curl -sSf https://radicle.xyz/install | sh
# Via Cargo (Rust)
cargo install radicle-node radicle-cli
# Verify
rad --version
rad --help Prerequisites: Git installed, network connection for sync.
Identity
# Create an identity (Ed25519 key, once only)
rad auth
# You choose an alias and a passphrase
# Display your identity
rad self
# Shows: DID (did:key:z6Mk...), alias, node ID
# The identity is stored locally
# No central server, no account to create DID = Decentralized Identifier. It's your public key, your identity on the network.
Project
# Initialize a Radicle project (in an existing git repo)
cd my-project
git init && git add . && git commit -m "init"
rad init
# Choose: name, description, default branch, visibility
# Inspect the project
rad inspect # RID, name, description, delegates
rad id # your identity in this project
# Created structure
# .git/refs/namespaces/ - Radicle refs
# No files added to the working tree Network - Push / Sync
# Publish changes to the network
rad push # push to connected seed nodes
# Synchronize (sends and receives updates)
rad sync # synchronize with peers
# Clone a remote project
rad clone rad:z3gqcJ... # clone via RID (Radicle ID) Patches (equivalent to Pull Requests)
# Create a patch (from a branch)
git switch -c my-feature
# ... make changes, commit ...
rad patch create # creates a patch from the branch
# List patches
rad patch list # all patches
rad patch list --state open # only open ones
# View a patch
rad patch show PATCH_ID
# Comment / review
rad patch comment PATCH_ID --message "LGTM!"
rad patch review PATCH_ID --accept
rad patch review PATCH_ID --reject
# Merge a patch
rad patch merge PATCH_ID
# Close without merging
rad patch close PATCH_ID Issues (decentralized tickets)
# Create an issue
rad issue create
# Opens an editor for title + description
# List
rad issue list
rad issue list --state open
# View
rad issue show ISSUE_ID
# Comment
rad issue comment ISSUE_ID "Great idea!"
# Close
rad issue close ISSUE_ID Node - Node management
# Start the local node
rad node start # starts in the background
rad node status # node status
rad node stop # stop
# Logs and debug
rad node logs # see logs in real time
rad node config # display configuration
# The node listens on port 8776 (TCP)
# Required for P2P sync Tracking - Follow projects
# Track a project (replicate it locally)
rad track rad:z3gqcJ... # by RID
rad untrack rad:z3gqcJ... # stop replicating
# Inspect the current project (RID, delegates, etc.)
rad inspect GitHub vs Radicle comparison
| Concept | GitHub | Radicle |
|---|---|---|
| Repository | Repository | Project (RID) |
| Identity | GitHub Account | DID (crypto key) |
| Contribution | Pull Request | Patch |
| Tickets | Issue | Issue |
| Copy | Fork | Clone (implicit fork) |
| Favorite | Star | Track |
| CI/CD | GitHub Actions | radicle-ci |
| Hosting | github.com | P2P Seed nodes |
| Model | Centralized | Decentralized (P2P) |
| Availability | Depends on GitHub | Distributed network |
| Censorship | Possible (DMCA, etc.) | Resistant |
Seed Node - Hosting
# A seed node is a permanent Radicle node
# It replicates projects and makes them accessible
# Server prerequisites
# - Linux, port 8776 open (TCP)
# - radicle-node installed
# Configuration
rad node config
# File: ~/.radicle/config.json
# Policies: block (blacklist) or allow (whitelist)
# Systemd (automatic startup)
# /etc/systemd/system/radicle-node.service
# [Service]
# ExecStart=/usr/local/bin/radicle-node
# User=radicle
# Restart=always
sudo systemctl enable radicle-node
sudo systemctl start radicle-node
# Firewall
sudo ufw allow 8776/tcp # Ubuntu
sudo firewall-cmd --add-port=8776/tcp --permanent # Fedora