MacShot is a lightweight ShareX-style capture utility for macOS. It lives in the menu bar, captures screenshots and recordings, keeps a local history, and can upload captures to configurable destinations.
The goal is a fast native macOS tool with the workflows people expect from ShareX, without carrying a heavy always-on UI.
Download the latest MacShot.dmg from the releases page, open it, and drop MacShot into /Applications. Requires macOS 15 or newer.
Builds are ad-hoc signed, so Gatekeeper blocks the first launch — right-click the app and choose Open once to get past it.
- Area, screen, and window screenshots
- Area and full-screen recordings
- Optional GIF output for recordings
- Replay buffer for saving the last moments of your screen
- Configurable global hotkeys
- Custom idle menu bar icon
- Custom sidebar accent color
- Custom capture sounds
- After-capture workflow: save to disk, copy to clipboard, upload, preview popup, sounds
- After-upload workflow: copy URL, open in browser, show notification
- Local capture history with thumbnails and upload links
- Custom upload destinations with headers, form fields, response templates, thumbnail URLs, deletion URLs, and error messages
- MacShot custom uploader files via
.mscu - Built-in presets for
0x0.st,cops.bio,GyazoandImgBB
ShareX is excellent, but it is Windows-first. MacShot is the same kind of workflow tool built directly for macOS:
- native Swift/AppKit/SwiftUI app
- menu-bar only by default
- ScreenCaptureKit based capture and recording
- system-managed recording output instead of a custom encoder pipeline
- debounced settings writes
- lazy thumbnail loading in history
- no background polling loop for normal idle operation
Measured on July 9, 2026 with the release app running from /Applications on macOS 26.5.2, Apple Macbook Air M5, 16 GB RAM:
| State | CPU | Resident memory | Threads |
|---|---|---|---|
| Menu bar idle, no recording, no replay buffer | 0.0% | ~61-63 MB | 7 |
The CPU figure came from 12 consecutive top samples over roughly 12 seconds. ps reported 64,784 KB RSS for the same process. These numbers are not a benchmark suite, but they describe the current idle footprint on the measured machine.
MacShot stores custom uploader configs as .mscu files. The format is JSON and intentionally close to ShareX custom uploader configs, so common fields are easy to map:
{
"Name": "cops.bio",
"RequestMethod": "POST",
"RequestURL": "https://cops.bio/api/imagehost/upload",
"FileFormName": "file",
"Headers": {
"Accept": "application/json",
"Authorization": "Bearer YOUR_TOKEN"
},
"Body": "MultipartFormData",
"URL": "{json:url}",
"ThumbnailURL": "{json:rawUrl}",
"ErrorMessage": "{json:error}"
}Supported response placeholders:
{response}for the full response body{json:path.to.value}for JSON values{regex:pattern}for regex extraction{header:Name}for response headers{filename}in request URL, headers, and form fields
Requirements:
- macOS 15 or newer
- Xcode Command Line Tools
- Swift Package Manager
Build and run locally:
swift run MacShotBuild the app bundle:
make appBuild the distributable DMG:
make dmgThe DMG is written to dist/MacShot.dmg.
The GitHub Actions workflow builds MacShot on pushes to main and on manual runs. It packages the app as a DMG and uploads it as a workflow artifact.
MacShot captures your screen only when you trigger a capture, recording, or replay-buffer action. Uploads only happen when enabled in the workflow settings and use the configured upload destination.
MIT — see LICENSE.