A modern version control system designed as a Git alternative with enhanced features like timeline-based branching, content-addressable storage, and seamless GitHub integration.
part1_demo.mp4
part2_demo.mp4
part3_demo.mp4
part4_demo.mp4
- Timeline-Based Branching: Intuitive branch management with auto-shelving
- Butterfly Timelines: Experimental sandboxes with bidirectional sync for safe development
- Interactive Commit Squashing: Clean up history with arrow-key navigation before pushing
- Interactive Merge Resolution: File-by-file conflict resolution with preview options
- Hash Prefix Support: Reference commits with short hashes like
abc123 - Modern Cryptography: BLAKE3 hashing for security and performance
- Content-Addressable Storage: Efficient deduplication and storage
- GitHub Integration: Seamless clone, push, and pull operations
- Auto-Shelving: Never lose work when switching branches
- Submodule Support: Automatic Git submodule detection, conversion, and dual-hash tracking
- Selective Sync: Download only the branches you need
- Merkle Mountain Range: Append-only commit history with cryptographic proofs
- Verbosity Control:
--verboseand--quietflags for output control
The easiest way to install Ivaldi VCS is using the automated setup script:
# Install directly using curl
curl -fsSL https://raw.githubusercontent.com/javanhut/IvaldiVCS/main/setup.sh | bashOr download and run:
# Download the setup script
curl -fsSL https://raw.githubusercontent.com/javanhut/IvaldiVCS/main/setup.sh -o setup.sh
chmod +x setup.sh
# Run the installer
./setup.shThe setup script will:
- Detect your operating system (Linux/macOS)
- Install Go if needed (version 1.19+)
- Download and build Ivaldi VCS
- Install the binary to
/usr/local/bin - Clean up temporary files
After installation, restart your terminal or run:
source ~/.bashrc # Linux
source ~/.zshrc # macOS with zshIf you prefer to build from source:
# Clone the repository
git clone https://github.com/javanhut/IvaldiVCS
cd IvaldiVCS
# Build and install (requires Go 1.19+)
make install
# Or build locally
make build
./build/ivaldi --helpivaldi --version
ivaldi --helpTo remove Ivaldi VCS from your system:
# Download and run the uninstall script
curl -fsSL https://raw.githubusercontent.com/javanhut/IvaldiVCS/main/uninstall.sh | bashOr if you have the source:
./uninstall.shThe uninstall script will:
- Remove the Ivaldi binary from
/usr/local/bin - Optionally clean up PATH entries from shell configuration files
- Optionally remove source directory (if present)
You can also uninstall manually:
sudo rm /usr/local/bin/ivaldi# Initialize repository
ivaldi forge
# Check status
ivaldi status
# Stage files
ivaldi gather file1.txt file2.js
# Create commit (generates memorable seal name)
ivaldi seal "Add new features"
# Output: Created seal: swift-eagle-flies-high-447abe9b (447abe9b)
# Check current position
ivaldi whereami
# Output: Last Seal: swift-eagle-flies-high-447abe9b (just now)
# List all seals
ivaldi seals list
# Create and switch timeline (branch)
ivaldi timeline create feature-auth
ivaldi timeline switch main
# Create experimental timeline (butterfly)
ivaldi timeline butterfly experiment
# Make changes, test safely
ivaldi timeline butterfly up # Merge to parent when ready
# Clean up commit history before pushing
ivaldi shift --last 5 # Interactive squash# Authenticate with GitHub (OAuth)
ivaldi auth login
# Check authentication status
ivaldi auth status
# Connect to GitHub repository
ivaldi portal add owner/repo
# Clone from GitHub (auto-converts submodules!)
ivaldi download owner/awesome-project
# Discover remote branches
ivaldi scout
# Download specific branches
ivaldi harvest feature-auth bugfix-db
# Push changes
ivaldi upload
# Force push after squashing
ivaldi upload --forceTimelines are Ivaldi's equivalent to Git branches, but with enhanced features:
- Auto-shelving: Uncommitted changes are automatically preserved when switching
- Workspace isolation: Each timeline maintains its own workspace state
- Butterfly timelines: Experimental sandboxes with bidirectional sync (up/down)
- Efficient storage: Shared content between timelines via content-addressable storage
Ivaldi uses intuitive command names with enhanced user experience:
gather: Stage files (likegit add)seal: Create commit with auto-generated human-friendly names (likegit commit)seals: Manage seals with memorable names like "swift-eagle-flies-high-447abe9b"
Clean up your commit history before pushing:
- Interactive selection: Use arrow keys to select commit range
- Safety confirmations: Multiple steps to prevent accidents
- Force push warnings: Clear guidance on rewriting history
Remote operations are designed for selective collaboration:
scout: Discover available remote branchesharvest: Download only the branches you need
Automatic Git submodule support:
- Auto-detection: Finds and converts Git submodules automatically
- Dual-hash tracking: BLAKE3 for Ivaldi, Git SHA-1 for GitHub compatibility
- Timeline-aware: Submodules track state per timeline
- Usage Guide: Comprehensive guide to using Ivaldi VCS
- Configuration System: User and repository configuration
- Architecture: Technical details about how Ivaldi works
- Seal Names: Human-friendly commit naming system
- Timeline Branching: Advanced branching features
- Config Command: Configure user settings and preferences
- Log Command: View commit history
- Diff Command: Compare changes between commits
- Reset Command: Unstage files and reset changes
- Fuse Command: Merge timelines together
- Whereami Command: Current timeline information
- Scout & Harvest: Remote timeline operations
- GitHub Integration: GitHub synchronization
- Portal Commands: Repository connection management
ivaldi forge # Initialize repository
ivaldi status # Show working directory status
ivaldi whereami # Show current timeline details (alias: wai)
ivaldi config # Configure user settings (interactive)
ivaldi config --list # List all configurationivaldi gather [files...] # Stage files for commit
ivaldi seal <message> # Create commit with staged files (generates unique seal name)
ivaldi seals list # List all seals with their generated names
ivaldi seals show <name|hash> # Show detailed information about a seal
ivaldi reset [files...] # Unstage files
ivaldi reset --hard # Discard all uncommitted changesivaldi log # Show commit history
ivaldi log --oneline # Concise one-line format
ivaldi log --limit 10 # Show only last 10 commits
ivaldi diff # Show working directory changes
ivaldi diff --staged # Show staged changes
ivaldi diff <seal> # Compare with specific commit
ivaldi diff --stat # Show summary statisticsivaldi timeline create <name> # Create new timeline
ivaldi timeline switch <name> # Switch to timeline
ivaldi timeline list # List all timelines
ivaldi timeline remove <name> # Delete timeline
ivaldi fuse <source> to <target> # Merge timelines
ivaldi fuse --continue # Continue merge after resolving conflicts
ivaldi fuse --abort # Abort current mergeivaldi auth login # Authenticate with GitHub (OAuth)
ivaldi auth status # Check authentication status
ivaldi auth logout # Log out
ivaldi portal add <owner/repo> # Add GitHub connection
ivaldi portal list # List connections
ivaldi download <url> [dir] # Clone repository
ivaldi scout # Discover remote timelines
ivaldi harvest [names...] # Download timelines
ivaldi upload # Push to GitHub- All content stored using BLAKE3 hashing
- Automatic deduplication across the entire repository
- Efficient storage of large files through chunking
- Append-only commit history with cryptographic proofs
- Efficient verification of commit inclusion
- Persistent storage using BoltDB
- Hash Array Mapped Trie for efficient directory management
- Structural sharing between timelines
- O(log n) updates and lookups
- Intelligent file materialization when switching timelines
- Auto-shelving preserves uncommitted changes
- Minimal file system operations during switches
Here's how to translate a common Git workflow to Ivaldi:
# Git commands → Ivaldi commands
git init → ivaldi forge
git add README.md → ivaldi gather README.md
git commit -m "first commit" → ivaldi seal -m "first commit"
git branch -M main → (not needed - main is default)
git remote add origin https://github.com/javanhut/TestRepoIvaldi.git → ivaldi portal add origin https://github.com/javanhut/TestRepoIvaldi.git
git push -u origin main → ivaldi upload#Initialize empty repository
ivaldi forge
ivaldi gather README.md
ivaldi seal "first commit"
ivaldi portal add javanhut/TestRepoIvaldi
ivaldi uploadIvaldi sets main an default branch on initialization Gather can be use specifically or empty for all file added Sealing is like sealing a letter you have the message no need to specific it is. Portals don't need a https://github.com/owner/Repo.git the owner and repo are enough. You upload the code to github with upload keyword not a push.
| Feature | Git | Ivaldi |
|---|---|---|
| Initialize | git init |
ivaldi forge |
| Configure | git config |
ivaldi config |
| Stage files | git add |
ivaldi gather |
| Unstage | git reset |
ivaldi reset |
| Commit | git commit |
ivaldi seal |
| Log | git log |
ivaldi log |
| Diff | git diff |
ivaldi diff |
| Branch | git branch |
ivaldi timeline create |
| Switch branch | git checkout |
ivaldi timeline switch |
| Experimental branch | (manual) | ivaldi timeline butterfly |
| Merge | git merge |
ivaldi fuse |
| Squash commits | git rebase -i |
ivaldi shift |
| Clone | git clone |
ivaldi download |
| Push | git push |
ivaldi upload |
| Fetch | git fetch |
ivaldi harvest |
| Submodules | git submodule |
(automatic) |
- Intuitive Commands: Clear, descriptive command names
- Human-Friendly Seals: Commits get memorable names like "swift-eagle-flies-high-447abe9b"
- Auto-Shelving: Never lose work when switching branches
- Butterfly Timelines: Safe experimental sandboxes with easy merge up/down
- Interactive Squashing: Arrow-key commit selection vs text editor rebase
- Automatic Submodules: Git submodules auto-detected and converted
- Selective Sync: Download only branches you need
- Modern Hashing: BLAKE3 for better security and performance
- Clean Storage: Content-addressable storage with automatic deduplication
- GitHub Integration: First-class GitHub support built-in
# Build the project
make build
# Run tests
make test
# Clean build artifacts
make clean├── cli/ # Command-line interface
├── internal/ # Internal packages
│ ├── cas/ # Content-addressable storage
│ ├── commit/ # Commit management
│ ├── filechunk/ # File chunking system
│ ├── github/ # GitHub integration
│ ├── hamtdir/ # HAMT directory trees
│ ├── history/ # MMR and timeline history
│ ├── refs/ # Reference management
│ ├── workspace/ # Workspace materialization
│ └── wsindex/ # Workspace indexing
├── docs/ # Documentation
└── main.go # Entry point
- Fork the repository
- Create a feature timeline:
ivaldi timeline create feature-name - Make your changes and commit:
ivaldi gather . && ivaldi seal "Description" - Push to your fork:
ivaldi upload - Create a Pull Request
[License details to be added]
Ivaldi VCS builds upon research in:
- Content-addressable storage systems
- Merkle data structures
- Modern cryptographic hashing
- Version control system design
Ivaldi VCS - Modern version control for the modern developer