ariadne-cli
v0.1.9
Published
ARIADNE - decentralized git repository hosting on Arweave/AO
Maintainers
Readme
ARIADNE CLI
Decentralized git repository hosting on Arweave/AO with permanent storage and optional encryption.
Features
- Permanent Storage: Repos are stored on Arweave — data persists forever
- Decentralized: No single server required — anyone can run their own instance
- Private Repos: AES-256-GCM encryption with RSA key exchange
- Simple UX: Just
git add,git commit, andariadne push
Installation
# Install globally via npm (recommended)
npm install -g ariadne-cli
# Or use directly with npx
npx ariadne-cli <command>For development:
cd ariadne-cli
npm install
npm link # Makes `ariadne` and `git ariadne` commands available globallyOr use directly:
node cli/index.js <command>Quick Start
# Create a new repo
mkdir my-project && cd my-project
git init
echo "# My Project" > README.md
git add . && git commit -m "Initial commit"
# Create on ARIADNE (public)
ariadne init --create --wallet ./wallet.json
# Or create private (encrypted)
ariadne init --create --private --wallet ./wallet.json
# Push changes
ariadne push --wallet ./wallet.json
# Clone a repo
ariadne clone <manifest-tx-id> --wallet ./wallet.jsonUsage
Standard Git Commands
# Stage files for commit
ariadne add <files...>
# Create a commit
ariadne commit -m "Your commit message"
# Show working tree status
ariadne status
# List branches
ariadne branch
# Create a branch
ariadne branch create <branch-name>
# Delete a branch
ariadne branch delete <branch-name>
# Switch branches
ariadne checkout <branch-name>
# Show changes between commits
ariadne diff [ref1] [ref2]
# Show commit history
ariadne log -n 10Repository Commands
# Clone a repository from ARIADNE
ariadne clone <repo-id> [directory]
ariadne clone <repo-id> --wallet ./wallet.json # Required for private repos
# Initialize a new repository
mkdir my-repo && cd my-repo
git init
ariadne init --create --wallet ./wallet.json
# Initialize a private (encrypted) repository
ariadne init --create --private --wallet ./wallet.json
# Push changes to ARIADNE
ariadne push --wallet ./wallet.json
# Push as private repo
ariadne push --private --wallet ./wallet.json
# Pull changes from ARIADNE
ariadne pull
# Fetch objects from ARIADNE
ariadne fetch
# Manage remotes
ariadne remote list
ariadne remote add origin <repo-id>
# Wallet management
ariadne auth --showGit Wrapper Integration
When installed via npm link, works as git ariadne:
git ariadne add <files...>
git ariadne commit -m "message"
git ariadne status
git ariadne branch
git ariadne checkout <branch>
git ariadne diff
git ariadne log
git ariadne clone <repo-id>
git ariadne push
git ariadne pull
git ariadne init --createPrivate Repositories
ARIADNE supports encrypted private repositories using AES-256-GCM encryption with RSA key exchange:
# Create a private repo
ariadne init --create --private --wallet ./wallet.json
# Push to private repo
ariadne push --private --wallet ./wallet.json
# Clone private repo (wallet required for decryption)
ariadne clone <repo-id> --wallet ./wallet.jsonHow it works:
- A random 256-bit AES key is generated for the repository
- All blob data is encrypted with AES-256-GCM before upload
- The AES key is encrypted with your wallet's RSA public key
- Only your wallet (or shared collaborators) can decrypt the AES key and access the data
Configuration
The CLI stores configuration in .gitariadne in the repository root:
[ariadne]
repoId = x8asj... # Manifest TX ID (repo identifier)
processId = n_XZJhUnmldNFo4dhajoPZWhBXuJk-OcQr5JQ49c4Zo
dataTxId = x8asj... # Legacy: current pack data TX ID
encrypted = false # Whether repo is encrypted
encryptedKey = # AES key encrypted with owner's RSA key
lastPush = 1712234567890Self-Hosting
ARIADNE is designed for self-hosting. Teams can run their own instances:
# Deploy your own AO contract
cd ao-contracts/repository-contract
npx ao-deploy aod.config.js # Gets process ID
# Initialize with your own instance
ariadne init --create --process-id n_xxx --node https://your-node.comSee SELF-HOSTING.md for full documentation.
Wallet
The CLI supports multiple wallet sources (in order of priority):
--wallet <path>CLI flagARWEAVE_WALLETenvironment variable (base64-encoded JWK or raw JSON)- Common locations:
~/.arweave/wallet.json,~/.arconnect/wallet.json
Architecture
lib/
├── git/ # isomorphic-git wrapper
├── ardrive/ # Turbo upload module
├── ao/ # AO/HyperBEAM state module
├── wallet/ # JWK wallet module
├── crypto/ # AES-256-GCM + RSA encryption
└── config/ # .gitariadne config
cli/
└── commands/ # ariadne clone, push, pull, init, etc.Environment Variables
ARWEAVE_WALLET- JWK wallet (base64 or JSON string)AOS_PROCESS_ID- AO process ID for repository contractHYPERBEAM_NODE- HyperBEAM node URL (default: https://push-1.forward.computer)
