A landmark release for Shared Spaces: albums now live inside a space. It’s the milestone the Spaces chapter has been building toward — a shared timeline is no longer one endless stream but a real, organized library your whole group builds together, on web and mobile. Around that headline, the People page loads several times faster, person merging follows one consistent policy across every path, and a round of fixes tightens Memories, mobile, and admin polish.
July 19, 2026v5.1.1 to v5.2.011 selected highlights
1Feature highlights
7Important fixes
v5.1.1Previous release
v5.2.0Current release
What changed
The release at a glance
The milestone for Shared Spaces: albums now live inside a space. Create, fill, and manage them on web and mobile, so a family trip, wedding, or project becomes a real, organized library instead of one endless stream — with faces, covers, and counts kept consistent for cross-owner contributions.
The People page loads several times faster — disabling PostgreSQL JIT for the heavy cross-space aggregates cuts it from ~2.7s to ~0.7s, and the web app skips an unused statistics query and hydrates a smaller first page.
Person merging follows one policy on every path: a mis-classified pet can be merged into the right person from a shared space too, and the global People page’s scoped merge routes through the same propagation planner as the in-space merge.
Shared-space people now appear correctly in the mobile photos-filter people picker for space viewers, with membership-gated avatars instead of gray placeholders.
A round of reliability fixes: the memory viewer stays inside the current memory, admin memory-type settings save reliably, library sync no longer leaks the favorite flag, rapid video re-trims are race-free, and integrity counts are readable in light mode.
Shared Spaces gain real albums. Create and manage albums directly inside a space — on web and mobile — so a group’s growing timeline can be organized into named collections instead of one endless stream. Cross-owner contributions stay consistent everywhere they appear: face retention, cover eligibility, counts, and reconciliation all treat a contributed photo the same way the timeline already does.
The People page went from sluggish to snappy. The cross-space aggregates behind it tripped PostgreSQL’s JIT, whose one-time compilation dominated each query; disabling JIT for the role cuts the People page from ~2.7s to ~0.7s and its statistics query from ~1.1s to ~0.35s, with space timelines several times faster. The web app also skips a statistics query it wasn’t using and hydrates a smaller first page.
Merging the same person used to behave differently depending on where you started. Now every path follows the classic merge: a mis-classified pet can be merged into the right person — and back — from a shared space too, and the global People page’s scoped merge routes through the same propagation planner as the personal and in-space merges, so a merge that was previously blocked when both people held a profile in the same space now completes cleanly.
On mobile, the photos-filter people picker dropped the space scope for shared-space people, so their avatars came up gray and selecting one filtered to nothing. The picker now carries the tokenized filter id and space, showing membership-gated avatars in the picker rows, recent strip, and active-filter chips — so viewers can filter a space by its people.
A photo that appears in more than one memory — say a birthday memory and an on-this-day memory — could snap the memory viewer back to an earlier memory and loop forever. The viewer now carries the memory id through its navigation and resolves each position within that memory, so paging through a memory stays put.
The configurable memory types added in v5.1.0 stored their default as an empty object, which the config layer didn’t recognize as a known key — so the server warned about it on every load and silently discarded any admin overrides on save. Empty-object defaults are now recognized, so memory-type settings persist.
A cluster of fixes from the rolling-rebase audit: library sync no longer leaks the favorite flag to other members of a shared library, rapid re-trims of the same video are now race-free (serialized per asset, with atomic output), four more Immich strings are Noodle-branded, and ownership-coverage globs escape route-group parentheses so they match again.
The maintenance integrity counters on the admin dashboard rendered their placeholder digits in a gray that matched the card background in light mode, making them invisible. They now use a darker gray that stays legible in both themes.
A clean Android release build failed because a widget plugin pinned an older JVM target that newer inlined bytecode couldn’t fit into. Every Android plugin subproject now compiles Java and Kotlin at JVM 17 to match the app, so release builds go through.