shotsync
August 13, 2026 · View on GitHub
Auto-uploads every new screenshot to your shotsync Worker. Menu-bar only (no Dock icon), with a pause toggle.
Requirements
- macOS 13+, Swift toolchain (Command Line Tools is enough — no full Xcode).
- A deployed shotsync Worker (see the repo root) and its access token.
Build & install
cd mac
bash scripts/build.sh # builds shotsync.app, self-signed
bash scripts/install.sh # installs to /Applications + LaunchAgent (starts at login)
open /Applications/shotsync.app
First launch asks for your Worker base URL + token (stored in the Keychain), then offers to point the macOS screenshot location at ~/Pictures/shotsync (restored when you quit or choose "Restore default screenshot location").
How it works
- You keep taking screenshots with the macOS shortcuts —
⌘⇧3(whole screen),⌘⇧4(selection),⌘⇧5(capture panel). shotsync registers no shortcuts of its own; it only changes where those shots land. The menu's How to use… panel restates this and reports whether the redirect and the Worker are actually set up. - Watches
~/Pictures/shotsyncvia FSEvents; each new.pngis thumbnailed client-side and POSTed to/api/upload(X-Source: mac). - Uploaded files are marked with an extended attribute so restarts don't re-upload.
- Failures go to a persistent queue and retry with capped exponential backoff.
Uninstall
launchctl unload ~/Library/LaunchAgents/com.jinkun.shotsync.plist
rm ~/Library/LaunchAgents/com.jinkun.shotsync.plist
rm -rf /Applications/shotsync.app
Quit the app first so it restores your original screenshot location.
Dev
swift test # ShotsyncCore unit tests (Swift Testing)
swift run shotsync # run from source
Note: tests use Swift Testing (import Testing), not XCTest — Command Line Tools has no XCTest. The package is pinned to swift-tools-version:5.9 (Swift 5 language mode) so the AppKit/menu-bar code isn't blocked by Swift 6 strict concurrency.