DOSSIER 002 · FIELD NOTES
Snapper: a cross-platform screenshot tool in Rust
A free screenshot and annotation app for Windows, macOS and Linux that keeps Greenshot's simplicity, adds ShareX's power features and can redact secrets before an image leaves your machine.
Snapper is a free screenshot and annotation tool written in Rust. It runs on Windows, macOS and Linux, and it's meant to replace Greenshot and ShareX with one app that behaves the same everywhere.
Why I built it
Greenshot is lovely to use, but it's Windows-only and slow to change. ShareX does everything, but it's also Windows-only and the settings can be overwhelming. I wanted Greenshot's simplicity with ShareX's power features behind sensible defaults, running the same on a Mac or a Linux box as it does on Windows. Rust also gets me a single memory-safe binary.
The other thing that bugged me was privacy. It's far too easy to paste a screenshot into a ticket with an API key, a token or someone's email address sitting in the corner. Snapper can find those and pixelate them on your machine before the image is copied, saved or uploaded.
How it works
Press Print Screen and drag a region. Alt+Print Screen grabs the window under the pointer, and Ctrl+Print Screen grabs the full screen. The same actions are in the tray menu. Capture works across multiple monitors with mixed HiDPI scaling, there's scrolling capture for long pages, and on Wayland it goes through the XDG desktop portal.
The editor is built with egui. It has arrows, boxes, ellipses, text, a highlighter, blur and pixelate, numbered steps and crop. Images render on the CPU with tiny-skia, so export doesn't depend on a GPU.
From there your settings decide what happens: copy to the clipboard, save with a filename template like {date}_{time}_{app}.png, open the editor or redact first. Redaction is off until you turn it on. When it is on, Snapper runs OCR locally and pixelates emails, keys, tokens and card numbers. Automatic redactions get a dashed outline and a "Review redactions" banner, so you can check them and remove any it got wrong.
It can also OCR any region and copy the text, record to GIF or MP4, and upload to S3, Cloudflare R2, Imgur or a custom HTTP endpoint. You can import an existing ShareX .sxcu file. Secrets for upload targets go in the system keychain, not the config file, and S3 uploads use a presigned PUT that expires after five minutes.
Workflows chain these steps. The bug report example captures a region, redacts it, opens the editor, uploads to R2 and copies a Markdown link.
Everything is scriptable through snapper-cli:
snapper-cli capture region 0,0,800,600 --out region.png
snapper-cli ocr shot.png
snapper-cli record --region 0,0,640,480 --duration 3 --out clip.gif
snapper-cli list monitors --json
Settings live in a plain TOML file with a settings window over the top.
Where it's at
It's alpha. Capture, the editor, the tray, hotkeys, the CLI, scrolling capture, OCR, recording, uploads, local redaction, plugins and workflows are all implemented. Plenty of logic is covered by automated tests, but some things need a real display, a paid certificate or a third-party account, and I haven't checked those yet. That includes installers on clean machines, real uploads to R2, S3 and Imgur, OCR on every OS, and screen reader passes. They're all listed in docs/VALIDATION.md, and until they're done I'm not calling them passed.
Try it
There aren't signed installers yet, so build it from source with Rust:
cargo run -p snapper-app
That starts the tray app. Guides for capture, the editor, the CLI, uploads and each platform are in the docs folder. The code is MIT licensed at github.com/jusso-dev/snapper.