Snappd is a lightweight macOS screenshot utility built with Electron, TypeScript, Vite, and React. It runs primarily from the macOS menu bar and focuses on a fast local workflow: capture, copy to clipboard, optionally annotate, and save.
Snappd is under active development and is not release-ready yet.
Implemented so far:
- macOS menu bar app shell
- secure Electron windows with preload-only APIs
- local settings persistence
- region capture with
Cmd+Shift+2 - full-screen capture
- window capture through an Electron-native source picker
- clipboard-first screenshot workflow
- post-capture preview
- basic annotation tools in preview
- manual PNG save to
~/Pictures/Snappd - Screen Recording permission recovery path
Known issues / follow-ups:
- Custom shortcut typing/recording is not fully reliable yet; preset shortcut buttons are a temporary workaround.
- Annotations are canvas-based and destructive after commit; move/resize/edit-after-draw needs an object-based annotation model.
- Text annotation is inline while entering text, but committed text is not editable afterward.
- Signing/notarization and release packaging are not complete.
- Fast region capture on macOS.
- Clipboard-first by default.
- Local-only privacy model: no accounts, cloud upload, telemetry, analytics, or background network calls.
- Lightweight annotations without becoming a full image editor.
- Direct-download macOS
.dmgdistribution for V1.
- macOS 12 Monterey or newer is the intended minimum target.
- Apple Silicon
arm64is the primary target. - Node.js/npm.
Install dependencies:
npm installStart the app in development mode:
npm run devRun quality checks:
npm run typecheck
npm run lint
npm testBuild:
npm run buildPackage macOS app directory:
npm run package:macCreate macOS DMG:
npm run make:macScreenshot capture requires macOS Screen Recording permission.
In development mode, macOS may attribute permission to the app that launched Electron, such as Terminal, kitty, an IDE, or Electron itself. If capture fails, open macOS System Settings and enable Screen Recording for the relevant launcher, then fully restart the dev process.
Packaged builds should eventually appear as Snappd once signing/packaging is finalized.
Default workflow:
- Launch Snappd.
- Use the menu bar item or press
Cmd+Shift+2. - Drag to select a region.
- The screenshot is copied to the clipboard automatically.
- Use the preview window to annotate, copy, save, or discard.
Menu bar actions:
- Capture Region
- Capture Window
- Capture Full Screen
- Preferences
- Quit
The preview window includes basic annotation tools:
- Arrow
- Rectangle
- Text
- Pixelate
- Freehand pen
Annotated screenshots can be copied to the clipboard or saved as PNG.
src/
main/ Electron main process
preload/ contextBridge API exposed to renderer windows
renderer/ React renderer windows and styles
shared/ shared types, helpers, and pure tests
.docs/ PRD and implementation plan
npm run dev— start Electron in development modenpm run typecheck— run TypeScript without emitting filesnpm run lint— run Biome checksnpm run format— run Biome with writes enablednpm test— run Vitestnpm run build— typecheck and build Electron bundlesnpm run package:mac— build unpacked macOS app for arm64npm run make:mac— build macOS DMG for arm64
- Product requirements:
.docs/prd.md - Implementation plan and known blockers:
.docs/implementation-plan.md
UNLICENSED.