High performance self-hosted photo and video management solution.
 
 
 
 
 
 
Go to file
Santo Shakil 2a4c3af907 fix(mobile): run iOS bg task phases in parallel
onIosUpload runs sync local, sync remote, hash and handle backup
sequentially. on the bg refresh task path that's a 20s budget from
iOS, and sync + hash usually eat all of it before backup gets a turn
to enqueue any candidates.

these phases don't actually depend on each other. local + remote sync
touch different tables. hash works off whatever's already in drift.
handle backup reads candidates and just enqueues to URLSession bg.
anything one phase produces in this fire shows up to the others on
the next fire, and server-side dedup catches the rare race where
backup enqueues something sync remote was about to mark as already
uploaded.

so this runs all four concurrently via Future.wait, with hash getting
the full maxSeconds-1 budget instead of a fixed 5s. outer budget
timeout still caps everything before iOS expires.

second small change: getAssetsToHash orders by createdAt DESC instead
of id ASC to match getCandidates. when hash runs inside a refresh
fire it processes recent photos first.
2026-06-04 03:38:43 +06:00
.devcontainer fix(devcontainer): update build cache volume (#28736) 2026-06-01 12:41:53 +00:00
.github ci: verify mobile backward compatibility (#28786) 2026-06-03 15:21:23 +00:00
.vscode refactor: move cli to package folder (#28356) 2026-05-11 14:49:45 -04:00
deployment feat: use lockfile for mise tools (#28503) 2026-05-20 11:37:33 +00:00
design chore: update readme screenshot (#8182) 2024-03-22 04:31:36 +00:00
docker chore(deps): update docker.io/valkey/valkey:9 docker digest to 4963247 (#28622) 2026-06-02 08:09:27 +00:00
docs refactor: use widget previews for ui showcase (#28548) 2026-05-29 20:22:47 +00:00
e2e feat: minimum face count per user (#27452) 2026-06-02 18:05:55 +02:00
fastlane Added required setup for f-droid (#88) 2022-03-29 14:13:47 -05:00
i18n feat: minimum face count per user (#27452) 2026-06-02 18:05:55 +02:00
machine-learning chore(deps): update machine-learning (#28239) 2026-06-02 16:44:50 +00:00
misc/release chore: mise scripts (#28367) 2026-05-11 17:46:02 -04:00
mobile fix(mobile): run iOS bg task phases in parallel 2026-06-04 03:38:43 +06:00
open-api feat(mobile): add three-state field serialization (#27231) 2026-06-03 08:13:17 -04:00
packages fix(cli): prevent out-of-memory on file upload due to undici storing the request body (#28723) 2026-06-03 15:19:35 +00:00
readme_i18n chore: update readmes to match main (#28458) 2026-05-17 13:08:27 -05:00
server fix: error log on aborted uploads (#28806) 2026-06-03 12:47:38 -04:00
web feat: minimum face count per user (#27452) 2026-06-02 18:05:55 +02:00
.dockerignore chore: move sdk to packages (#28350) 2026-05-11 13:37:10 -04:00
.editorconfig chore: linting (#7532) 2026-01-04 16:05:56 +00:00
.gitattributes chore: move sdk to packages (#28350) 2026-05-11 13:37:10 -04:00
.gitignore chore: move sdk to packages (#28350) 2026-05-11 13:37:10 -04:00
.gitmodules chore: remove stale mobile/.isar submodule entry (#27913) 2026-04-18 04:29:13 +05:30
.nvmrc chore: use mise (#28298) 2026-05-08 15:21:33 -04:00
.pnpmfile.cjs fix: exiftool-vendored.exe (#26393) 2026-02-20 09:16:42 -05:00
.prettierrc refactor: move i18n formatting to workspace root (#28360) 2026-05-11 16:19:28 -04:00
CODEOWNERS chore: add mobile codeowner (#22130) 2025-09-17 14:08:35 +02:00
CONTRIBUTING.md fix(docs): we usually don't assign issues (#26691) 2026-03-04 09:43:19 -06:00
LICENSE Change license to AGPLv3 (#7046) 2024-02-12 15:31:59 +00:00
Makefile chore: migrate more make targets (#28663) 2026-05-28 08:33:57 -04:00
README.md fix(docs): update Readme links (#23959) 2025-11-18 21:32:11 -06:00
install.sh fix: bash install.sh script for mac os (#15874) 2025-02-03 16:41:42 -06:00
mise.lock chore: pump flutter to 3.44.1 (#28785) 2026-06-02 23:45:31 -05:00
mise.toml chore: pump flutter to 3.44.1 (#28785) 2026-06-02 23:45:31 -05:00
package.json fix(deps): update typescript-projects (#28371) 2026-05-20 16:56:27 +02:00
pnpm-lock.yaml chore(deps): update dependency testcontainers to v12 (#28763) 2026-06-02 12:05:42 +00:00
pnpm-workspace.yaml fix: make ts a peer dependency for swagger (#28677) 2026-05-28 22:04:25 +00:00
renovate.json fix: let renovate update base images (#27272) 2026-03-25 18:00:40 +00:00

README.md


License: AGPLv3 Discord

High performance self-hosted photo and video management solution



Català Español Français Italiano 日本語 한국어 Deutsch Nederlands Türkçe 简体中文 正體中文 Українська Русский Português Brasileiro Svenska العربية Tiếng Việt ภาษาไทย

[!WARNING] ⚠️ Always follow 3-2-1 backup plan for your precious photos and videos!

[!NOTE] You can find the main documentation, including installation guides, at https://immich.app/.

Demo

Access the demo here. For the mobile app, you can use https://demo.immich.app for the Server Endpoint URL.

Login credentials

Email Password
demo@immich.app demo

Features

Features Mobile Web
Upload and view videos and photos Yes Yes
Auto backup when the app is opened Yes N/A
Prevent duplication of assets Yes Yes
Selective album(s) for backup Yes N/A
Download photos and videos to local device Yes Yes
Multi-user support Yes Yes
Album and Shared albums Yes Yes
Scrubbable/draggable scrollbar Yes Yes
Support raw formats Yes Yes
Metadata view (EXIF, map) Yes Yes
Search by metadata, objects, faces, and CLIP Yes Yes
Administrative functions (user management) No Yes
Background backup Yes N/A
Virtual scroll Yes Yes
OAuth support Yes Yes
API Keys N/A Yes
LivePhoto/MotionPhoto backup and playback Yes Yes
Support 360 degree image display No Yes
User-defined storage structure Yes Yes
Public Sharing Yes Yes
Archive and Favorites Yes Yes
Global Map Yes Yes
Partner Sharing Yes Yes
Facial recognition and clustering Yes Yes
Memories (x years ago) Yes Yes
Offline support Yes No
Read-only gallery Yes Yes
Stacked Photos Yes Yes
Tags No Yes
Folder View Yes Yes

Translations

Read more about translations here.

Translation status

Repository activity

Activities

Star history

Star History Chart

Contributors