Code locally. Back up to the cloud. Zero conflicts.
You write code in Cursor (or Windsurf, VS Code). You back it up with Google Drive (or iCloud, Dropbox). But running both on the same folder is a nightmare:
- Locked files: Cursor's AI can't read or save a file because Google Drive has locked it for upload.
- Endless loops: Cloud sync touches a file, triggering your dev server to hot-reload infinitely.
- Git corruption: Sync engines often conflict with
.git/index, causing your commits to fail. - Gigabytes of trash:
npm installcreates 50,000 files. Your cloud drive chokes trying to uploadnode_modules.
DevMirror acts as a bridge between your dev environment and your cloud drive. Keep two folders: one for coding, one for syncing.
~/Developer DevMirror ~/DevMirror
(no cloud sync) -> mirrors changes -> (cloud syncs this)
in real time
Your .git folder and uncommitted work are mirrored too. If your Mac crashes or your SSD dies mid-session, your work-in-progress lives on, with full git history intact. DevMirror catches what git push misses.
Get the latest DevMirror.app from Releases.
Drag it to /Applications, open it, and you're done.
git clone https://github.com/NickiAndersen/DevMirror.git
cd DevMirror
make installRequires Xcode 16+ and macOS 14+
- Zero-Interference Sync: Real-time sync via FSEvents with a 2-second debounce. Files are never copied while you're actively writing to them.
- Atomic Copies: Files are copied to a temporary location and renamed instantly. Your destination folder never sees a half-written file.
- Smart Exclusions: Automatically ignores
node_modules,build,.next,Pods,.dart_tool, and 38 other heavy folders. - Safe Archive: Accidental deletion? Deleted files aren't gone forever. They move to a local
_DevMirrorTrashfolder with 30-day retention. - Corrupted File Detection: Skips unreadable files, like unresolved iCloud placeholders.
- Native & Lightweight: Built in Swift 6.0. Runs asynchronously in your menu bar without blocking your editor or terminal.
- Open DevMirror. The first run walks you through onboarding.
- Choose your source (
~/Developer) and destination (~/DevMirror). - Click "Start Syncing".
DevMirror lives quietly in your menu bar. The colored dot shows your sync status at a glance:
| Icon | Meaning |
|---|---|
| 🟢 | Watching, everything synced |
| 🔵 | Syncing in progress |
| 🟡 | Paused |
| 🔴 | Error |
Click the icon to pause/resume, trigger a manual sync, open folders, or access settings.
| Setting | Default | Description |
|---|---|---|
| Sync frequency | Real-time | Real-time, 5 min, 15 min, 30 min, 1 hour, or manual |
| Include .git | On | Mirrors full git history and uncommitted changes |
| Deletion policy | Safe Archive | Keep deleted files 30 days / Exact mirror / Never delete |
| Exclusions | 43 patterns | Pre-configured to ignore build artifacts and package folders |
| Notifications | Errors only | Configurable alerts |
MIT. See LICENSE.