Professional rsync GUI for macOS - Beautiful, comprehensive, and powerful file synchronization with AI-powered insights.
A modern, open-source alternative to the discontinued RsyncOSX.
Download the latest release: RsyncGUI v1.7.0
Or build from source (see below).
If you're coming from RsyncOSX (discontinued), RsyncGUI offers:
- Modern SwiftUI interface with glassmorphic design
- Real-time transfer progress with speed and ETA
- Native Apple Silicon support
- Active development and maintenance
- Free and open source (MIT License)
30 findings resolved across CRITICAL, HIGH, MEDIUM, LOW, and INFO severities:
Critical Fixes:
- Command Injection Prevention: rsync executor now uses direct
Process.argumentsarray instead of shell string interpolation, eliminating injection vectors in source/destination paths - XML Injection Prevention: Schedule plist generation uses
PropertyListSerializationinstead of manual XML string building, preventing injection via job names or paths - Shell Escaping: Schedule manager properly shell-escapes all rsync arguments with single-quote wrapping for launchd plist commands
High Fixes:
- Job Import Validation: Imported jobs are validated for empty/whitespace-only names, sources, and destinations before being accepted
- Filter Rule Injection: Filter patterns reject control characters to prevent rsync argument injection
- Main Thread Safety: rsync version detection moved to async background execution, preventing UI freezes
- Input Validation: Job editor validates source/destination paths before allowing save
- Thread Safety: Reordered process handler cleanup to prevent use-after-nil crashes
- SSH Key Path Safety: SSH command built with array-based construction instead of string interpolation
- Audit Logging: All job mutations (add, update, delete, reorder) logged via NSLog for traceability
Medium Fixes:
- Resource Cleanup: Pipe file handles properly closed with
deferblocks in rsync executor and AI backend - Configurable Paths: Rsync binary path configurable via Settings instead of hardcoded
- Thread Safety: Widget data sync serialized with dedicated
DispatchQueueto prevent race conditions - Numeric Validation: Job editor clamps negative values on numeric fields
Low & Info Fixes:
- Eliminated force unwraps in ExecutionHistory, JobHistoryTabView, and SettingsView with
guard letpatterns - Extracted magic numbers to named constants (blob sizes, animation durations, delays)
- Implemented "Locate" button in AI Insights to reveal files in Finder
- Moved mid-file
import AppKitto proper file-level location - Documented async bridging pattern for process execution
Monitor your backups at a glance from your desktop:
- Three Widget Sizes: Small, Medium, and Large widgets for Notification Center
- Backup Health Score: Visual health grade (A-F) with percentage score
- Last Sync Status: See when your last sync ran and its result
- Next Scheduled Sync: Know when your next backup will run
- Jobs with Errors: Quick view of any jobs that need attention
- Recent Activity: Track your most recent sync operations (Large widget)
Widget Features:
- Real-time updates after each sync operation
- Auto-refresh every 15 minutes
- Color-coded status indicators (green=success, red=failed, orange=partial)
- Tap widget to open RsyncGUI app
Adding the Widget:
- Right-click on your desktop
- Select "Edit Widgets..."
- Search for "RsyncGUI"
- Drag your preferred size to the desktop
10 intelligent features to help manage your backups:
- Smart Error Diagnosis - Analyzes rsync errors and provides actionable fixes with specific commands
- Change Summary - Human-readable summaries of sync operations ("Added 50 photos, Updated 10 documents")
- Anomaly Detection - Detects ransomware patterns, mass deletions, and unusual file activity
- Smart Scheduling - Analyzes your sync history to recommend optimal backup times
- Storage Prediction - Predicts when destination drives will run out of space
- Intelligent Exclusions - Suggests files/folders to exclude (node_modules, DerivedData, etc.)
- Natural Language Job Creation - Create jobs by describing them in plain English ("Backup my documents to iCloud daily")
- Backup Health Score - Overall grade (A-F) with detailed metrics for coverage, frequency, redundancy
- Recovery Assistant - Search your backup history to find and recover specific files
- Sensitive File Detection - Warns about credentials, SSH keys, API keys, and other secrets
Access AI Insights from the sidebar:
- Click "AI Insights" in the sidebar
- View your Backup Health Score with recommendations
- Create jobs using natural language
- Scan for security risks before syncing
- Fan-out: Sync one source to multiple destinations (backup)
- Fan-in: Sync multiple sources to one destination (consolidate)
- Full Mesh: Sync all sources to all destinations
- Parallel Execution: Run syncs simultaneously for speed
- Pre/Post Scripts: Run custom scripts before and after syncs
Sync directly to iCloud Drive with one click:
- Native Integration: iCloud Drive as a destination option
- One-Click Setup: Button to select iCloud Drive root folder
- Path Validation: Automatic verification that iCloud Drive is enabled
- Seamless Sync: Rsync handles iCloud Drive like any local folder
- Auto-Detection: Validates iCloud Drive availability before sync
Usage:
- Create new sync job
- Select "iCloud Drive" as destination type
- Click "iCloud Drive" button to set root folder
- Or specify subfolder:
~/Library/Mobile Documents/com~apple~CloudDocs/Backups - Run sync—files automatically sync to iCloud
Benefits:
- Automatic cloud backup with rsync reliability
- Files available on all your Macs and iOS devices
- No additional cloud service needed (included with iCloud)
- Use existing iCloud storage quota
- Stunning animated progress display optimized for huge syncs (millions of files)
- Real-time statistics: speed, ETA (Estimated Time of Arrival), files transferred, data transferred
- Smooth animations and gradient effects
- Current file display
- 100+ rsync options organized into intuitive categories
- All transfer, preserve, filter, and advanced options
- Visual organization: Basic, Transfer, Preserve, Filters, Advanced, Schedule tabs
- launchd integration - runs even when app is closed
- Frequencies: Hourly, Daily, Weekly, Monthly, Custom cron
- Run at system startup option
- Native macOS scheduling
- SSH authentication with public key support
- Secure credential storage (macOS Keychain)
- Remote-to-local, local-to-remote, remote-to-remote syncs
- Connection testing
- Native iCloud Drive destination - Sync directly to iCloud
- One-click setup - Button to select iCloud Drive root
- Path validation - Ensures iCloud Drive is enabled and accessible
- Automatic sync - Files available on all your devices
- No extra cost - Uses your existing iCloud storage
- Backup Health Score - Overall grade with detailed recommendations
- Smart Error Diagnosis - Understand and fix rsync errors
- Anomaly Detection - Ransomware, mass deletion alerts
- Natural Language Jobs - Create jobs by describing them
- Storage Prediction - Know when drives will fill up
- Sensitive File Scanner - Find credentials before backing up
- Intelligent Exclusions - Smart suggestions for files to skip
- Recovery Search - Find files in your backup history
- macOS Widget - Monitor backups from Notification Center
- Three sizes - Small, Medium, and Large widgets
- Health Score - Visual backup health at a glance
- Status Display - Last sync, next scheduled, errors
- Recent Activity - Track recent operations (Large)
- Multiple sources - Sync from multiple folders
- Multiple destinations - Backup to multiple locations
- Sync modes - Fan-out, Fan-in, Full Mesh
- Parallel execution - Faster backups to multiple destinations
- Pre/Post scripts - Custom automation
- Save unlimited sync jobs
- Duplicate jobs for quick setup
- Job statistics tracking
- Enable/disable jobs
- Persistent storage
- Preview changes before executing
- See what will be transferred, deleted, or updated
- Risk-free testing
Beautiful job management with sidebar navigation and detailed job view.
Stunning real-time progress visualization for huge syncs:
- Animated gradient progress circle
- Real-time transfer statistics
- Speed and ETA display
- Current file indicator
Comprehensive rsync option editor with organized tabs:
- Basic configuration
- Transfer options
- Preserve attributes
- Filter patterns
- Advanced settings
- Schedule configuration
- No Shell Interpolation: rsync commands use
Process.argumentsarray, preventing shell injection via paths or filenames - Shell Escaping: Scheduled commands use proper single-quote escaping (
'\\''pattern) for all arguments - Filter Sanitization: Filter patterns reject control characters to prevent rsync argument injection
- Input Validation: Job editor validates source/destination paths; import validates all job fields
- Audit Logging: All job mutations (add, update, delete, reorder) logged via NSLog for traceability
- Audit Logging: All user-defined pre/post scripts are logged via NSLog before execution, including the script path (truncated to 200 chars)
- Trust Warning: The job editor displays a prominent warning that scripts run with user privileges
- Environment Variables Only: Scripts receive data via environment variables (JOB_NAME, JOB_STATUS, FILES_TRANSFERRED), not via shell interpolation
- PropertyListSerialization: Schedule plists generated using Apple's serialization API, preventing XML injection
- Safe Plist Generation: No user-supplied values interpolated directly into XML strings
- Keychain Storage: SSH credentials stored in macOS Keychain
- No Plaintext Secrets: API keys and passwords never written to disk in plaintext
- Sensitive File Detection: AI Insights scanner warns about credentials, SSH keys, and API keys before syncing
- SSH Key Path Safety (v1.7.0): SSH commands built with array-based construction instead of string interpolation
- SSH Transport: Remote syncs use SSH with public key authentication
- No Telemetry: No analytics or usage data transmitted externally
- Widget Data Sync: Serialized with dedicated
DispatchQueueto prevent race conditions - Process Handler Cleanup: Reordered to prevent use-after-nil crashes
- Async Version Detection: rsync version check moved off main thread to prevent UI freezes
- Download: Get the latest release from Releases
- Install: Drag RsyncGUI.app to your Applications folder
- Launch: Open RsyncGUI from Applications
-
Create a Job:
- Click "+" to create new sync job
- Name your job
- Set source path (can use ~ for home directory)
- Set destination path
- Configure rsync options
-
Run the Job:
- Click "Dry Run" to preview (recommended)
- Click "Run Now" to execute
- Watch beautiful progress visualization
-
Schedule (Optional):
- Go to Schedule tab
- Enable scheduling
- Select frequency and time
- Save job
Name: Daily Documents Backup
Source: ~/Documents
Destination: /Volumes/Backup/Documents
Options:
✓ Archive mode (-a)
✓ Verbose (-v)
✓ Compress (-z)
✓ Delete extraneous (--delete)
✓ Progress (--progress)
Schedule: Daily at 2:00 AM
Name: Photos to iCloud
Source: ~/Pictures/Photos
Destination: iCloud Drive (click "iCloud Drive" button)
Destination Type: iCloud Drive
Options:
✓ Archive mode (-a)
✓ Verbose (-v)
✓ Progress (--progress)
Schedule: Daily at 11:00 PM
Benefits:
- Files automatically available on all Macs
- Accessible from iPhone/iPad
- Built-in versioning via iCloud
- No additional cloud service needed
Name: Web Server Backup
Source: user@server.com:/var/www/html
Destination: ~/Backups/WebServer
Destination Type: Remote Server (SSH)
SSH Key: ~/.ssh/id_rsa
Options:
✓ Archive mode (-a)
✓ Compress (-z)
✓ Partial (--partial)
Schedule: Hourly
Name: Photo Library Sync
Source: ~/Pictures
Destination: /Volumes/NAS/Photos
Options:
✓ Archive mode (-a)
✓ Verbose (-v)
✗ Compress (local sync, not needed)
Exclude: *.tmp, .DS_Store, Thumbs.db
Schedule: Weekly (Sunday 3:00 AM)
- Xcode 15.0+
- macOS 13.0+ deployment target
- Swift 5.9+
git clone https://github.com/kochj23/RsyncGUI.git
cd RsyncGUI
open RsyncGUI.xcodeprojThen build in Xcode (⌘B) or from command line:
xcodebuild -project RsyncGUI.xcodeproj -scheme RsyncGUI -configuration Release build- SyncJob: Complete job configuration
- RsyncOptions: 100+ rsync options with argument generation
- ScheduleConfig: Scheduling with launchd plist generation
- ExecutionResult: Statistics and results tracking
- JobManager: Job CRUD (Create, Read, Update, Delete), execution, persistence
- RsyncExecutor: rsync command execution and real-time parsing
- ScheduleManager: launchd integration and schedule management
- AIInsightsService: AI-powered analysis, predictions, and recommendations
- AIBackendManager: AI backend configuration (local/cloud options)
- ContentView: Main app container with navigation
- JobListView: Sidebar with all jobs
- JobDetailView: Job details, statistics, actions
- JobEditorView: Comprehensive editor with tabbed interface
- ProgressView: Beautiful real-time progress visualization
- SettingsView: App preferences and configuration
- AIInsightsView: AI-powered insights dashboard with multiple tabs
- Archive, Verbose, Compress, Delete, Progress, Stats
- Recursive, Update, Partial, In-place, Remove source files
- Permissions, Owner, Group, Times, Links, ACLs (Access Control Lists), Extended attributes
- Exclude/Include patterns, Size filters, CVS (Concurrent Versions System) exclusions
- Checksums, Bandwidth limits, Timeouts, Backups, Performance tuning
- Archive mode (-a): Equivalent to -rlptgoD (recommended for most backups)
- Verbose (-v): Show detailed output
- Compress (-z): Compress during transfer (good for remote syncs)
- Delete (--delete): Remove files from destination that don't exist in source
- Partial (--partial): Keep partially transferred files (resume support)
- Checksum (-c): Use checksums instead of time/size (slower but accurate)
*.tmp # Exclude all .tmp files
.DS_Store # Exclude macOS metadata
node_modules/ # Exclude entire directories
*.log # Exclude log files
- Hourly: Runs at minute 0 of every hour
- Daily: Runs at specified time every day
- Weekly: Runs on specified day at specified time
- Monthly: Runs on specified day of month at specified time
- ✅ Large backups (external drives, NAS (Network Attached Storage))
- ✅ Remote server synchronization (SSH)
- ✅ Automated daily/weekly backups
- ✅ Photo/video library management
- ✅ Development file syncing
- ✅ Website deployment
- ✅ Mirror creation
- ✅ Incremental backups
- ❌ Real-time file watching (use other tools)
- ❌ Bi-directional sync (rsync is one-way)
- ❌ Version control (use Git/SVN)
- Check that schedule is enabled in job
- Verify job is enabled (green dot in sidebar)
- Check Console.app for launchd errors
- Look for plist in ~/Library/LaunchAgents/
- Test SSH manually:
ssh user@host - Verify SSH key path is correct
- Ensure key has correct permissions (chmod 600)
- Check ~/.ssh/known_hosts for host entry
- Disable compression for local syncs
- Use --whole-file for local syncs
- Increase block size for large files
- Reduce bandwidth limit or remove it
- Check source/destination permissions
- For owner/group preservation, may need sudo
- Use --fake-super for non-root privilege preservation
- Comprehensive security audit: 30 findings resolved (3 CRITICAL, 8 HIGH, 5 MEDIUM, 7 LOW, 2 INFO)
- Command injection prevention with Process.arguments array
- XML injection prevention with PropertyListSerialization for schedule plists
- Shell escaping for launchd scheduled commands
- Job import validation and filter rule sanitization
- Async rsync version detection (no more UI freezes)
- Thread-safe widget data sync with serial DispatchQueue
- Pipe file handle cleanup with defer blocks
- Force unwrap elimination across history and settings views
- Implemented "Locate" button for file recovery in AI Insights
- Named constants for blob sizes, animation durations, delays
- macOS Desktop Widget (Small, Medium, Large)
- Backup Health Score visualization
- Widget auto-refresh and tap-to-open
- AI-Powered Insights Dashboard (10 features)
- Multiple sources and destinations (fan-out, fan-in, full mesh)
- Pre/post script support
- Parallel execution
- iCloud Drive integration
- One-click iCloud destination setup
- Path validation
- Initial release
- Complete rsync option support (100+ options)
- Automated scheduling via launchd
- SSH remote support
- Beautiful progress visualization
-
Execution history viewer✅ v1.2.0 -
Before/after hook scripts✅ v1.5.0 -
Multi-job parallel execution✅ v1.5.0 -
Exclude pattern library✅ v1.5.0 (AI suggestions) -
AI-powered insights✅ v1.5.0 -
Security hardening audit✅ v1.7.0
- Job templates library
- Email notifications
- Bandwidth usage graphs
- Conflict resolution UI
- Menu bar app mode
- iCloud job sync
Contributions welcome! Please feel free to submit pull requests or open issues for bugs and feature requests.
- Fork the repository
- Create a feature branch
- Make your changes
- Test thoroughly
- Submit pull request
MIT License
Copyright (c) 2026 Jordan Koch
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
If you find RsyncGUI useful, please:
- ⭐ Star the repository
- 🐛 Report bugs via Issues
- 💡 Suggest features
- 📢 Share with others
Built with ❤️ by Jordan Koch
Last Updated: February 26, 2026 Status: ✅ Production Ready
| App | Description |
|---|---|
| DotSync | Configuration file synchronization across machines |
| TopGUI | macOS system monitor with real-time metrics |
| ExcelExplorer | Native macOS Excel/CSV file viewer |
| MBox-Explorer | macOS MBOX (Mailbox format) email archive viewer |
| icon-creator | App icon set generator for all Apple platforms |
Disclaimer: This is a personal project created on my own time. It is not affiliated with, endorsed by, or representative of my employer.

