Repository navigation
Releases
Releases · sammcj/put
Put v0.2.8
[0.2.8] - 2026-11-04
Fixed
- Release builds failed on the GitHub runner's Swift toolchain because the onboarding hotkey row used KeyboardShortcuts' main-actor
descriptionfrom a nonisolated context.
[0.2.7] - 2026-11-04
Added
- Per-rule control over which triggers place a window.
Automatic placement
covers display changes, wake, app launch, Put's own launch and screen-config
layout activation;Restore-all hotkeycovers the restore-all hotkey and menu
item. With both off the placement stays saved and only applies when you name
the window: the active-window hotkey, the per-app menu actions, or a layout
hotkey. put://URL commands for Raycast, Alfred, Shortcuts, Stream Deck and scripts:save-active,save-active-title,save-all,restore-active,restore-all,layout?name=…/layout?id=…,settings?tab=…. Off by default; enable in Settings → General → Automation.- Put learns a minimum window size when an app refuses to shrink to a rule's target, and asks for that size on later restores of that rule instead of drifting and retrying every time. Held in memory only.
- Automatic restores (display change, wake, app launch, queued rules) wait while Mission Control, App Exposé or Show Desktop is open, then run once it closes. Hotkey and menu restores are unaffected.
- Settings → Displays can save a display's current resolution and scaling, or every display's, into all combinations of the connected displays. This stops macOS switching resolution mid-wake when monitors come online at different times. Setups involving other displays are untouched, and backups go to
~/Library/Application Support/Put/display-backups.
Changed
- KeyboardShortcuts 2.4.0 → 3.1.0 (macOS 27 compatibility, function-key shortcuts firing while a menu is open). Saved hotkeys carry over.
- CI
actions/checkoutv6.0.2 → v7.0.1. - Screen-config layout triggers now match on display identity alone. The "Match arrangement exactly" toggle is gone: macOS assigns the built-in display a different offset relative to an external monitor on every replug, so a strict capture never matched again and the layout silently stayed on whatever was active before (often the single-display one, which then dragged every window onto the laptop screen). A match whose captured arrangement differs is logged at notice level under
automation.triggers. Existing configs still load; the old field is ignored. - Onboarding now names the macOS 27 privacy pane, "Device Control and Data Access", where Put's permission lives (it was "Accessibility" on macOS 26).
PutAutomationdeclares itsPutStoragedependency inPackage.swift; the Swift 6.4 dependency scanner in Xcode 27 warned about the missing declaration.- The saved placement
Restoreradio (size and position / size only / display
only) is now three independent toggles: size, position, display. That unlocks
combinations the radio could not express, notably size on a target display
(move the window across and resize it, keeping roughly where it sat) and a
saved position without a saved size. Position implies display, so the display
toggle is held on while position is on. Existing rules migrate to the
equivalent toggles with no change in behaviour, and configs written by this
build still open in an older one. - The rule preview only draws a window rect when the rule restores a saved
position. A size-only rule used to draw one at the saved coordinates, which it
never applies - the window stays where it stands. - An app launching no longer schedules a restore pass when the only rules
matching it are disabled or opted out of automatic placement. The retry loop
used to sleep and snapshot its way through the full backoff for a pass that
could only ever report no-match.