Skip to content

Latest commit

 

History

97 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Plugback

Plug in. Your apps come back. Nothing else moves.

Unplugged, your windows pile up on the MacBook screen. Plug back in, and Plugback returns them to their saved places on the external display — the MacBook's own window never moves.

A macOS menu bar utility that restores your target apps' windows to their saved positions when you reconnect an external screen — and touches nothing else.

Take your MacBook to the office, work on a different monitor, come home and plug back in — your home layout is scrambled. macOS only remembers the latest arrangement. Plugback keeps a profile per display, so every screen you return to comes back exactly the way you left it.

Status: pre-release. Implementation complete (M1-M5), pending on-device verification; no signed release yet. Design documents live in docs/ (currently written in Korean).

Four layouts

Choose a layout in Settings → Appearance. A · Status card is the default: restore at the top, with app selection one click away. Colors and light/dark appearance can be changed independently.

A · Status card (default)B · Quick list
Status card: restore and save at the top, saved profile status, app icons, and a button to manage target apps. Quick list: top restore controls, app search, and a compact scrollable list of target apps.
C · Space browserD · Icon board
Space browser: top restore controls and a sidebar for browsing apps saved in each Space. Icon board: top restore controls, app search, an excluded-app filter, and a grid of selectable app icons.

Native SwiftUI screenshots using a sample profile with 20 apps across three Spaces, in Sage dark mode. Browsing a Space filters the list; Restore now still restores all target apps. Excluded apps can be included again; stored app records can also be removed.

Open the interactive prototype locally to compare layouts with 8 or 20 apps, or read the design notes.

Build from source

Requires macOS 13+ and Xcode 16+. There is no signed release yet, so building it yourself is the only way to run it.

git clone git@github.com:mabyko/plugback.git
cd plugback
xcodebuild -project App/Plugback.xcodeproj -scheme Plugback \
  -configuration Release -derivedDataPath build build
ditto build/Build/Products/Release/Plugback.app /Applications/Plugback.app
open /Applications/Plugback.app

On first launch, grant Accessibility permission in System Settings > Privacy & Security > Accessibility. It is the only permission Plugback asks for, and it is what lets it read and move windows.

That build is signed to run locally, which is enough to try it out. macOS ties the Accessibility grant to the app's bundle ID and signature, so an ad-hoc signature can make you re-approve the permission after a rebuild. (Saved profiles live in a fixed path under Application Support and survive identity changes.) To keep a stable identity, add App/Config/Local.xcconfig — it is gitignored, so your identity never lands in a commit:

PLUGBACK_BUNDLE_ID = com.example.plugback.<your-handle>
PLUGBACK_BUNDLE_ID[config=Debug] = com.example.plugback.<your-handle>.dev
DEVELOPMENT_TEAM = <your-team-id>

Your team ID is in Xcode > Settings > Accounts (a free Apple ID works). Without this file the build falls back to forked.plugback.local; the canonical bundle ID is deliberately absent from the repo so that no fork can register it by accident.

Policy tests live in the Swift package; presentation-mapping tests live in an app-hosted unit test target:

swift test   # PlugbackKit — engine/controller policy
xcodebuild test -project App/Plugback.xcodeproj -scheme Plugback -destination 'platform=macOS'

Contributing

Issues and pull requests are welcome. A few things worth knowing before you open one:

  • Read CONTEXT.md first. It fixes the vocabulary — profile, target app, restore — and the code and docs use those words exactly.
  • The design documents in docs/ are written in Korean and lead the implementation. If a change alters intended behavior, update the relevant document in the same pull request.
  • Scope is a feature, not a limitation. Plugback moves the windows you asked for and nothing else; proposals that broaden that default are likely to be declined. docs/BRANDING.md explains the reasoning.
  • Commits follow Conventional Commits.

Open core

Plugback and its core package, PlugbackKit, are open source under the MIT License. The makers may also ship separate closed-source paid apps built on PlugbackKit — and under the MIT terms, so can anyone.

About

Restore your windows when you plug in — a macOS menu bar app. Plug in. Your apps come back. Nothing else moves.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages