Spaces on a MacBook with an external monitor

At your desk you have two displays and a row of Spaces on each. On the road you have one. Spacepal helps with both halves: one overview and one set of shortcuts across every display while docked, a profile that switches with your displays, "Prepare to Unplug Displays" before you leave, and a saved layout it restores when you plug back in. One honest limit up front: putting windows back depends on your macOS version, explained below.

Recommended macOS settings

Working across two displays

A profile for the desk, one for the road

A profile is a full set of names, colors, notes and automations. Set up your Spaces while docked, then in Settings, Profiles save them as "Desk" and choose Use automatically with the current displays. Do the same undocked as "Laptop". Spacepal then switches profile on its own when the set of connected displays changes, and shows a short message when it does. You can also switch from the menu or with spacepal://profile/Desk.

Before you unplug

When more than one display is connected, the Spacepal menu shows Prepare to Unplug Displays (also spacepal://eject, handy on a Stream Deck key or in a Shortcut). It saves the current layout, then moves each external display's windows to the built-in display's desktop in the same position: the monitor's first desktop to the laptop's first, and so on. If the laptop has fewer desktops, the rest go to its last one. A message tells you how many windows moved and that it is safe to unplug.

When you plug back in

Spacepal keeps a separate layout for each combination of displays. With "Put windows back when an external display is reconnected" on (Settings, Windows, on by default), it restores the layout it last saw for that combination a few seconds after the display returns. With "Remember where every window is (every 5 minutes)" on, the layout is also saved regularly, and after a restart Spacepal offers to put windows back on their Spaces.

Which macOS versions can put windows back

Prepare to Unplug, the restore on reconnect, the restore after a restart, and "Apps that belong here" rules all move windows that are not in front. Spacepal does that with a direct WindowServer move, which works on macOS 14.0 to 14.4 and on macOS 26.4 and later. On other versions macOS ignores that call and those windows stay on the Space they are on. Spacepal still sets each window's saved size and position, just not its Space. Moving the front window with ⌃⌥⇧ plus a number, the menu bar, or "Move Front Window Here" in a Space's right-click menu in the overview works on every supported version, because Spacepal falls back to dragging that window by its title bar.

Other limits

Related

Written by Dan Bayer, developer of Spacepal. Last updated 2026-10-27.