A macOS menu bar app for saving and restoring window layouts.
- Save window layouts - Capture positions and sizes of all open windows
- Restore layouts - Return windows to their saved positions with one click
- Multi-monitor support - Handles windows across multiple displays
- Smart window matching - Matches windows even when titles change dynamically
- Auto-launch apps - Launches closed apps and reopens windows when restoring
- Edit layouts - Open layout files in your default JSON editor
- Start at login - Optional automatic startup
- macOS 13.0 or later
- Accessibility permission (prompted on first use)
brew tap luckfamousa/tap
brew install --cask recallDownload the latest release from GitHub Releases and move Recall.app to /Applications.
git clone https://github.com/luckfamousa/Recall.git
cd Recall
./Scripts/build-app.sh
cp -r .build/Recall.app /Applications/Since Recall is not notarized, macOS will show a warning on first launch. To open anyway:
- Right-click
Recall.appin Finder - Select Open from the context menu
- Click Open in the dialog
Or via Terminal:
xattr -cr /Applications/Recall.appOn first run, Recall will request Accessibility permission. Grant access in:
System Settings > Privacy & Security > Accessibility
Recall lives in your menu bar with a window grid icon.
- Arrange your windows as desired
- Click the menu bar icon
- Select Save Current Layout...
- Enter a name and click Save
- Click the menu bar icon
- Hover over Restore
- Select the layout to restore
- Delete - Remove saved layouts
- Edit - Open layout JSON in your default editor
Layouts are stored in ~/Library/Application Support/Recall/layouts/
Recall uses the macOS Accessibility API to:
- Enumerate windows from running applications
- Read window positions and sizes
- Move and resize windows during restore
Window matching uses multiple strategies:
- Exact title match
- Stable title match (ignores dynamic suffixes)
- Partial title match
- Window index fallback
Recall/
├── Package.swift
├── Sources/Recall/
│ ├── main.swift
│ ├── AppDelegate.swift
│ ├── Models/
│ │ └── Layout.swift
│ ├── Services/
│ │ ├── WindowManager.swift
│ │ ├── LayoutStorage.swift
│ │ └── LoginItemManager.swift
│ └── UI/
│ └── MenuBarController.swift
├── Resources/
│ └── Info.plist
└── Scripts/
├── build-app.sh
└── update-app.sh
# Debug build
swift build
# Release build
swift build -c release
# Create app bundle
./Scripts/build-app.sh
# Update binary only (preserves TCC authorization)
./Scripts/update-app.shDebug logs are written to ~/recall_debug.log
# Watch logs in real-time
tail -f ~/recall_debug.logMIT