Loading...
Loading...

View Source Code
github.com/Danm72/freeshot
Connect on LinkedIn
in/d-malone
Follow on Twitter/X
@danmalone_mawla
Share this article
I take screenshots all day. Client bugs, design notes, proof that a thing works. That meant CleanShot X, with Zight on the side. Both are good apps.
This week I replaced both with my own app. It's called FreeShot. It's free, it's open source under the MIT licence, and the code is on GitHub. I built it in one session with Claude Code.
The bit that matters if you run a business is that a paid tool you use every day is now a one-session job to replace.
From cleanshot.com/pricing on 2 Oct 2026: CleanShot Basic is $35 once for the Mac app with one year of updates. After that, updates are an optional $19 a year. CleanShot Pro is $10 per user per month, billed annually, and adds unlimited cloud storage and team features.
That's fair pricing for a polished app. But every small paid tool on your machine is a line on a card and a vendor you depend on. Most of the time that's the right call. I wanted to see what the other option looks like now.
FreeShot is a native macOS menubar app. It covers the parts of CleanShot X I use every day:
~/screenshots, copies it to the clipboard and shows a small card at the bottom left. From the card you can copy, save, annotate, pin it to the screen or drag it out into another app.The hotkeys were the thing I cared about most. On first launch, FreeShot reads them straight out of CleanShot's own settings file. My muscle memory didn't have to change at all.
I split the work into four parts: capture, the card that shows after a capture, annotate, and the extras (pin, text capture, recording and settings). Parallel AI agents built the four parts at the same time.
Then a review pass went over the whole thing and found 9 defects. Two examples: two screenshots taken in the same second overwrote each other, and a Shift-drag collapsed to an empty capture. The same pass fixed all 9.
It's written in Swift on Apple's own frameworks (AppKit, ScreenCaptureKit and Vision), with no third-party dependencies. It has 134 automated tests.
I tested the core on my own Mac. ⌘⇧3 gave a full-screen 3024×1964 Retina PNG. A 400×300 drag with ⌘⇧4 gave an 800×600 PNG, which is right for a Retina screen. ⌘⇧5 opened the bar, and Esc closed it.
Annotate, pin, text capture and recording are built and their logic has tests. I haven't used them day to day yet, so I won't tell you they're solid.
Building your own replacement isn't free in every sense. These are the trade-offs:
For a screenshot tool on my own Mac, I'm happy with that trade. For a tool a whole team relies on, I'd think harder about who maintains it after the first week.
The old question was "is this tool worth the money?"
There's a second question now: "is it worth one session to build my own?"
For small, single-purpose tools on your own machine, the answer is more and more often yes.
The code is on GitHub at github.com/Danm72/freeshot. It's MIT licensed, so take it, change it and use it.
Explore the Full Code
Star the repo to stay updated
Let's Connect
Follow for more smart home content
Follow on Twitter/X
@danmalone_mawla
Continue reading similar content

I built 9 Claude Code skills to keep my one-person portfolio business oriented around goals, KPIs, and the actions that actually move them. Here's how the whole system works.

I built five AI agents to run my business. Everyone who saw it asked the same thing: how do I get this? Here's the full system — five agents, what each one does, and how the pieces fit.

Most SaaS treats a new user like a transaction — a sign-up confirmation, then silence. Lifecycle messaging is how you make the product feel alive instead. Here's how I built a full system in Intercom — 37 outbound messages wired into four Series — by pointing Claude at Intercom's own internal API, plus the one rule most teams get wrong.