Skip to content

alexx855/windows-snap-for-mac

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

34 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Windows Snap for Mac

Windows/Linux keyboard habits on Mac: hardcoded shortcuts, zero UI.

CI License: MIT macOS

Move windows with Control + arrow keys. Switch Dock apps with Control + 1 through 9. The app runs as a background utility with fixed shortcuts: no settings pane, menu bar item, or Dock icon during normal use.

Window placement shortcuts on macOS

Contents

At a glance

  • Window placement: left/right halves, top and bottom rows, fill, minimize/restore, and multi-display cycling.
  • Dock app switching: launch, activate, unhide, or restore pinned Dock apps by number, like Win + 19 on Windows.
  • Zero configuration: shortcuts are fixed; there is nothing to customize.
  • No analytics, no network calls, no accounts.
  • Login Start: after you open it once, macOS can start it automatically at login.

Who is this for

  • You switched from Windows or Linux and miss Control + arrow window snapping.
  • You want keyboard-driven window management without a tiling window manager or a settings app.
  • You are fine granting Accessibility so the app can perform Native Window Actions on other apps' windows.

Not a fit if you need custom shortcuts, a visible menu bar utility, or guaranteed pixel-perfect tiling. The app accepts each Native Result from macOS, including partial sizing when an app constrains its windows.

How this differs from other snap tools

Tools like Rectangle, Magnet, and Swish excel at window geometry, often with drag zones, menu bar icons, and remappable shortcuts. Windows Snap for Mac takes a narrower path:

Windows Snap for Mac Typical snap utilities
Shortcuts Fixed Control-based set User-configurable
Visible UI None during normal use Menu bar, preferences, drag targets
Dock Control + 19 Yes (Windows taskbar parity) Not usually included
Window behavior Public Accessibility APIs; accepts macOS placement results Often custom geometry or tiling
Source & distribution MIT open source; App Store planned, not live yet Varies (Rectangle is OSS; Magnet is App Store)

If you want to remap keys or snap by dragging windows to screen edges, use one of those tools. If you want a fixed Windows/Linux shortcut set with no configuration surface, start here.

Try it locally

Requirements: macOS Tahoe 26 or newer, Xcode 26+ with Swift 6.2, and XcodeGen (brew install xcodegen).

xcodegen generate
CODE_SIGN_IDENTITY=- ./scripts/build-app.sh
open "/tmp/windows-snap-for-mac-build/Windows Snap for Mac.app"

On first launch, macOS shows the native Accessibility permission prompt. Grant it under System Settings → Privacy & Security → Accessibility. Without that permission, shortcut capture does not register. The app will not swallow key presses it cannot act on.

For shortcuts to keep working across rebuilds, use a stable Developer ID signing identity instead of ad-hoc signing. See CONTRIBUTING.md.

Shortcut cheat sheet

Window placement (Control + arrow)

Shortcut What it does
Control + / Move the active window to the left or right half. Press again within 1.5 s to Display Cycle to the previous or next monitor.
Control + Restore a window minimized by Control + ; otherwise move to the top half. If already top-full-width, fill the display.
Control + Move to the bottom half (keeps the current column). If already bottom-full-width, minimize. Press or again to restore.

Combine directions for quarters. For example, Control + then Control + places the window in the top-left quarter.

Dock switching (Control + number)

Dock app switching with Control + 1 through 9

Shortcut What it does
Control + 19 Launch, activate, unhide, or restore the matching Dock App in pinned left-to-right order.
Repeat within 2 s While that app is frontmost, toggle minimize/restore on the current window only.

Control + 1 treats Finder as usable only when a Finder window is visible. If another Dock app is already frontmost with a visible window, a non-repeat shortcut stops silently (Silent Failure).

Why Control, not Option

Option + arrow keys are native macOS text-navigation shortcuts (move by word). Control + arrows match the Windows/Linux mental model and avoid breaking text editing.

How it behaves

  • Uses public Apple APIs for Native Window Actions, not custom tiling geometry.
  • If a shortcut cannot run, it stops instead of trying a fallback (fail fast).
  • Normal failures are logged internally only; no notifications or HUDs (silent failure).
  • Quit or remove the app through normal macOS surfaces; there is no in-app quit button (system-managed exit).

FAQ

Shortcuts do nothing after I launch the app.
Grant Accessibility under System Settings → Privacy & Security. The app has no Dock icon during normal use. Confirm it is running via Activity Monitor or Login Items. Rebuilds signed ad-hoc (CODE_SIGN_IDENTITY=-) get a new code identity each time, so macOS drops Accessibility trust; use Developer ID signing for a stable local build.

Why does Accessibility reset every time I rebuild?
Ad-hoc signing creates a new bundle identity on each build. macOS treats each build as a different app for TCC (privacy permissions). Sign with a Developer ID Application certificate so the bundle identity stays stable.

Why macOS Tahoe 26+?
Development and release gates target the current Apple SDK and macOS generation. Older releases are out of scope for this repo.

Can I change the shortcuts or add a menu bar icon?
No. Zero configuration is intentional. See Out of scope in CONTRIBUTING.md.

Is there an App Store download?
Not yet. The product targets Mac App Store distribution as a sandboxed background utility, but sandbox + Accessibility proof is still in progress. Build locally or watch the repo for release updates.

Status and limitations

In active development. The product targets Mac App Store-only distribution as a fully sandboxed background utility (ADR 0017).

Sandbox proof is still in progress: sandboxed builds can register shortcut capture, but cross-app Accessibility window control inside the App Sandbox needs further work before submission. The repo includes diagnostic scripts and a sandbox probe build for that investigation. Local builds outside the store path are for development and testing.

There is no App Store download yet. Marketing and support pages live at windows-snap-for-mac.alexpedersen.dev.

Build from source

# Regenerate Xcode project and build
xcodegen generate
xcodebuild -project WindowsSnapForMac.xcodeproj \
  -scheme WindowsSnapForMac -configuration Debug build

# Unit tests (no Apple Developer account required)
swift test

# Signed local .app bundle (see CONTRIBUTING.md for signing options)
./scripts/build-app.sh

Unsigned Debug builds work for code review:

xcodegen generate
xcodebuild -project WindowsSnapForMac.xcodeproj \
  -scheme WindowsSnapForMac -configuration Debug build \
  CODE_SIGNING_ALLOWED=NO

App Store release tooling (validate-app-store-prep.sh, audit-app-store-release-readiness.sh, and related scripts) is documented in CONTRIBUTING.md and AGENTS.md.

Project layout

Sources/WindowsSnapForMac/        App lifecycle, shortcuts, window and Dock services
Sources/WindowsSnapForMacCore/    Pure logic: grid placement, Dock resolution
Tests/WindowsSnapForMacCoreTests/ Unit tests
docs/adr/                         Architecture decision records
CONTEXT.md                        Product glossary and terminology
IMPLEMENTATION_PLAN.md            Build sequence and verification matrix

Contributing

Issues and pull requests are welcome. See CONTRIBUTING.md for prerequisites, signing expectations, and pull request guidelines. Report security issues through SECURITY.md.

License

Released under the MIT License.

About

macOS background utility that brings Windows/Linux-style window-management (Control+Arrows) and Dock app switching (Control+1-9) shortcuts to the Mac.

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors