An open-source, Git-like version control CLI for secure cloud-to-local synchronization via encrypted SSH tunnels
"Your configs, your cloud, your rules - no public repos required."
| Limitation | Git | CloudSync-CLI |
|---|---|---|
| Sensitive Data | Requires .gitignore hacks & external tools |
Built-in encrypted channels for .env, keys, configs |
| Large Binaries | Poor handling, bloats repos | Optimized chunking & delta compression |
| Binary Diffs | Not supported | Full delta compression with zstd/lz4 |
| Transfer Protocols | HTTPS only | SSH, SFTP, RSYNC, WebSocket, Direct Pipe |
| Real-time Sync | Manual push/pull cycles | Optional watch mode with instant sync | | P2P Sharing | Requires fork/clone | Session links with optional password protection | | Conflict Resolution | Manual 3-way merge | Visual diff + automated strategies | | Cloud-Native | Indirect integration | Direct SSH, any cloud platform | | Memory Safety | Disk-based temp files | Memory-only streams for sensitive data | | Speed | Compressed HTTPS | Raw SSH piping for maximum throughput |
CloudSync-CLI brings Git-like version control to sensitive configuration files and environment data, with enterprise-grade security and multiple transport options that Git simply wasn't designed for.
- Pure SSH2 Protocols - No middleman tracking, all traffic between your authorized keypairs
- Memory-Only Streams - Temporary files bypass disk writes, protecting sensitive keys
- SHA-256 Integrity - Every transfer verified with cryptographic checksums
- Password Protection - Optional password for shareable session links
| Protocol | Speed | Compression | Resume | Best For |
|---|---|---|---|---|
SSH-SCP |
β‘β‘β‘ | External | β | Simple transfers |
SSH-SFTP |
β‘β‘β‘ | Configurable | β | Full features |
RSYNC-DELTA |
β‘β‘β‘β‘ | Built-in | β | Large syncs |
WEBSOCKET |
β‘β‘β‘β‘ | Stream | β | Real-time sync |
DIRECT-PIPE |
β‘β‘β‘β‘β‘ | None | β | Maximum speed |
HYBRID-ZIP |
β‘β‘β‘ | High | β | Archives |
- Staging Area - Stage specific files before committing
- Commit History - Full version history with messages
- Diff Comparison - Compare any two versions
- Rollback - Revert to any previous version instantly
- Branching Model - Profile-based configuration management
- Generate shareable session links
- Password-protected sessions
- Real-time connection monitoring
- Clipboard-ready URLs
- Configurable expiration
- Local and remote port forwarding
- Background tunnel mode
- Multi-port configuration
- Verbose tunnel status
npm install -g cloudsync-cliDownload CloudSync-Setup.exe from our releases page and run the installer.
cloudsync --version
# cloudsync/1.0.0 linux-x64 node-v18.17.0# Interactive setup
cloudsync init
# Or with all options
cloudsync init \
--host your-server.com \
--user myusername \
--port 22 \
--protocol ssh \
--verbose# Stage specific files
cloudsync stage .env config.json
# Stage all files
cloudsync stage --all
# Stage by pattern
cloudsync stage --include "*.config.js,*.json"cloudsync commit "Add production environment config"# Full upload with compression
cloudsync upload --compress zip --verbose
# Upload with custom protocol
cloudsync upload --protocol rsync --exclude node_modules,.git
# Dry run preview
cloudsync upload --dry-run# Download latest
cloudsync download --latest
# Download specific version
cloudsync download --version v1234-abcd
# Download specific files
cloudsync download .env --verbose# One-time sync
cloudsync sync
# Watch mode (continuous)
cloudsync sync --watch --interval 30
# With conflict strategy
cloudsync sync --strategy local --verbose| Command | Description |
|---|---|
cloudsync init |
Initialize configuration profile |
cloudsync upload [files] |
Upload files to remote |
cloudsync download [files] |
Download files from remote |
cloudsync sync |
Bidirectional synchronization |
cloudsync port <local:remote> |
Create SSH tunnel |
cloudsync share [path] |
Generate shareable session link |
| Command | Description |
|---|---|
cloudsync stage [files] |
Stage files for commit |
cloudsync unstage [files] |
Remove from staging |
cloudsync commit [msg] |
Commit staged changes |
cloudsync history |
View commit history |
cloudsync diff [versions] |
Compare versions |
cloudsync rollback <version> |
Revert to version |
cloudsync status |
Show repository status |
cloudsync log |
View operation logs |
| Command | Description |
|---|---|
cloudsync config [key] [value] |
Manage configuration |
cloudsync doctor |
Run diagnostics |
cloudsync clone <remote> |
Clone remote workspace |
cloudsync help [topic] |
Show help |
| Flag | Description |
|---|---|
-v, --verbose |
Enable verbose output |
-q, --quiet |
Suppress messages |
-c, --config <path> |
Custom config file |
--no-color |
Disable colors |
cloudsync upload [files...]
--include <patterns> # Files to include (comma-separated)
--exclude <patterns> # Files to exclude (default: node_modules,.git,dist,build)
--message <msg> # Commit message
--all # Upload all changes
--force # Force overwrite
--compress <method> # zip|lz4|zstd (default: zip)
--chunk-size <MB> # Chunk size (default: 10)
--protocol <proto> # ssh|sftp|rsync|websocket|pipe
--verbose # Detailed progress
--dry-run # Preview only
--profile <name> # Config profilecloudsync download [files...]
--include <patterns> # Specific files to fetch
--exclude <patterns> # Skip certain files
--version <id> # Specific version
--latest # Fetch latest
--verbose # Detailed progress
--dry-run # Preview only
--profile <name> # Config profile
--output <path> # Output directorycloudsync sync
--strategy <type> # local|remote|manual
--watch # Continuous watching
--interval <seconds> # Sync interval (default: 30)
--verbose # Detailed logs
--dry-run # Preview
--profile <name> # Config profile
--include <patterns> # Files to sync
--exclude <patterns> # Files to skipcloudsync share [path]
--type <type> # file|folder|session
--port <number> # Server port (default: 3000)
--expires <minutes> # Expiration (default: 60)
--password <pwd> # Password protection
--verbose # Show details
--open # Auto-open URL
--profile <name> # Config profilecloudsync port <local:remote>
--host <hostname> # Bind host (default: 0.0.0.0)
--verbose # Show tunnel details
--background # Run in background
--profile <name> # Config profile{
"profiles": {
"default": {
"host": "your-server.com",
"user": "myusername",
"port": 22,
"key": "~/.ssh/id_rsa",
"protocol": "ssh",
"workspace": "/home/myuser/project",
"createdAt": "2024-01-15T10:30:00Z"
},
"production": {
"host": "prod.example.com",
"user": "deploy",
"protocol": "rsync"
}
},
"settings": {
"compression": "zip",
"chunkSize": 10,
"verbose": false,
"defaultProfile": "default"
}
}# List all config
cloudsync config --list
# Get specific value
cloudsync config profiles.default.host
# Set value
cloudsync config settings.compression zstd
# Use global config
cloudsync config --global settings.verbose true
# Unset value
cloudsync config --unset profiles.productionβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β CloudSync Security β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Your Local Machine β
β βββββββββββββββββββ β
β β Private Key π βββββ Encrypted Tunnel βββββββΊ β
β β (never leaves) β SSH2 β
β βββββββββββββββββββ β β
β βΌ β
β Memory-Only Streams ββββββββββββββββ€ β
β (no disk writes) β β
β βΌ β
β Remote Server (SSH or cloud) β β
β βββββββββββββββββββ Authenticated & Encrypted β
β β Public Key π ββββββββββββββββββββββββββββ β
β βββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
- Zero-Trust Architecture - Keys never leave your machine
- Memory-Only Processing - Sensitive data never touches disk
- End-to-End Encryption - SSH2 with strong cipher suites
- Integrity Verification - SHA-256 checksums on all transfers
- Session Tokens - Unique, expirable shareable links
- No Third-Party Tracking - 100% peer-to-peer
cloudsync-cli/
βββ bin/
β βββ cloudsync.js # Entry point
βββ src/
β βββ cli/
β β βββ index.js # Commander.js setup
β β βββ commands/ # Command definitions
β β βββ init.js
β β βββ upload.js
β β βββ download.js
β β βββ sync.js
β β βββ port.js
β β βββ share.js
β β βββ stage.js
β β βββ commit.js
β β βββ history.js
β β βββ diff.js
β β βββ rollback.js
β β βββ status.js
β β βββ config.js
β β βββ doctor.js
β β βββ clone.js
β β βββ log.js
β βββ transport/ # Protocol implementations
β βββ vcs/ # Version control system
β βββ utils/ # Helper functions
βββ package.json
βββ README.md
# Problem: Sensitive files need special handling
git add .env # β Danger! May commit secrets
echo ".env" >> .gitignore # β But now it's untracked
git add .env.example # β Manual workaround
# Or use git-crypt (complex setup)
git crypt init # Complex
git crypt lock # Lock when done
# Environment-specific repos (messy)
git remote add prod git@github.com:myorg/prod-configs.git# Simple and secure
cloudsync init --host your-server.com --user myuser
cloudsync stage .env config.json
cloudsync commit "Update environment config"
cloudsync upload # Encrypted, versioned, done
# Files stay private, never in Git# Sync local .env to your cloud server
cloudsync upload --include .env,config.json --exclude node_modules
# Pull latest from your cloud server
cloudsync download --latest
# Create persistent tunnel for local dev
cloudsync port 3000:3000 --background# Development profile
cloudsync init --profile dev --host dev.server.com
# Production profile
cloudsync init --profile prod --host prod.server.com
# Switch and sync
cloudsync upload --profile prod# Generate secure share link
cloudsync share --type folder . --expires 120 --password MyPass123
# Share the link with team
π http://localhost:3000/share/abc123# In CI pipeline
cloudsync download --version $COMMIT_SHA --dry-run
cloudsync download --version $COMMIT_SHARun diagnostics to identify issues:
cloudsync doctor --verbose| Issue | Solution |
|---|---|
| SSH connection fails | Run cloudsync doctor to test credentials |
| Permission denied | Check SSH key permissions: chmod 600 ~/.ssh/id_rsa |
| No files to upload | Ensure --include patterns match your files |
| Config not found | Run cloudsync init first |
Contributions are welcome! Please read our contributing guidelines before submitting PRs.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing) - Open a Pull Request
MIT License - see LICENSE for details.
- Commander.js - CLI framework
- ssh2 - SSH client
- Archiver - ZIP compression
- diff-match-patch - Text diffing