VasariSync
Sync git-ignored files across devices via Google Drive
VasariSync is a VS Code extension that helps teams and individuals synchronize git-ignored files (like .env, configuration files, credentials) across multiple devices using Google Drive. Named after the Vasari Corridor, it creates a secure bridge for files that shouldn't be in version control but need to be shared.
Features
- 🔄 Automatic Sync: File changes are automatically uploaded to Google Drive and downloaded on other devices
- ⚡ Conflict Detection: Smart conflict resolution with three modes (warn/auto/manual)
- 📴 Offline Support: Queue system ensures changes sync when connection returns
- 📚 Version History: Keep up to 3 previous versions of each file with easy restoration
- 🎯 Git-Aware: Only syncs files that are git-ignored (safe by design)
- 👥 Multi-Device: Seamlessly sync the same project across laptops, desktops, and workstations
- 🔍 Transparent: Sidebar view shows sync status for all files in real-time
- ⚙️ Project-Scoped: Settings are per-project, not per-device
Screenshots
Screenshots coming soon in future releases
Requirements
- VS Code: Version 1.107.0 or higher
- Git Repository: Project must have a git remote URL (used as project identifier)
- Google Account: Any Google account with Drive access
- OAuth Credentials: You must create your own Google Cloud project and OAuth credentials (see Setup below)
Installation
- Install from VS Code Marketplace (search for "VasariSync")
- Follow the setup instructions below to configure OAuth credentials
Setup
Step 1: Create Google Cloud OAuth Credentials
VasariSync requires you to create your own OAuth credentials for security reasons:
- Go to Google Cloud Console
- Create a new project (or select existing)
- Enable the Google Drive API:
- Navigate to "APIs & Services" > "Library"
- Search for "Google Drive API"
- Click "Enable"
- Create OAuth 2.0 credentials:
- Go to "APIs & Services" > "Credentials"
- Click "Create Credentials" > "OAuth client ID"
- Application type: Desktop app
- Name: "VasariSync"
- Click "Create"
- Download or copy the Client ID and Client Secret
- Open VS Code Settings (File > Preferences > Settings)
- Search for "VasariSync"
- Enter your OAuth credentials:
- Google Client ID: Paste your Client ID
- Google Client Secret: Paste your Client Secret
Alternative: Create a .env file in your project root:
GOOGLE_CLIENT_ID=your-client-id.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=your-client-secret
Step 3: Start Syncing
- Open a project with a git remote URL
- Run command:
VasariSync: Configure Files to Sync
- Select files/folders to sync (only git-ignored files shown)
- Run command:
VasariSync: Connect Google Drive
- Authorize in browser
- Sync begins automatically!
Usage
Commands
Access via Command Palette (Ctrl+Shift+P / Cmd+Shift+P):
- Configure Files to Sync: Select which files/folders to sync
- Connect Google Drive: Authenticate with Google
- Sync Now: Manually trigger sync
- Download Synced Files: Pull files from Drive (useful for new devices)
- Resolve Conflict: Handle conflicted files
- Retry Pending Uploads: Retry failed uploads from offline queue
- Compare File Versions: View version history
- Restore File Version: Restore a previous version
The VasariSync sidebar (in Explorer view) shows:
- All synced files with status icons
- Conflict indicators
- Last sync timestamp
- Quick actions (sync, resolve conflicts)
Status Bar
The status bar shows current sync state:
- ✅ Synced
- 🔄 Syncing
- ⚠️ Conflicts
- 📴 Offline (queued)
- ❌ Error
How It Works
- Project Detection: Uses git remote URL as unique project identifier
- File Selection: You choose which git-ignored files/folders to sync
- Upload: Changes are uploaded to a private folder in your Google Drive
- Manifest: A manifest file tracks file metadata, timestamps, and versions
- Download: Other devices detect changes and download automatically
- Conflicts: If same file modified on multiple devices, conflict resolution kicks in
Configuration
Available settings (all optional):
- Sync Debounce (ms): Wait time after file change before syncing (default: 3000)
- File Size Warning (MB): Warn when file exceeds size (default: 10)
- File Size Block (MB): Block sync for files over size (default: 100)
- Device Name: Custom name for this device (defaults to hostname)
Known Limitations (Beta Release)
⚠️ This is a beta release. Use with caution on important projects.
- Manual OAuth Setup: Requires creating Google Cloud project (not one-click)
- No Encryption: Files are stored in plaintext on Google Drive (encryption planned for Phase 5)
- File Size Limits: Google Drive API has rate limits and quotas
- Git Required: Only works in git repositories with remote URLs
Troubleshooting
"No git remote found"
- Ensure your project has a git remote:
git remote -v
- Add a remote if missing:
git remote add origin <url>
"Authentication failed"
- Verify OAuth credentials in VS Code settings
- Ensure Drive API is enabled in Google Cloud Console
- Try disconnecting and reconnecting
"File won't sync"
- Check file is git-ignored:
git check-ignore <file>
- Check file size doesn't exceed limits
- Check status bar for error messages
Conflicts
- Choose resolution mode in settings: warn/auto/manual
- Use "Resolve Conflict" command to handle manually
- Compare versions with "Compare File Versions"
Documentation
For detailed documentation, see the /docs folder:
Privacy & Security
- Your Credentials: You use your own Google Cloud OAuth credentials
- Your Drive: Files are stored in your personal Google Drive (not our servers)
- Permissions: Extension only requests
drive.file scope (files it creates)
- No Tracking: No analytics, no telemetry, no data collection
- Open Source: Full source code available for audit
Roadmap
- ✅ Phase 1-4: Core sync, conflicts, offline, versioning (COMPLETE)
- 🔜 Phase 5: File encryption (AES-256), error handling improvements
- 🔜 Phase 6: Comprehensive testing, performance optimization
- 🔮 Future: Shared team sync, selective sync, compression
Contributing
Contributions welcome! Please file issues at:
https://github.com/AndrewJacop/vasari-sync/issues
License
MIT License - see LICENSE
Changelog
See CHANGELOG.md for release notes.
Made with ❤️ for developers who need to sync secrets across devices