A macOS desktop app for creating complete system backups before a reset or migration. Built with Electron.
- Backs up files and folders — copies selected directories using
rsync, preserving original absolute paths - Backs up dotfiles and configs — detects and backs up
.zshrc,.gitconfig,.ssh,.aws,.kube, and more - Captures installed software — generates a Brewfile, lists VS Code extensions, npm globals, and pip packages
- Scans git repositories — warns about uncommitted changes and unpushed commits that only exist locally
- Generates restore scripts — creates a
RESTORE.shscript and step-by-stepRESTORE-STEPS.mdguide - Creates compressed archives — optionally packages the entire backup as a
.tar.zstarchive
- macOS
- Node.js (v18 or later)
- Homebrew (optional, for software capture)
rsync(included with macOS)zstd(for tar compression — install viabrew install zstd)
git clone git@github.com:devninja-in/mcp-system-backup.git
cd mcp-system-backup
npm installnpm start- Choose a backup destination — click "Choose destination folder" and select where to save the backup (e.g., an external drive)
- Add files and folders — click "Add folder" or "Add file" to select what you want to back up
- Select dotfiles — the app auto-detects common dotfiles in your home directory; check/uncheck as needed
- Configure options
- Capture installed software list — saves Brewfile, VS Code extensions, npm/pip packages
- Create tar archive — compresses the backup into a single
.tar.zstfile
- Click "Start backup" — monitor progress in the log panel
mac-backup-YYYYMMDD-HHMMSS/
├── filesystem/ # Backed-up files (preserving original paths)
├── manifest/
│ ├── Brewfile # Homebrew packages
│ ├── applications-list.txt
│ ├── vscode-extensions.txt
│ ├── npm-global.txt
│ └── pip-global.txt
├── git-status-report.txt # Git status of all repos at backup time
├── RESTORE.sh # Automated restore script
└── RESTORE-STEPS.md # Manual restore guide
cd mac-backup-YYYYMMDD-HHMMSS
sudo ./RESTORE.shThis will:
- Copy all files back to their original locations
- Install Homebrew (if missing) and restore packages from the Brewfile
- Reinstall VS Code extensions
tar --zstd -xvpf mac-backup-YYYYMMDD-HHMMSS.tar.zst
cd mac-backup-YYYYMMDD-HHMMSS
sudo ./RESTORE.shIf the backup was created with a password, decrypt it first, then extract:
# Decrypt the archive (will prompt for the password)
openssl enc -d -aes-256-cbc -pbkdf2 -in mac-backup-YYYYMMDD-HHMMSS.tar.zst.enc -out mac-backup-YYYYMMDD-HHMMSS.tar.zst
# Extract the decrypted archive
tar --zstd -xvpf mac-backup-YYYYMMDD-HHMMSS.tar.zst
# Run the restore script
cd mac-backup-YYYYMMDD-HHMMSS
sudo ./RESTORE.sh# Restore files
sudo rsync -a filesystem/ /
# Install Homebrew packages
brew bundle --file=manifest/Brewfile
# Install VS Code extensions
cat manifest/vscode-extensions.txt | xargs -L 1 code --install-extensionSee RESTORE-STEPS.md inside the backup for the full step-by-step guide.
The following directories are automatically excluded during file copy to save space:
node_modules, .venv, venv, env, __pycache__, .pytest_cache, .mypy_cache, .ruff_cache, dist, build, .next, .nuxt, target, .gradle, .DS_Store, *.pyc
MIT