A minimal macOS menu bar app for instant screenshot capture and annotation.
- Area capture — select any region of the screen with a crosshair overlay
- Annotation tools:
- Rectangle (stroke)
- Arrow
- Text
- Fill — solid color block for censoring sensitive content
- Blur — pixelation effect for censoring
- Line thickness — three preset sizes
- Color picker — 6 preset colors
- Export — copy to clipboard (
Cmd+C) or save as PNG/JPEG (Cmd+S) - Undo —
Cmd+Z - Menu bar app — no Dock icon, lives quietly in the menu bar
- macOS 14.0 (Sonoma) or later
- Xcode 15 or later (to build)
- Screen Recording permission
Open Screeny.xcodeproj in Xcode.
Before the first build, set up code signing to ensure screen recording permission persists between builds:
Xcode → Target "Screeny" → Signing & Capabilities → Team → select your Apple ID
Then build with Cmd+B. The build phase automatically copies Screeny.app to /Applications.
Launch /Applications/Screeny.app and go to:
System Settings → Privacy & Security → Screen & System Audio Recording → enable Screeny
If you need to reset a stale permission entry:
tccutil reset ScreenCapture com.screeny.app| Action | Shortcut |
|---|---|
| Capture area | Ctrl+Shift+4 |
| Copy to clipboard | Cmd+C |
| Save to file | Cmd+S |
| Undo annotation | Cmd+Z |
| Close editor | Esc |
Screeny/
├── ScreenyApp.swift # App entry point
├── AppDelegate.swift # Menu bar + global hotkey (Carbon)
├── ScreenCaptureManager.swift # Screen capture via ScreenCaptureKit
├── SelectionOverlayWindow.swift # Fullscreen selection overlay
├── EditorWindow.swift # Editor window + SwiftUI toolbar
├── AnnotationCanvas.swift # Drawing canvas (AppKit NSView)
├── EditorViewModel.swift # Shared state (tool, color, line width)
├── Annotation.swift # Annotation model
├── Info.plist
└── Screeny.entitlements
Screeny uses an AppKit + SwiftUI hybrid approach:
NSWindow/NSViewfor the editor canvas — direct control over mouse events and Core Graphics drawingNSHostingView<ToolbarView>embeds a SwiftUI view for the toolbarEditorViewModel(ObservableObject) bridges the two layersScreenCaptureKit(SCScreenshotManager) for capture — correctly captures all on-screen windows including those above the overlayCarbon RegisterEventHotKeyfor a global hotkey that doesn't conflict with system shortcuts
MIT