iCloud GUI 1.3 — requires macOS 26
⚠️ This release requires macOS 26 or later1.2 ran on macOS 14 and later. If you are on Sonoma or Sequoia, stay on
1.2 — it is complete, it still works, and it does everything this release does that you would notice day to day. macOS will refuse to open 1.3 on an older system rather than misbehaving.
Download your iCloud photos to a Mac or a NAS, at full resolution, using Apple's own PhotoKit framework. Your Apple ID password is never requested or stored, and Advanced Data Protection can stay on.
Signed and notarised by Apple, so it opens without any Gatekeeper warnings.
Installing
Open iCloud-GUI.dmg and drag iCloud GUI onto the Applications shortcut inside.
Keeping it in /Applications rather than running it from ~/Downloads matters here: macOS ties the Photos permission to where the app lives and how it is signed, so an app that moves around gets asked for access again.
What's new in 1.3
The window appears about three times sooner
Measured on a 35,000-asset library: 1.5 seconds down to 0.47.
Every PhotoKit query now runs off the main thread — enumerating albums and counting them, fetching assets, and rebuilding after a library change. Previously all of it ran on the main thread inside the first render, so the window itself could not draw until the whole library had finished loading. Main-thread work at launch went from roughly 800ms to roughly 70ms.
The grid no longer stutters while a download runs. Every library change rebuilt all 35,000 assets on the main thread, and a download makes the library change constantly.
The app icon is drawn by the system
AppIcon.icon is a gradient fill and a single glyph layer — no container, no shadow, no specular highlight. macOS draws all three itself, and differently per appearance (default, dark, clear, tinted), so the glyph picks up real edge lighting and depth instead of the flat bitmap 1.2 shipped.
Under the hood
- Swift 6 language mode, with compile-time data-race checking. It found three pieces of shared mutable state, including a real data race in the diagnostic probe that happened not to fire. None were annotated away — the state itself is gone.
- The toolbar's two halves are now separate Liquid Glass groups, via
ToolbarSpacer. It needs the macOS 26 SDK, which is why 1.2 left it out. - Finder tags use
URLResourceValues.tagNamesinstead of hand-writing a property list into an extended attribute. The attribute written is identical. - Launch timings are in the unified log, so "it feels slow" can be answered from a bug report:
log show --predicate 'subsystem == "com.drtechventures.icloudgui"' --last 1h --style compact
Fixes
--shotcould capture the wrong thing. It waited a fixed nine seconds for the window and gave up if it was not there yet, and applied--album/--groupon a separate timer that could lose the race. Affects contributors regenerating screenshots, not people using the app.- A library change could cancel the album recount it had just scheduled — the debounce and the enumeration shared one task handle.
Requirements
- macOS 26 or later
- Photos signed into iCloud with iCloud Photos turned on
Still true
- No Apple ID password is ever requested, entered, or stored
- Advanced Data Protection can stay enabled
- No analytics, telemetry, crash reporting, or third-party dependencies
- The only network request the app makes on its own behalf is Check for Updates…, and only when you click it
Full changelog: https://github.com/DR-Tech-Ventures/icloud-gui/blob/main/CHANGELOG.md