Repository files navigation

Settle

Switch layouts. Keep your flow.

macOS 14+SwiftLicense: MIT

Your work is more than one app. Save complete window layouts for coding, meetings, focus, or home, then move between active layouts in seconds with Option-Tab.

Keyboard-driven layout switcher

Hold Option-Tab to open a visual overview of the layouts active during the current Settle session. Keep pressing Tab to move forward, use Shift to move backward, and release the shortcut to restore the selected layout.

The highlighted preview is only the destination selected when you release Option. Action keys always affect the layout that is active now: C closes it, K closes unrelated visible windows, M minimizes those windows, U updates the active layout, and R restores it. The overlay identifies the affected active layout explicitly, and every navigation or action shortcut is configurable in Settings.

Settle layout switcher preview

Multi-display support

Settle records which display contains each window and its proportional position inside that display. Layouts remain usable after monitors are rearranged, resized, reconfigured, or temporarily disconnected. If a saved display is unavailable, Settle moves the affected window to a usable position on the main display.

Highlights

  • Native macOS app built with SwiftUI and AppKit
  • Save named layouts for the current desktop, with app-based name suggestions
  • Update a layout in place without renaming it; browser tab URLs require explicit confirmation
  • Keep newly saved or updated layouts active immediately in their current Space
  • Restore layouts without taking matching app windows away from other Spaces
  • Restore front-to-back layering consistently using native macOS application window groups
  • Smarter Safari and Chrome recovery: targets their New Window command before using the standard fallback for other apps
  • Optionally save and reopen normal Safari and Chrome tab URLs per layout (requires macOS Automation permission)
  • Clear feedback when an app saved in a layout is no longer installed
  • Keep the menu panel open when a layout cannot be fully restored
  • Close every window belonging to the active layout directly from its row menu
  • Native Settings for launch behavior, layout switching, extra-window handling, and permissions
  • Choose whether successful layout restores leave, minimize, or close unrelated visible windows in the current Space
  • Optional launch at login using the macOS login item service
  • Optional automatic restore of an explicitly selected default layout at macOS login
  • Active layout highlighting that follows the current Space
  • Session-scoped indicators for layouts recently detected in other Spaces
  • Best-effort navigation to a remembered layout Space by clicking its row
  • Unified action bar with primary save, contextual window actions, and a clearly separated destructive quit action
  • Dedicated pinned layouts section with manual drag-to-reorder
  • Layout snapshot previews inside the saved layouts list
  • Internal overlays remain visible through transient macOS focus changes
  • Contextual actions for restored layouts:
    • quit all apps
    • close non-layout windows
    • minimize non-layout windows
  • Localized UI and website in:
    • English
    • Spanish
    • Catalan
    • French
    • German

Requirements

  • macOS 14.0+
  • Accessibility permission enabled for Settle
  • Screen Recording permission is optional and used only for layout preview thumbnails
  • Apple Silicon is the primary target, with universal macOS builds available in releases

Install

Direct download

Download the latest signed DMG from GitHub Releases:

Homebrew

brew install --cask olerida/tap/settle

Accessibility permission

Settle needs macOS Accessibility permission to:

  • read visible window titles
  • detect app windows
  • move and resize windows during restore
  • observe the configured global layout-switcher shortcut

Automatic layout restore also requires Accessibility permission. A signed embedded login helper starts Settle at login and requests the restore once; opening Settle manually never restores the default layout. If access is unavailable during login restore, the restore is skipped without changing the selected default layout.

Settle does not use Accessibility to read document contents, passwords, browser page contents, or keystrokes.

The layout switcher shortcut can be changed, disabled, or restored to Option-Tab in Settings. While holding it, the default action keys are C to close the active layout, K to close unrelated visible windows, M to minimize them, U to update the active layout, and R to restore it in the current Space. These actions always target the current active layout, never the highlighted switcher preview. Every action key is configurable. On macOS, the default Option-Tab shortcut may replace Safari's keyboard focus navigation while Settle is running.

Screen Recording access is used only to capture layout preview thumbnails. Settle does not capture system audio.

If you enable Accessibility and the app still shows the warning, quit and reopen Settle.

Website

Build from source

App

Open Settle.xcodeproj in Xcode and run the Settle scheme on My Mac.

Command-line debug build:

xcodebuild -project Settle.xcodeproj -scheme Settle -configuration Debug build

Website

cd web
npm install
npm run build

Project structure

  • Settle/: macOS app source
  • SettleTests/: unit tests
  • web/: public Astro website
  • CHANGELOG.md: release notes
  • AGENTS.md: project-specific agent instructions

Recent release

Current documented release: v1.11.0

See CHANGELOG.md for release history.

Development notes

  • The app persists layouts locally as versioned JSON.
  • Cross-Space indicators are session-scoped and best-effort because macOS does not expose stable Space identifiers through public APIs.
  • Layout restore treats visible windows as authoritative for the current Space; if an app cannot create a missing local window, Settle leaves its other-Space windows untouched and reports the unresolved app by name.
  • Multi-display layouts identify each captured display, preserve proportional placement inside its visible frame, and verify the final window position and size after restoration.
  • Releases are published as signed DMG assets on GitHub.
  • The Homebrew cask is maintained separately in ~/Documents/homebrew-tap.
  • Backlog work is tracked in GitHub Issues, not in repository TODO files.

License

Settle is distributed under the terms of the MIT License.

About

Native macOS menu bar app to save and restore window layouts.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Settle

Switch layouts. Keep your flow.

macOS 14+SwiftLicense: MIT

Your work is more than one app. Save complete window layouts for coding, meetings, focus, or home, then move between active layouts in seconds with Option-Tab.

Keyboard-driven layout switcher

Hold Option-Tab to open a visual overview of the layouts active during the current Settle session. Keep pressing Tab to move forward, use Shift to move backward, and release the shortcut to restore the selected layout.

The highlighted preview is only the destination selected when you release Option. Action keys always affect the layout that is active now: C closes it, K closes unrelated visible windows, M minimizes those windows, U updates the active layout, and R restores it. The overlay identifies the affected active layout explicitly, and every navigation or action shortcut is configurable in Settings.

Settle layout switcher preview

Multi-display support

Settle records which display contains each window and its proportional position inside that display. Layouts remain usable after monitors are rearranged, resized, reconfigured, or temporarily disconnected. If a saved display is unavailable, Settle moves the affected window to a usable position on the main display.

Highlights

  • Native macOS app built with SwiftUI and AppKit
  • Save named layouts for the current desktop, with app-based name suggestions
  • Update a layout in place without renaming it; browser tab URLs require explicit confirmation
  • Keep newly saved or updated layouts active immediately in their current Space
  • Restore layouts without taking matching app windows away from other Spaces
  • Restore front-to-back layering consistently using native macOS application window groups
  • Smarter Safari and Chrome recovery: targets their New Window command before using the standard fallback for other apps
  • Optionally save and reopen normal Safari and Chrome tab URLs per layout (requires macOS Automation permission)
  • Clear feedback when an app saved in a layout is no longer installed
  • Keep the menu panel open when a layout cannot be fully restored
  • Close every window belonging to the active layout directly from its row menu
  • Native Settings for launch behavior, layout switching, extra-window handling, and permissions
  • Choose whether successful layout restores leave, minimize, or close unrelated visible windows in the current Space
  • Optional launch at login using the macOS login item service
  • Optional automatic restore of an explicitly selected default layout at macOS login
  • Active layout highlighting that follows the current Space
  • Session-scoped indicators for layouts recently detected in other Spaces
  • Best-effort navigation to a remembered layout Space by clicking its row
  • Unified action bar with primary save, contextual window actions, and a clearly separated destructive quit action
  • Dedicated pinned layouts section with manual drag-to-reorder
  • Layout snapshot previews inside the saved layouts list
  • Internal overlays remain visible through transient macOS focus changes
  • Contextual actions for restored layouts:
    • quit all apps
    • close non-layout windows
    • minimize non-layout windows
  • Localized UI and website in:
    • English
    • Spanish
    • Catalan
    • French
    • German

Requirements

  • macOS 14.0+
  • Accessibility permission enabled for Settle
  • Screen Recording permission is optional and used only for layout preview thumbnails
  • Apple Silicon is the primary target, with universal macOS builds available in releases

Install

Direct download

Download the latest signed DMG from GitHub Releases:

Homebrew

brew install --cask olerida/tap/settle

Accessibility permission

Settle needs macOS Accessibility permission to:

  • read visible window titles
  • detect app windows
  • move and resize windows during restore
  • observe the configured global layout-switcher shortcut

Automatic layout restore also requires Accessibility permission. A signed embedded login helper starts Settle at login and requests the restore once; opening Settle manually never restores the default layout. If access is unavailable during login restore, the restore is skipped without changing the selected default layout.

Settle does not use Accessibility to read document contents, passwords, browser page contents, or keystrokes.

The layout switcher shortcut can be changed, disabled, or restored to Option-Tab in Settings. While holding it, the default action keys are C to close the active layout, K to close unrelated visible windows, M to minimize them, U to update the active layout, and R to restore it in the current Space. These actions always target the current active layout, never the highlighted switcher preview. Every action key is configurable. On macOS, the default Option-Tab shortcut may replace Safari's keyboard focus navigation while Settle is running.

Screen Recording access is used only to capture layout preview thumbnails. Settle does not capture system audio.

If you enable Accessibility and the app still shows the warning, quit and reopen Settle.

Website

Build from source

App

Open Settle.xcodeproj in Xcode and run the Settle scheme on My Mac.

Command-line debug build:

xcodebuild -project Settle.xcodeproj -scheme Settle -configuration Debug build

Website

cd web
npm install
npm run build

Project structure

  • Settle/: macOS app source
  • SettleTests/: unit tests
  • web/: public Astro website
  • CHANGELOG.md: release notes
  • AGENTS.md: project-specific agent instructions

Recent release

Current documented release: v1.11.0

See CHANGELOG.md for release history.

Development notes

  • The app persists layouts locally as versioned JSON.
  • Cross-Space indicators are session-scoped and best-effort because macOS does not expose stable Space identifiers through public APIs.
  • Layout restore treats visible windows as authoritative for the current Space; if an app cannot create a missing local window, Settle leaves its other-Space windows untouched and reports the unresolved app by name.
  • Multi-display layouts identify each captured display, preserve proportional placement inside its visible frame, and verify the final window position and size after restoration.
  • Releases are published as signed DMG assets on GitHub.
  • The Homebrew cask is maintained separately in ~/Documents/homebrew-tap.
  • Backlog work is tracked in GitHub Issues, not in repository TODO files.

License

Settle is distributed under the terms of the MIT License.

About

Native macOS menu bar app to save and restore window layouts.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Settle

Switch layouts. Keep your flow.

macOS 14+SwiftLicense: MIT

Your work is more than one app. Save complete window layouts for coding, meetings, focus, or home, then move between active layouts in seconds with Option-Tab.

Keyboard-driven layout switcher

Hold Option-Tab to open a visual overview of the layouts active during the current Settle session. Keep pressing Tab to move forward, use Shift to move backward, and release the shortcut to restore the selected layout.

The highlighted preview is only the destination selected when you release Option. Action keys always affect the layout that is active now: C closes it, K closes unrelated visible windows, M minimizes those windows, U updates the active layout, and R restores it. The overlay identifies the affected active layout explicitly, and every navigation or action shortcut is configurable in Settings.

Settle layout switcher preview

Multi-display support

Settle records which display contains each window and its proportional position inside that display. Layouts remain usable after monitors are rearranged, resized, reconfigured, or temporarily disconnected. If a saved display is unavailable, Settle moves the affected window to a usable position on the main display.

Highlights

  • Native macOS app built with SwiftUI and AppKit
  • Save named layouts for the current desktop, with app-based name suggestions
  • Update a layout in place without renaming it; browser tab URLs require explicit confirmation
  • Keep newly saved or updated layouts active immediately in their current Space
  • Restore layouts without taking matching app windows away from other Spaces
  • Restore front-to-back layering consistently using native macOS application window groups
  • Smarter Safari and Chrome recovery: targets their New Window command before using the standard fallback for other apps
  • Optionally save and reopen normal Safari and Chrome tab URLs per layout (requires macOS Automation permission)
  • Clear feedback when an app saved in a layout is no longer installed
  • Keep the menu panel open when a layout cannot be fully restored
  • Close every window belonging to the active layout directly from its row menu
  • Native Settings for launch behavior, layout switching, extra-window handling, and permissions
  • Choose whether successful layout restores leave, minimize, or close unrelated visible windows in the current Space
  • Optional launch at login using the macOS login item service
  • Optional automatic restore of an explicitly selected default layout at macOS login
  • Active layout highlighting that follows the current Space
  • Session-scoped indicators for layouts recently detected in other Spaces
  • Best-effort navigation to a remembered layout Space by clicking its row
  • Unified action bar with primary save, contextual window actions, and a clearly separated destructive quit action
  • Dedicated pinned layouts section with manual drag-to-reorder
  • Layout snapshot previews inside the saved layouts list
  • Internal overlays remain visible through transient macOS focus changes
  • Contextual actions for restored layouts:
    • quit all apps
    • close non-layout windows
    • minimize non-layout windows
  • Localized UI and website in:
    • English
    • Spanish
    • Catalan
    • French
    • German

Requirements

  • macOS 14.0+
  • Accessibility permission enabled for Settle
  • Screen Recording permission is optional and used only for layout preview thumbnails
  • Apple Silicon is the primary target, with universal macOS builds available in releases

Install

Direct download

Download the latest signed DMG from GitHub Releases:

Homebrew

brew install --cask olerida/tap/settle

Accessibility permission

Settle needs macOS Accessibility permission to:

  • read visible window titles
  • detect app windows
  • move and resize windows during restore
  • observe the configured global layout-switcher shortcut

Automatic layout restore also requires Accessibility permission. A signed embedded login helper starts Settle at login and requests the restore once; opening Settle manually never restores the default layout. If access is unavailable during login restore, the restore is skipped without changing the selected default layout.

Settle does not use Accessibility to read document contents, passwords, browser page contents, or keystrokes.

The layout switcher shortcut can be changed, disabled, or restored to Option-Tab in Settings. While holding it, the default action keys are C to close the active layout, K to close unrelated visible windows, M to minimize them, U to update the active layout, and R to restore it in the current Space. These actions always target the current active layout, never the highlighted switcher preview. Every action key is configurable. On macOS, the default Option-Tab shortcut may replace Safari's keyboard focus navigation while Settle is running.

Screen Recording access is used only to capture layout preview thumbnails. Settle does not capture system audio.

If you enable Accessibility and the app still shows the warning, quit and reopen Settle.

Website

Build from source

App

Open Settle.xcodeproj in Xcode and run the Settle scheme on My Mac.

Command-line debug build:

xcodebuild -project Settle.xcodeproj -scheme Settle -configuration Debug build

Website

cd web
npm install
npm run build

Project structure

  • Settle/: macOS app source
  • SettleTests/: unit tests
  • web/: public Astro website
  • CHANGELOG.md: release notes
  • AGENTS.md: project-specific agent instructions

Recent release

Current documented release: v1.11.0

See CHANGELOG.md for release history.

Development notes

  • The app persists layouts locally as versioned JSON.
  • Cross-Space indicators are session-scoped and best-effort because macOS does not expose stable Space identifiers through public APIs.
  • Layout restore treats visible windows as authoritative for the current Space; if an app cannot create a missing local window, Settle leaves its other-Space windows untouched and reports the unresolved app by name.
  • Multi-display layouts identify each captured display, preserve proportional placement inside its visible frame, and verify the final window position and size after restoration.
  • Releases are published as signed DMG assets on GitHub.
  • The Homebrew cask is maintained separately in ~/Documents/homebrew-tap.
  • Backlog work is tracked in GitHub Issues, not in repository TODO files.

License

Settle is distributed under the terms of the MIT License.

About

Native macOS menu bar app to save and restore window layouts.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Settle

Switch layouts. Keep your flow.

macOS 14+SwiftLicense: MIT

Your work is more than one app. Save complete window layouts for coding, meetings, focus, or home, then move between active layouts in seconds with Option-Tab.

Keyboard-driven layout switcher

Hold Option-Tab to open a visual overview of the layouts active during the current Settle session. Keep pressing Tab to move forward, use Shift to move backward, and release the shortcut to restore the selected layout.

The highlighted preview is only the destination selected when you release Option. Action keys always affect the layout that is active now: C closes it, K closes unrelated visible windows, M minimizes those windows, U updates the active layout, and R restores it. The overlay identifies the affected active layout explicitly, and every navigation or action shortcut is configurable in Settings.

Settle layout switcher preview

Multi-display support

Settle records which display contains each window and its proportional position inside that display. Layouts remain usable after monitors are rearranged, resized, reconfigured, or temporarily disconnected. If a saved display is unavailable, Settle moves the affected window to a usable position on the main display.

Highlights

  • Native macOS app built with SwiftUI and AppKit
  • Save named layouts for the current desktop, with app-based name suggestions
  • Update a layout in place without renaming it; browser tab URLs require explicit confirmation
  • Keep newly saved or updated layouts active immediately in their current Space
  • Restore layouts without taking matching app windows away from other Spaces
  • Restore front-to-back layering consistently using native macOS application window groups
  • Smarter Safari and Chrome recovery: targets their New Window command before using the standard fallback for other apps
  • Optionally save and reopen normal Safari and Chrome tab URLs per layout (requires macOS Automation permission)
  • Clear feedback when an app saved in a layout is no longer installed
  • Keep the menu panel open when a layout cannot be fully restored
  • Close every window belonging to the active layout directly from its row menu
  • Native Settings for launch behavior, layout switching, extra-window handling, and permissions
  • Choose whether successful layout restores leave, minimize, or close unrelated visible windows in the current Space
  • Optional launch at login using the macOS login item service
  • Optional automatic restore of an explicitly selected default layout at macOS login
  • Active layout highlighting that follows the current Space
  • Session-scoped indicators for layouts recently detected in other Spaces
  • Best-effort navigation to a remembered layout Space by clicking its row
  • Unified action bar with primary save, contextual window actions, and a clearly separated destructive quit action
  • Dedicated pinned layouts section with manual drag-to-reorder
  • Layout snapshot previews inside the saved layouts list
  • Internal overlays remain visible through transient macOS focus changes
  • Contextual actions for restored layouts:
    • quit all apps
    • close non-layout windows
    • minimize non-layout windows
  • Localized UI and website in:
    • English
    • Spanish
    • Catalan
    • French
    • German

Requirements

  • macOS 14.0+
  • Accessibility permission enabled for Settle
  • Screen Recording permission is optional and used only for layout preview thumbnails
  • Apple Silicon is the primary target, with universal macOS builds available in releases

Install

Direct download

Download the latest signed DMG from GitHub Releases:

Homebrew

brew install --cask olerida/tap/settle

Accessibility permission

Settle needs macOS Accessibility permission to:

  • read visible window titles
  • detect app windows
  • move and resize windows during restore
  • observe the configured global layout-switcher shortcut

Automatic layout restore also requires Accessibility permission. A signed embedded login helper starts Settle at login and requests the restore once; opening Settle manually never restores the default layout. If access is unavailable during login restore, the restore is skipped without changing the selected default layout.

Settle does not use Accessibility to read document contents, passwords, browser page contents, or keystrokes.

The layout switcher shortcut can be changed, disabled, or restored to Option-Tab in Settings. While holding it, the default action keys are C to close the active layout, K to close unrelated visible windows, M to minimize them, U to update the active layout, and R to restore it in the current Space. These actions always target the current active layout, never the highlighted switcher preview. Every action key is configurable. On macOS, the default Option-Tab shortcut may replace Safari's keyboard focus navigation while Settle is running.

Screen Recording access is used only to capture layout preview thumbnails. Settle does not capture system audio.

If you enable Accessibility and the app still shows the warning, quit and reopen Settle.

Website

Build from source

App

Open Settle.xcodeproj in Xcode and run the Settle scheme on My Mac.

Command-line debug build:

xcodebuild -project Settle.xcodeproj -scheme Settle -configuration Debug build

Website

cd web
npm install
npm run build

Project structure

  • Settle/: macOS app source
  • SettleTests/: unit tests
  • web/: public Astro website
  • CHANGELOG.md: release notes
  • AGENTS.md: project-specific agent instructions

Recent release

Current documented release: v1.11.0

See CHANGELOG.md for release history.

Development notes

  • The app persists layouts locally as versioned JSON.
  • Cross-Space indicators are session-scoped and best-effort because macOS does not expose stable Space identifiers through public APIs.
  • Layout restore treats visible windows as authoritative for the current Space; if an app cannot create a missing local window, Settle leaves its other-Space windows untouched and reports the unresolved app by name.
  • Multi-display layouts identify each captured display, preserve proportional placement inside its visible frame, and verify the final window position and size after restoration.
  • Releases are published as signed DMG assets on GitHub.
  • The Homebrew cask is maintained separately in ~/Documents/homebrew-tap.
  • Backlog work is tracked in GitHub Issues, not in repository TODO files.

License

Settle is distributed under the terms of the MIT License.

About

Native macOS menu bar app to save and restore window layouts.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Settle

Switch layouts. Keep your flow.

macOS 14+SwiftLicense: MIT

Your work is more than one app. Save complete window layouts for coding, meetings, focus, or home, then move between active layouts in seconds with Option-Tab.

Keyboard-driven layout switcher

Hold Option-Tab to open a visual overview of the layouts active during the current Settle session. Keep pressing Tab to move forward, use Shift to move backward, and release the shortcut to restore the selected layout.

The highlighted preview is only the destination selected when you release Option. Action keys always affect the layout that is active now: C closes it, K closes unrelated visible windows, M minimizes those windows, U updates the active layout, and R restores it. The overlay identifies the affected active layout explicitly, and every navigation or action shortcut is configurable in Settings.

Settle layout switcher preview

Multi-display support

Settle records which display contains each window and its proportional position inside that display. Layouts remain usable after monitors are rearranged, resized, reconfigured, or temporarily disconnected. If a saved display is unavailable, Settle moves the affected window to a usable position on the main display.

Highlights

  • Native macOS app built with SwiftUI and AppKit
  • Save named layouts for the current desktop, with app-based name suggestions
  • Update a layout in place without renaming it; browser tab URLs require explicit confirmation
  • Keep newly saved or updated layouts active immediately in their current Space
  • Restore layouts without taking matching app windows away from other Spaces
  • Restore front-to-back layering consistently using native macOS application window groups
  • Smarter Safari and Chrome recovery: targets their New Window command before using the standard fallback for other apps
  • Optionally save and reopen normal Safari and Chrome tab URLs per layout (requires macOS Automation permission)
  • Clear feedback when an app saved in a layout is no longer installed
  • Keep the menu panel open when a layout cannot be fully restored
  • Close every window belonging to the active layout directly from its row menu
  • Native Settings for launch behavior, layout switching, extra-window handling, and permissions
  • Choose whether successful layout restores leave, minimize, or close unrelated visible windows in the current Space
  • Optional launch at login using the macOS login item service
  • Optional automatic restore of an explicitly selected default layout at macOS login
  • Active layout highlighting that follows the current Space
  • Session-scoped indicators for layouts recently detected in other Spaces
  • Best-effort navigation to a remembered layout Space by clicking its row
  • Unified action bar with primary save, contextual window actions, and a clearly separated destructive quit action
  • Dedicated pinned layouts section with manual drag-to-reorder
  • Layout snapshot previews inside the saved layouts list
  • Internal overlays remain visible through transient macOS focus changes
  • Contextual actions for restored layouts:
    • quit all apps
    • close non-layout windows
    • minimize non-layout windows
  • Localized UI and website in:
    • English
    • Spanish
    • Catalan
    • French
    • German

Requirements

  • macOS 14.0+
  • Accessibility permission enabled for Settle
  • Screen Recording permission is optional and used only for layout preview thumbnails
  • Apple Silicon is the primary target, with universal macOS builds available in releases

Install

Direct download

Download the latest signed DMG from GitHub Releases:

Homebrew

brew install --cask olerida/tap/settle

Accessibility permission

Settle needs macOS Accessibility permission to:

  • read visible window titles
  • detect app windows
  • move and resize windows during restore
  • observe the configured global layout-switcher shortcut

Automatic layout restore also requires Accessibility permission. A signed embedded login helper starts Settle at login and requests the restore once; opening Settle manually never restores the default layout. If access is unavailable during login restore, the restore is skipped without changing the selected default layout.

Settle does not use Accessibility to read document contents, passwords, browser page contents, or keystrokes.

The layout switcher shortcut can be changed, disabled, or restored to Option-Tab in Settings. While holding it, the default action keys are C to close the active layout, K to close unrelated visible windows, M to minimize them, U to update the active layout, and R to restore it in the current Space. These actions always target the current active layout, never the highlighted switcher preview. Every action key is configurable. On macOS, the default Option-Tab shortcut may replace Safari's keyboard focus navigation while Settle is running.

Screen Recording access is used only to capture layout preview thumbnails. Settle does not capture system audio.

If you enable Accessibility and the app still shows the warning, quit and reopen Settle.

Website

Build from source

App

Open Settle.xcodeproj in Xcode and run the Settle scheme on My Mac.

Command-line debug build:

xcodebuild -project Settle.xcodeproj -scheme Settle -configuration Debug build

Website

cd web
npm install
npm run build

Project structure

  • Settle/: macOS app source
  • SettleTests/: unit tests
  • web/: public Astro website
  • CHANGELOG.md: release notes
  • AGENTS.md: project-specific agent instructions

Recent release

Current documented release: v1.11.0

See CHANGELOG.md for release history.

Development notes

  • The app persists layouts locally as versioned JSON.
  • Cross-Space indicators are session-scoped and best-effort because macOS does not expose stable Space identifiers through public APIs.
  • Layout restore treats visible windows as authoritative for the current Space; if an app cannot create a missing local window, Settle leaves its other-Space windows untouched and reports the unresolved app by name.
  • Multi-display layouts identify each captured display, preserve proportional placement inside its visible frame, and verify the final window position and size after restoration.
  • Releases are published as signed DMG assets on GitHub.
  • The Homebrew cask is maintained separately in ~/Documents/homebrew-tap.
  • Backlog work is tracked in GitHub Issues, not in repository TODO files.

License

Settle is distributed under the terms of the MIT License.

About

Native macOS menu bar app to save and restore window layouts.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Settle

Switch layouts. Keep your flow.

macOS 14+SwiftLicense: MIT

Your work is more than one app. Save complete window layouts for coding, meetings, focus, or home, then move between active layouts in seconds with Option-Tab.

Keyboard-driven layout switcher

Hold Option-Tab to open a visual overview of the layouts active during the current Settle session. Keep pressing Tab to move forward, use Shift to move backward, and release the shortcut to restore the selected layout.

The highlighted preview is only the destination selected when you release Option. Action keys always affect the layout that is active now: C closes it, K closes unrelated visible windows, M minimizes those windows, U updates the active layout, and R restores it. The overlay identifies the affected active layout explicitly, and every navigation or action shortcut is configurable in Settings.

Settle layout switcher preview

Multi-display support

Settle records which display contains each window and its proportional position inside that display. Layouts remain usable after monitors are rearranged, resized, reconfigured, or temporarily disconnected. If a saved display is unavailable, Settle moves the affected window to a usable position on the main display.

Highlights

  • Native macOS app built with SwiftUI and AppKit
  • Save named layouts for the current desktop, with app-based name suggestions
  • Update a layout in place without renaming it; browser tab URLs require explicit confirmation
  • Keep newly saved or updated layouts active immediately in their current Space
  • Restore layouts without taking matching app windows away from other Spaces
  • Restore front-to-back layering consistently using native macOS application window groups
  • Smarter Safari and Chrome recovery: targets their New Window command before using the standard fallback for other apps
  • Optionally save and reopen normal Safari and Chrome tab URLs per layout (requires macOS Automation permission)
  • Clear feedback when an app saved in a layout is no longer installed
  • Keep the menu panel open when a layout cannot be fully restored
  • Close every window belonging to the active layout directly from its row menu
  • Native Settings for launch behavior, layout switching, extra-window handling, and permissions
  • Choose whether successful layout restores leave, minimize, or close unrelated visible windows in the current Space
  • Optional launch at login using the macOS login item service
  • Optional automatic restore of an explicitly selected default layout at macOS login
  • Active layout highlighting that follows the current Space
  • Session-scoped indicators for layouts recently detected in other Spaces
  • Best-effort navigation to a remembered layout Space by clicking its row
  • Unified action bar with primary save, contextual window actions, and a clearly separated destructive quit action
  • Dedicated pinned layouts section with manual drag-to-reorder
  • Layout snapshot previews inside the saved layouts list
  • Internal overlays remain visible through transient macOS focus changes
  • Contextual actions for restored layouts:
    • quit all apps
    • close non-layout windows
    • minimize non-layout windows
  • Localized UI and website in:
    • English
    • Spanish
    • Catalan
    • French
    • German

Requirements

  • macOS 14.0+
  • Accessibility permission enabled for Settle
  • Screen Recording permission is optional and used only for layout preview thumbnails
  • Apple Silicon is the primary target, with universal macOS builds available in releases

Install

Direct download

Download the latest signed DMG from GitHub Releases:

Homebrew

brew install --cask olerida/tap/settle

Accessibility permission

Settle needs macOS Accessibility permission to:

  • read visible window titles
  • detect app windows
  • move and resize windows during restore
  • observe the configured global layout-switcher shortcut

Automatic layout restore also requires Accessibility permission. A signed embedded login helper starts Settle at login and requests the restore once; opening Settle manually never restores the default layout. If access is unavailable during login restore, the restore is skipped without changing the selected default layout.

Settle does not use Accessibility to read document contents, passwords, browser page contents, or keystrokes.

The layout switcher shortcut can be changed, disabled, or restored to Option-Tab in Settings. While holding it, the default action keys are C to close the active layout, K to close unrelated visible windows, M to minimize them, U to update the active layout, and R to restore it in the current Space. These actions always target the current active layout, never the highlighted switcher preview. Every action key is configurable. On macOS, the default Option-Tab shortcut may replace Safari's keyboard focus navigation while Settle is running.

Screen Recording access is used only to capture layout preview thumbnails. Settle does not capture system audio.

If you enable Accessibility and the app still shows the warning, quit and reopen Settle.

Website

Build from source

App

Open Settle.xcodeproj in Xcode and run the Settle scheme on My Mac.

Command-line debug build:

xcodebuild -project Settle.xcodeproj -scheme Settle -configuration Debug build

Website

cd web
npm install
npm run build

Project structure

  • Settle/: macOS app source
  • SettleTests/: unit tests
  • web/: public Astro website
  • CHANGELOG.md: release notes
  • AGENTS.md: project-specific agent instructions

Recent release

Current documented release: v1.11.0

See CHANGELOG.md for release history.

Development notes

  • The app persists layouts locally as versioned JSON.
  • Cross-Space indicators are session-scoped and best-effort because macOS does not expose stable Space identifiers through public APIs.
  • Layout restore treats visible windows as authoritative for the current Space; if an app cannot create a missing local window, Settle leaves its other-Space windows untouched and reports the unresolved app by name.
  • Multi-display layouts identify each captured display, preserve proportional placement inside its visible frame, and verify the final window position and size after restoration.
  • Releases are published as signed DMG assets on GitHub.
  • The Homebrew cask is maintained separately in ~/Documents/homebrew-tap.
  • Backlog work is tracked in GitHub Issues, not in repository TODO files.

License

Settle is distributed under the terms of the MIT License.

About

Native macOS menu bar app to save and restore window layouts.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Settle

Switch layouts. Keep your flow.

macOS 14+SwiftLicense: MIT

Your work is more than one app. Save complete window layouts for coding, meetings, focus, or home, then move between active layouts in seconds with Option-Tab.

Keyboard-driven layout switcher

Hold Option-Tab to open a visual overview of the layouts active during the current Settle session. Keep pressing Tab to move forward, use Shift to move backward, and release the shortcut to restore the selected layout.

The highlighted preview is only the destination selected when you release Option. Action keys always affect the layout that is active now: C closes it, K closes unrelated visible windows, M minimizes those windows, U updates the active layout, and R restores it. The overlay identifies the affected active layout explicitly, and every navigation or action shortcut is configurable in Settings.

Settle layout switcher preview

Multi-display support

Settle records which display contains each window and its proportional position inside that display. Layouts remain usable after monitors are rearranged, resized, reconfigured, or temporarily disconnected. If a saved display is unavailable, Settle moves the affected window to a usable position on the main display.

Highlights

  • Native macOS app built with SwiftUI and AppKit
  • Save named layouts for the current desktop, with app-based name suggestions
  • Update a layout in place without renaming it; browser tab URLs require explicit confirmation
  • Keep newly saved or updated layouts active immediately in their current Space
  • Restore layouts without taking matching app windows away from other Spaces
  • Restore front-to-back layering consistently using native macOS application window groups
  • Smarter Safari and Chrome recovery: targets their New Window command before using the standard fallback for other apps
  • Optionally save and reopen normal Safari and Chrome tab URLs per layout (requires macOS Automation permission)
  • Clear feedback when an app saved in a layout is no longer installed
  • Keep the menu panel open when a layout cannot be fully restored
  • Close every window belonging to the active layout directly from its row menu
  • Native Settings for launch behavior, layout switching, extra-window handling, and permissions
  • Choose whether successful layout restores leave, minimize, or close unrelated visible windows in the current Space
  • Optional launch at login using the macOS login item service
  • Optional automatic restore of an explicitly selected default layout at macOS login
  • Active layout highlighting that follows the current Space
  • Session-scoped indicators for layouts recently detected in other Spaces
  • Best-effort navigation to a remembered layout Space by clicking its row
  • Unified action bar with primary save, contextual window actions, and a clearly separated destructive quit action
  • Dedicated pinned layouts section with manual drag-to-reorder
  • Layout snapshot previews inside the saved layouts list
  • Internal overlays remain visible through transient macOS focus changes
  • Contextual actions for restored layouts:
    • quit all apps
    • close non-layout windows
    • minimize non-layout windows
  • Localized UI and website in:
    • English
    • Spanish
    • Catalan
    • French
    • German

Requirements

  • macOS 14.0+
  • Accessibility permission enabled for Settle
  • Screen Recording permission is optional and used only for layout preview thumbnails
  • Apple Silicon is the primary target, with universal macOS builds available in releases

Install

Direct download

Download the latest signed DMG from GitHub Releases:

Homebrew

brew install --cask olerida/tap/settle

Accessibility permission

Settle needs macOS Accessibility permission to:

  • read visible window titles
  • detect app windows
  • move and resize windows during restore
  • observe the configured global layout-switcher shortcut

Automatic layout restore also requires Accessibility permission. A signed embedded login helper starts Settle at login and requests the restore once; opening Settle manually never restores the default layout. If access is unavailable during login restore, the restore is skipped without changing the selected default layout.

Settle does not use Accessibility to read document contents, passwords, browser page contents, or keystrokes.

The layout switcher shortcut can be changed, disabled, or restored to Option-Tab in Settings. While holding it, the default action keys are C to close the active layout, K to close unrelated visible windows, M to minimize them, U to update the active layout, and R to restore it in the current Space. These actions always target the current active layout, never the highlighted switcher preview. Every action key is configurable. On macOS, the default Option-Tab shortcut may replace Safari's keyboard focus navigation while Settle is running.

Screen Recording access is used only to capture layout preview thumbnails. Settle does not capture system audio.

If you enable Accessibility and the app still shows the warning, quit and reopen Settle.

Website

Build from source

App

Open Settle.xcodeproj in Xcode and run the Settle scheme on My Mac.

Command-line debug build:

xcodebuild -project Settle.xcodeproj -scheme Settle -configuration Debug build

Website

cd web
npm install
npm run build

Project structure

  • Settle/: macOS app source
  • SettleTests/: unit tests
  • web/: public Astro website
  • CHANGELOG.md: release notes
  • AGENTS.md: project-specific agent instructions

Recent release

Current documented release: v1.11.0

See CHANGELOG.md for release history.

Development notes

  • The app persists layouts locally as versioned JSON.
  • Cross-Space indicators are session-scoped and best-effort because macOS does not expose stable Space identifiers through public APIs.
  • Layout restore treats visible windows as authoritative for the current Space; if an app cannot create a missing local window, Settle leaves its other-Space windows untouched and reports the unresolved app by name.
  • Multi-display layouts identify each captured display, preserve proportional placement inside its visible frame, and verify the final window position and size after restoration.
  • Releases are published as signed DMG assets on GitHub.
  • The Homebrew cask is maintained separately in ~/Documents/homebrew-tap.
  • Backlog work is tracked in GitHub Issues, not in repository TODO files.

License

Settle is distributed under the terms of the MIT License.

About

Native macOS menu bar app to save and restore window layouts.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Settle

Switch layouts. Keep your flow.

macOS 14+SwiftLicense: MIT

Your work is more than one app. Save complete window layouts for coding, meetings, focus, or home, then move between active layouts in seconds with Option-Tab.

Keyboard-driven layout switcher

Hold Option-Tab to open a visual overview of the layouts active during the current Settle session. Keep pressing Tab to move forward, use Shift to move backward, and release the shortcut to restore the selected layout.

The highlighted preview is only the destination selected when you release Option. Action keys always affect the layout that is active now: C closes it, K closes unrelated visible windows, M minimizes those windows, U updates the active layout, and R restores it. The overlay identifies the affected active layout explicitly, and every navigation or action shortcut is configurable in Settings.

Settle layout switcher preview

Multi-display support

Settle records which display contains each window and its proportional position inside that display. Layouts remain usable after monitors are rearranged, resized, reconfigured, or temporarily disconnected. If a saved display is unavailable, Settle moves the affected window to a usable position on the main display.

Highlights

  • Native macOS app built with SwiftUI and AppKit
  • Save named layouts for the current desktop, with app-based name suggestions
  • Update a layout in place without renaming it; browser tab URLs require explicit confirmation
  • Keep newly saved or updated layouts active immediately in their current Space
  • Restore layouts without taking matching app windows away from other Spaces
  • Restore front-to-back layering consistently using native macOS application window groups
  • Smarter Safari and Chrome recovery: targets their New Window command before using the standard fallback for other apps
  • Optionally save and reopen normal Safari and Chrome tab URLs per layout (requires macOS Automation permission)
  • Clear feedback when an app saved in a layout is no longer installed
  • Keep the menu panel open when a layout cannot be fully restored
  • Close every window belonging to the active layout directly from its row menu
  • Native Settings for launch behavior, layout switching, extra-window handling, and permissions
  • Choose whether successful layout restores leave, minimize, or close unrelated visible windows in the current Space
  • Optional launch at login using the macOS login item service
  • Optional automatic restore of an explicitly selected default layout at macOS login
  • Active layout highlighting that follows the current Space
  • Session-scoped indicators for layouts recently detected in other Spaces
  • Best-effort navigation to a remembered layout Space by clicking its row
  • Unified action bar with primary save, contextual window actions, and a clearly separated destructive quit action
  • Dedicated pinned layouts section with manual drag-to-reorder
  • Layout snapshot previews inside the saved layouts list
  • Internal overlays remain visible through transient macOS focus changes
  • Contextual actions for restored layouts:
    • quit all apps
    • close non-layout windows
    • minimize non-layout windows
  • Localized UI and website in:
    • English
    • Spanish
    • Catalan
    • French
    • German

Requirements

  • macOS 14.0+
  • Accessibility permission enabled for Settle
  • Screen Recording permission is optional and used only for layout preview thumbnails
  • Apple Silicon is the primary target, with universal macOS builds available in releases

Install

Direct download

Download the latest signed DMG from GitHub Releases:

Homebrew

brew install --cask olerida/tap/settle

Accessibility permission

Settle needs macOS Accessibility permission to:

  • read visible window titles
  • detect app windows
  • move and resize windows during restore
  • observe the configured global layout-switcher shortcut

Automatic layout restore also requires Accessibility permission. A signed embedded login helper starts Settle at login and requests the restore once; opening Settle manually never restores the default layout. If access is unavailable during login restore, the restore is skipped without changing the selected default layout.

Settle does not use Accessibility to read document contents, passwords, browser page contents, or keystrokes.

The layout switcher shortcut can be changed, disabled, or restored to Option-Tab in Settings. While holding it, the default action keys are C to close the active layout, K to close unrelated visible windows, M to minimize them, U to update the active layout, and R to restore it in the current Space. These actions always target the current active layout, never the highlighted switcher preview. Every action key is configurable. On macOS, the default Option-Tab shortcut may replace Safari's keyboard focus navigation while Settle is running.

Screen Recording access is used only to capture layout preview thumbnails. Settle does not capture system audio.

If you enable Accessibility and the app still shows the warning, quit and reopen Settle.

Website

Build from source

App

Open Settle.xcodeproj in Xcode and run the Settle scheme on My Mac.

Command-line debug build:

xcodebuild -project Settle.xcodeproj -scheme Settle -configuration Debug build

Website

cd web
npm install
npm run build

Project structure

  • Settle/: macOS app source
  • SettleTests/: unit tests
  • web/: public Astro website
  • CHANGELOG.md: release notes
  • AGENTS.md: project-specific agent instructions

Recent release

Current documented release: v1.11.0

See CHANGELOG.md for release history.

Development notes

  • The app persists layouts locally as versioned JSON.
  • Cross-Space indicators are session-scoped and best-effort because macOS does not expose stable Space identifiers through public APIs.
  • Layout restore treats visible windows as authoritative for the current Space; if an app cannot create a missing local window, Settle leaves its other-Space windows untouched and reports the unresolved app by name.
  • Multi-display layouts identify each captured display, preserve proportional placement inside its visible frame, and verify the final window position and size after restoration.
  • Releases are published as signed DMG assets on GitHub.
  • The Homebrew cask is maintained separately in ~/Documents/homebrew-tap.
  • Backlog work is tracked in GitHub Issues, not in repository TODO files.

License

Settle is distributed under the terms of the MIT License.

About

Native macOS menu bar app to save and restore window layouts.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages