Skip to content

Repository files navigation

ScreenPick

A fast, cross-platform screenshot, annotation, and screen-capture utility for macOS and Windows. Capture a region, a window, or a whole display; mark it up in a built-in editor; and copy it to the clipboard or save it to disk — all from a small tray app driven by global shortcuts.

Built with Tauri 2 (Rust) and Svelte 5.

Features

  • Capture modes — region select, window pick (click the window you want), full screen, pick-a-display, and a screen color picker.
  • Annotation editor — arrows, shapes, freehand pen, text, highlighter, blur, crop, and cut, with undo/redo, pan, and zoom.
  • Global shortcuts — trigger any capture mode from anywhere without focusing the app; shortcuts are configurable in Settings.
  • Clipboard & file export — copy the result straight to the clipboard or save it, with a Recent captures list for quick re-export.
  • Lives in the tray — stays out of your way and can start hidden at login.
  • Native capture backends — uses the OS compositor for correct, crisp captures of GPU-composited windows on both platforms.

Install

Download the latest installer from the Releases page:

  • macOS: ScreenPick_<version>_universal.dmg (one file, runs on Apple Silicon and Intel)
  • Windows: ScreenPick_<version>_x64-setup.exe

macOS first launch

From 26.7.6 onward the macOS build is signed with an Apple Developer ID and notarized by Apple, so there is nothing to bypass:

  1. Open the .dmg and drag ScreenPick into Applications.
  2. Double-click ScreenPick. It opens normally.
  3. Grant Screen Recording permission. On first capture, macOS asks for it (or open System Settings → Privacy & Security → Screen Recording and enable ScreenPick). Relaunch the app afterwards — without this permission, captures come out black.
Installing 26.7.5 or earlier? Those builds are unsigned and need a Gatekeeper bypass.

Older releases were not signed, so macOS blocks them on first launch. The app is fine — macOS just cannot verify the publisher. After the .dmg step above:

Option A — Terminal (most reliable). Removes the download quarantine flag:

xattr -dr com.apple.quarantine /Applications/ScreenPick.app
open /Applications/ScreenPick.app

Option B — no Terminal. Double-click ScreenPick. When macOS refuses, go to System Settings → Privacy & Security, scroll to the message about ScreenPick being blocked, and click Open Anyway. Confirm once more when prompted.

If you see "ScreenPick is damaged and can't be opened", the app is not actually damaged — that is the quarantine message for unsigned apps. Use Option A to clear it.

Windows first launch

SmartScreen shows a "Windows protected your PC" dialog for unsigned apps. Click More info → Run anyway to install.

Updates

From 26.7.6 onward ScreenPick updates itself. It checks for a new version shortly after launch, and offers it in a banner with an Install and restart button. You can also check on demand from Settings → Check for updates or the tray menu.

Every update is cryptographically signed, and ScreenPick verifies that signature before installing — so an update can only come from this project. That signature is separate from Apple code signing: it protects the update payload itself, on both platforms.

  • Turn it off: Settings → Check for updates at startup. Manual checks still work. The automatic check contacts GitHub, which is the only network request ScreenPick makes.
  • Installed a version before 26.7.6? Those builds have no updater. Install the latest release manually once; updates are automatic after that.
  • Windows portable .exe: cannot self-update — download a new one, or use the installer.
  • macOS Screen Recording permission across updates: signed builds keep it. Unsigned builds did not — macOS treated every update as a different app and silently dropped the grant. Updating to 26.7.6 breaks it one last time, because the app's signing identity itself changes; from then on it survives. If captures come out black after that update, go to System Settings → Privacy & Security → Screen & System Audio Recording, remove ScreenPick from the list and add it again — the switch often still looks enabled. ScreenPick shows a banner explaining this when it detects the situation.

Build from source

Prerequisites: Node.js 24+ (with npm) and the Rust toolchain via rustup, plus your platform's Tauri prerequisites.

npm install          # install JS dependencies
npm run tauri dev    # run the desktop app in dev mode
npm run tauri build  # produce installers for the current platform

Frontend-only and check/test commands:

npm run dev          # run the frontend only in a browser at http://localhost:1420
npm run build        # build the frontend bundle
npm run check        # type and Svelte checks
npm run test         # frontend checks, unit tests, and Rust tests

See BUILD.md for the full build, test-gate, and release procedure.

Troubleshooting

ScreenPick writes a diagnostic log (failures and key lifecycle events) to the OS log directory. Attach it when reporting a bug:

  • Windows: %LOCALAPPDATA%\com.tstone1.screenpick\logs\
  • macOS: ~/Library/Logs/com.tstone1.screenpick/

If your saved preferences ever reset on their own, the log (and a startup notification) will say why, and the previous settings file is preserved next to the current one as capture-settings.invalid-*.json.

Tech stack

  • Tauri 2 desktop shell (Rust, src-tauri/).
  • Svelte 5 + SvelteKit + TypeScript frontend (src/).
  • Vite for bundling, Vitest for frontend unit tests, cargo test for Rust.
  • Typed IPC between Rust and the frontend via tauri-specta (Rust is the source of truth for command and event shapes).

Recommended IDE

VS Code with the Svelte, Tauri, and rust-analyzer extensions.

License

MIT © Timo Stein

About

Cross-platform screenshot and annotation tool for macOS and Windows

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages