# cairn — Immich sync — Sync photo deletions to Immich

> Syncs iPhone photo deletions to your self-hosted Immich server. (iPhone/iPad app by Graham Larue.)

- Source: https://appshunter.io/ios/app/cairn-immich-sync/id6763392945 (this page in markdown: same URL + `.md`)
- Developer: [Graham Larue](https://appshunter.io/developer/1873829108)
- Category: Photo & Video, Utilities
- Price: Free
- Rating: 5.00/5 from 1 App Store ratings
- Age rating: 4+
- Requires: iOS 17.0 · 8 MB
- Languages: American English
- Released: 2026-05-13
- Data updated: 2026-07-21
- Monetization: free
- User reviews in markdown: https://appshunter.io/ios/app/cairn-immich-sync/id6763392945/reviews.md

## What is cairn?

cairn reconciles your iPhone photo library against your own Immich server. When you delete a photo on your phone, cairn moves the matching photo on Immich to Trash.

That's the whole job. cairn doesn't upload photos, show albums, edit metadata, or run AI — the Immich app already does those things. cairn closes the one loop the Immich app doesn't: photos that live on the server after you've deleted them from your phone.

HOW IT WORKS
— Content identity is SHA1 (the same identifier Immich uses server-side).
— cairn subscribes to iOS's deletion log, so it sees soft-deletes as you make them.
— A configurable quarantine window holds confirmed deletions before anything moves, so an accidental mass-offload has time to be caught.
— Every run shows you the candidate list first. Nothing happens on the server until you confirm.

SAFETY MODEL
— Trash, not delete. cairn moves assets into your Immich Trash — Immich retains them for 30 days, and restore is one tap.
— Percent cap + floor. If a single run would move more than a threshold of your matched photos to Trash, it aborts without touching the server.
— Breadcrumbs. Every run is tagged on Immich (cairn/v1/run/[id]) so you can find it server-side.
— Forensic journal. Local append-only log records every step — planned, tagged, trashed, restored, failed.
— Exclusions. Protect specific photos from ever being flagged.
— Indexing scope. Restrict cairn to a specific set of Photos albums. Photos outside the scope are silently ignored — never hashed, never proposed for trash. Useful if you want to manage just one album and leave synced family albums alone.

PRIVACY
— No analytics, no telemetry, no crash reporting, no ads.
— No cairn backend. Your iPhone talks directly to your Immich server using your API key.
— Credentials stay in the iOS Keychain. Nothing leaves your device besides requests you configured.

REQUIREMENTS
— An Immich server you run or control.
— An Immich API key. cairn requests these scopes: asset.read, asset.view, asset.download, asset.delete, tag.create, tag.asset, tag.read. The Setup screen lists them when you paste your key.

cairn is not affiliated with the Immich project. It talks to Immich over its public API; compatibility only.

Source is MIT-licensed at github.com/glarue/cairn.

## Key features

- Syncs iPhone deletions to Immich
- Moves deleted photos to Immich Trash
- Configurable quarantine window
- Trash-to-restore functionality
- Percent cap and floor for safety
- Exclusion options for specific photos
- Restrict indexing to specific albums


## Frequently asked questions about cairn

### Does cairn have ads?

No, cairn is ad-free and does not contain any advertisements. It also has no analytics, telemetry, or crash reporting.

### How much does cairn cost?

cairn is completely free to use. There are no in-app purchases or subscription fees associated with it.

### What devices does cairn support?

cairn is currently supported on iPhone devices. It requires an Immich server and an Immich API key to function.

### How often is cairn updated?

The latest version of cairn, 0.4.2, was released on June 23, 2026. The app is actively developed, with a release date of May 13, 2026.

### What happens if I accidentally delete photos?

cairn moves deleted photos to your Immich Trash, where they are retained for 30 days and can be restored with a single tap. It also has a safety model with a percent cap to prevent accidental mass deletions.

### Can I choose which photos cairn syncs?

Yes, you can restrict cairn's indexing scope to specific Photos albums. Photos outside this scope are silently ignored and will not be hashed or proposed for deletion.

### Is my data secure with cairn?

Yes, cairn prioritizes privacy. It has no backend, talks directly to your Immich server, and stores credentials in the iOS Keychain. Your iPhone only sends configured requests.

### What is the age rating for cairn?

cairn has an age rating of 4+. This indicates it is suitable for users of all ages, with no mature content.

## Version history (last 5 releases)

### 0.4.3 — 2026-07-16

cairn can now move deletions to Immich's Trash automatically, without a manual "Trash all" tap. This is opt-in and gated by your safety limits.

Because no earlier version ever deleted on its own, this update resets everyone to Cautious (manual) once, so no one is switched into automatic deletion silently. Open Settings → Safety & limits → Deletion strictness to choose:
- Cautious (the new default): nothing is trashed automatically. Deletions wait as "Ready to trash" for you to confirm.
- Balanced: deletions are trashed automatically once they clear the quarantine window.
- Autonomous: deletions are trashed automatically, with no quarantine wait.

Either automatic mode still respects your percent and count safety limits: a run that would exceed them — or a first sync — is left for you to review instead. Everything goes to Immich's Trash, which keeps a 30-day recovery window, and automatic trashing runs on background refresh too.

Pending Review is tidier for bulk deletes. When several photos are queued to expire on the same day, they now stack into one "N photos" card instead of a long run of rows. Tap to expand and review them one by one; the trash, exclude, and dismiss actions on the card apply to the whole batch.

Also fixed: trashing the "Ready to trash" list now updates the quarantine banner immediately instead of waiting for the next sync, and the countdown on the Status card matches the one shown inside Pending Review.

### 0.4.2 — 2026-06-23

Pending Review is steadier and clearer. The quarantine queue now appears the moment you open the app, instead of looking empty until the next sync finishes. Labels are plainer, too: the held section is "Queued," and each photo shows when it will be trashed ("Trashes in 5 days," then "Ready to trash") instead of the vaguer "eligible."

The deletion-strictness levels have clearer names. They now read as a scale, from most to least cautious — Cautious, Balanced, and Autonomous (previously Strict, Trusting, and Auto). Behavior is unchanged and your current setting is preserved.

Connection settings are reorganized around your server and key:
- Tap "API key" for one place to view, copy, replace, or disconnect. "Replace key" swaps in a new key for the same Immich account without re-onboarding — your indexed state, journal, and history are kept.
- The sign-in screen now remembers addresses you've used.
- Your Immich server version is shown, with a gentle heads-up if it's newer than the version of cairn it was tested against.

Plus smaller fixes: consistent slider styling and a tidied-up Status card.

### 0.4.1 — 2026-06-13

Large photo libraries now finish the first scan. On libraries of 100,000+ photos, the initial scan could stall with no visible progress — a metadata pass was blocking the main thread. It now runs in the background, so the scan keeps moving and the app stays responsive. Thanks to Ryan Lim (@ryanlim) for diagnosing this and contributing the fix.

More reliable sync when you reopen the app. Returning after the app has been idle now runs a single catch-up sync, and only when one is actually due — instead of occasionally spinning the sync icon without syncing, or leaving a half-finished run in "Last sync details." Backgrounding mid-sync now ends the run cleanly rather than resuming into a stuck state.

Run history stays tidy. Older runs now move to an archive automatically, keeping Status and Runs fast. Nothing is deleted — restore still reaches archived runs, and Export still includes the full history. Browse it under Settings → Advanced → View archived history.

Smaller fixes:
- Sync timestamps now respect your 12-hour / 24-hour time setting, and "Last sync details" shows how long ago the last sync ran.
- New Settings → Advanced → Concurrent hashes setting to tune initial-scan speed on capable devices.

### 0.4.0 — 2026-06-10

Faster first scan. Cairn can match phone photos to the copies already in Immich (by filename and capture date) and trust the server's checksum instead of re-hashing — hours down to seconds on iCloud-Optimized libraries. Optional; turn it on under Settings → Library → "Trust server checksums."

Stronger deletion safety. A run of fixes ensures cairn never proposes trashing a server photo that's still on your phone — including edited photos, Live Photos, hidden and shared assets, and capture-time rounding. Fixes the case where a photo still on your device showed up "aging out" in Pending Review.

Correctness and performance. A broad internal review hardened the deletion engine (restores, Live Photo pairs, delete-then-restore-offline), cut UI stutter, and sped up large-library syncs — including a long silent gap on the first scan of 100k+ photo libraries.

Clearer sync progress. Long syncs now show the file downloading from iCloud, live server-fetch progress instead of a frozen counter, a time estimate that accounts for iCloud throttling, and a separate scan line so the bar no longer fills and snaps back.

Reworked Settings. Clear categories with at-a-glance summaries, a quick-settings card for the knobs you revisit most, and search. Sign-in now lives under Connection.

Smaller additions:
- "Don't propagate old deletes" — clear old photos off your phone without mirroring those deletes to the server.
- "Open in Immich" opens the Immich app when installed, the browser otherwise.
- Diagnostic logging is now an opt-in toggle, off by default.
- Backup/restore now includes the hash cache, plus faster connection readings, dark-mode toggle fixes, and a more reliable launch.

### 0.3.2 — 2026-05-29

Sync detail: per-asset hashing visibility. When a sync stalls on a large iCloud video, the sync detail sheet now shows the asset being downloaded — filename, total bytes, elapsed time once it crosses ~3s, plus a 0–100% download progress bar while iCloud is fetching the bytes. Replaces the previous "N of M hashed" counter that gave no signal about what was actually slow.

Reliability: photos you viewed in Photos.app no longer pile up in the deferred queue. PhotoKit bumps the modificationDate when iOS materializes an asset from iCloud for display, and cairn previously read any modDate change as needing a re-hash — a chain of view → re-hash → iCloud re-download → 60s timeout → defer with "timed out." Cairn now skips the re-hash when the asset's primary resource size hasn't changed; real edits still re-hash because the editor adds an adjustment resource that changes the size.

Reliability: transient onboarding-screen flash on launch. iOS occasionally returns "item not found" for Keychain reads that should succeed during the brief post-launch window — most commonly after a force-quit + quick relaunch. Cairn previously routed straight to onboarding on the first "not found"; the retry now covers "not found" for ~400ms before treating it as truly missing. Fresh installs and sign-outs still route correctly, just after the brief retry.

## More apps by Graham Larue

- [ReferenceFrame: Frame Designer](https://appshunter.io/ios/app/referenceframe-frame-designer/id6758589669)

All apps by Graham Larue: https://appshunter.io/developer/1873829108

## Related topics

[immich](https://appshunter.io/ios/topics/immich) · [cairn](https://appshunter.io/ios/topics/cairn)

---

*Data collected daily from the US App Store and indexed by [AppsHunter](https://appshunter.io/). User reviews are verbatim App Store reviews. Ratings, prices and chart positions refresh continuously; this snapshot is from 2026-07-21.*
