Immich 1.44.0 → 3.2.4
230 versions, 40 with breaking changes (4 repeat an earlier entry), 31 with upstream notes or warnings only (4 repeat an earlier entry), 2 required stops
Required stops
- 1.107.2
As of 1.133.0, Immich only supports upgrading directly from 1.107.2 or later. If you’re trying to upgrade a version of Immich below this, please upgrade to 1.107.2 first and ensure Immich starts up successfully before continuing to the latest release.
Source: https://github.com/immich-app/immich/releases/tag/v1.133.0 (checked 2026-09-25)
- 1.132.3
If you encountered "Migrations failed: Error: Invalid upgrade path" then perform an intermediate upgrade to
v1.132.3first.We recommend users upgrade to
v1.132.3since it does not have any breaking changes or bugs on this upgrade path.In order to update to Immich
v1.137.0or above, the application must be started at least once on a version in the range between1.132.0and1.136.0. Doing so will complete database schema upgrades that are required forv1.137.0(and above). After Immich has successfully updated to a version in this range, you can now attempt to update tov1.137.0(or above).Avoid
v1.136.0if upgrading fromv1.131.0(or earlier) due to a bug blocking this upgrade in some installations.Source: https://immich.app/errors#typeorm-upgrade, also https://github.com/immich-app/immich/releases/tag/v1.137.0 (checked 2026-09-26)
Version by version, oldest first
1.45.0: no action items (1 version)
1.46.0 2023-02-09
1 Breaking — show quotes
Breaking
The server and mobile app will both need to be on version v1.46.0 to work correctly due to some API signature changes between the server and the clients.
1.46.1 – 1.47.3: no action items (4 versions)
1.48.0 2023-02-21
1 Breaking — show quotes
Breaking
🔴 Breaking Changes and Important Notes for this release 🔴
- The server and the mobile app must be on the same version to function correctly.
- There are changes to the
docker-compose.ymlfile for themachine-learningportion, and include themodel-cachevolume at the end of the file as shown here. Please update yours accordingly. - Temporarily dropping Machine Learning support for Arm64 and ArmV7 due to PyTorch not supporting these architectures from the Python stable wheels
1.48.1 – 1.50.1: no action items (4 versions)
1.51.0 2023-03-20
1 Breaking — show quotes
Breaking
This release added a new container to Immich's ecosystem, namely Typesense. Please update your docker-compose.yml file to include the new container and .env file to have the new environment variable, which is TYPESENSE_API_KEY=some-random-text, TYPESENSE_API_KEY is a requirement for Typesense container to spin up, you can use any text for the key, the server will use that value to create a client to communicate with the Typesense container.
Please make sure to have your server and mobile app on the same version so that the app can work correctly.
Typesense container is required for now, but we plan to make it optional with the fallback of using Postgres full-text search for the searching mechanism.
immich-server:
depends_on:
...
- typesense
immich-microservices:
...
depends_on:
...
- typesense
typesense:
container_name: immich_typesense
image: typesense/typesense:0.24.0
environment:
- TYPESENSE_API_KEY=${TYPESENSE_API_KEY}
- TYPESENSE_DATA_DIR=/data
logging:
driver: none
volumes:
- tsdata:/data
[...]
volumes:
pgdata:
model-cache:
tsdata:
Please ensure to add typesense to the depend_on section of the immich-server and immich-microservices containers.
1.51.1 – 1.55.1: no action items (9 versions)
1.56.0 2023-05-18
2 Note — show quotes
Note
NOTE: This feature has not been implemented on the mobile app NOTE: Anytime you trigger the ALL option to run Recognize Faces, the previous name/nickname that was assigned to the people will be deleted as well
Note
NOTE: This feature has not been implemented on the mobile app
1.56.1 – 1.56.2: no action items (2 versions)
1.57.0 2023-05-23
1 Note — show quotes
Note
NOTE: After setting the template name, you must run the Storage Template Migration job to move files from the older storage path to the new one.
1.57.1: no action items (1 version)
1.58.0 2023-05-27
1 Breaking, 1 Note — show quotes
Breaking
- Older Immich database (Before the September 6th, 2022 release) might run into an issue with the
checksumcolumn beingnullin theassetstable. Please follow this guide to fix. - The server and the mobile app must be on the same version (v1.58.0) for the Partner sharing feature on the mobile app to work correctly.
- The
docker-compose.ymlhas changed the content. Please make sure to update yours.
[image: image]
Note
Note: When using external software to manage sidecar metadata, please keep in mind that Immich will not detect changes in the main image file. Please make sure to run the SYNC job to get the data updated
1.59.0 2023-05-30
1 Breaking — show quotes
Breaking
The mobile app and the server has to be on the same version (v1.59.0) for the app to work correctly.
Highlights
In this release, we added scroll to zoom ability to the asset viewer, made minor improvements to the web UI, and fixed some bugs we introduced in the last release.
As always, please consider supporting the project.
🎉 Cheer! 🎉
Support
If you find the project helpful and it helps you in some ways, you can support the project one time or monthly from GitHub Sponsors
It is a great way to let me know that you want me to continue developing and working on this project for years to come.
What's Changed
- chore (api): enable useSingleRequestParameter flag for api generator by @brighteyed in https://github.com/immich-app/immich/pull/2568
- fix(web+mobile): consistent filename handling by @michelheusschen in https://github.com/immich-app/immich/pull/2534
- feat(server): return asset checksum by @jrasm91 in https://github.com/immich-app/immich/pull/2582
- refactor(web): user avatar by @michelheusschen in https://github.com/immich-app/immich/pull/2585
- refactor(server): auth decorator by @jrasm91 in https://github.com/immich-app/immich/pull/2588
- fix(server): library folder missing on new install by @jrasm91 in https://github.com/immich-app/immich/pull/2597
- refactor(server): change asset entity to date type by @michelheusschen in https://github.com/immich-app/immich/pull/2599
- feat(web): add zoom to photo viewer by @mtaberna in https://github.com/immich-app/immich/pull/2577
- fix(web): show icons for empty album by @michelheusschen in https://github.com/immich-app/immich/pull/2604
- refactor(server): use date type for entities by @michelheusschen in https://github.com/immich-app/immich/pull/2602
New Contributors
- @mtaberna made their first contribution in https://github.com/immich-app/immich/pull/2577
Full Changelog: https://github.com/immich-app/immich/compare/v1.58.0...v1.59.0
1.59.1 – 1.62.1: no action items (5 versions)
1.63.0 2023-06-24
1 Breaking — show quotes
Breaking
Some databases might run into migration issues in the release - please follow this guide to fix
Hello, Immich fans! Welcome to the v1.63.0 release of Immich. There are many updates in this version that we hope you'll like. Some of the key highlights include:
- Initial support for a read-only/existing library.
- Support for more raw formats.
- Album titles now appear in the search results.
- Pinch-to-zoom asset grid on the mobile app.
- Facial recognition on the mobile app.
Highlights
Initial support for read-only/existing library.
Thanks to @alex-phillips, Immich now has the ability to import an existing gallery without the need to upload the files. This has been one of the most requested features, and I am happy that we can now cover this use case as well. However, this is only the initial implementation and will receive improvements in the future.
The current limitations of this feature are:
- Assets are not automatically synced and must instead be manually synced with the CLI tool.
- Only new files that are added to the gallery will be detected.
- Deleted and moved files will not be detected.
To understand how to use this feature, please see head to the documentation site
Support for more raw formats
With the integration of imagemagick, Immich now has support more raw photo formats and will generate high quality thumbnails to display on the timeline. I hope this helps everyone who owns a DSLR or mirrorless camera.
More love to the mobile app
We have neglected the mobile app for a while, so we’ve decided to give it some left over love from the Web and the Server 😛.
We added the facial recognition feature to the mobile app so you can view faces and photos of a person.
You can pinch to zoom in and out of the timeline to change the number of assets displayed on each row.
And as always, bugs are fixed, and many other improvements also come with this release.
Please consider supporting the project.
Support
If you find the project helpful, you can support Immich via the following channels.
- Monthly donation via GitHub Sponsors
- One-time donation via GitHub Sponsors
- Librepay
- buymeacoffee
- Bitcoin: 1FvEp6P6NM8EZEkpGUFAN2LqJ1gxusNxZX
It is a great way to let me know that you want me to continue developing and working on this project for years to come.
🎉 Cheers! 🎉
What Changes
Web
- feat(web): add zoom toggle icon by @mtaberna in https://github.com/immich-app/immich/pull/2873
- feat(web): Add album sorting to albums view by @klejejs in https://github.com/immich-app/immich/pull/2861
- feat(web): custom drop down button by @alextran1502 in https://github.com/immich-app/immich/pull/2887
- feat(web): add album to search result by @alextran1502 in https://github.com/immich-app/immich/pull/2900
- feat(web): Add keyboard event support to memory view by @klejejs in https://github.com/immich-app/immich/pull/2890
- fix(web): redirect to parent folder if asset viewer was open before reloading by @Sophtli in https://github.com/immich-app/immich/pull/2863
- fix(web): Mov files should show up in file picker. by @samip5 in https://github.com/immich-app/immich/pull/2886
- fix(web): keep video volume by @faupau03 in https://github.com/immich-app/immich/pull/2897
- fix(web): memory pause autoplay when scrolling down by @alextran1502 in https://github.com/immich-app/immich/pull/2923
Server
- feat(server): Add support for many missing raw formats by @elliotclee in https://github.com/immich-app/immich/pull/2834
- feat(server): JPEG XL by @uhthomas in https://github.com/immich-app/immich/pull/2893
- feat(server): M2TS by @uhthomas in https://github.com/immich-app/immich/pull/2896
- feat(server): support for read-only assets and importing existing items in the filesystem by @alex-phillips in https://github.com/immich-app/immich/pull/2715
- fix(server): use HTTP status OK instead of CREATED for assets by @uhthomas in https://github.com/immich-app/immich/pull/2876
- fix(server): Fix person's assets retrieval order by @alextran1502 in https://github.com/immich-app/immich/pull/2920
- fix(server): transform isReadOnly DTO to boolean by @alextran1502 in https://github.com/immich-app/immich/pull/2912
- chore(server): remove openapi assertion for dart by @alextran1502 in https://github.com/immich-app/immich/pull/2916
- chore(server): Improve moveAsset log by @alextran1502 in https://github.com/immich-app/immich/pull/2878
- chore(server): patch dart openapi assertion by @alextran1502 in https://github.com/immich-app/immich/pull/2914
- chore(server): add Canon CR3 mime type by @416c616e in https://github.com/immich-app/immich/pull/2922
- refactor(server, web): create shared link by @jrasm91 in https://github.com/immich-app/immich/pull/2879
Mobile
- feat(mobile): Adds photo thumbnail to videos by @martyfuhry in https://github.com/immich-app/immich/pull/2880
- fix(mobile): Fixes local position late initialization by @martyfuhry in https://github.com/immich-app/immich/pull/2884
- feat(mobile): pinch to zoom on asset grid by @fyfrey in https://github.com/immich-app/immich/pull/2905
- feat(mobile): optimize screen space usage by @fyfrey in https://github.com/immich-app/immich/pull/2911
- feat(mobile): Facial recognition by @alextran1502 in https://github.com/immich-app/immich/pull/2507
Chore
- fix(deployment) Add dependency on immich-web to immich-proxy by @etnoy in https://github.com/immich-app/immich/pull/2875
- chore(doc): move public msg to general section by @stavros-k in https://github.com/immich-app/immich/pull/2864
- chore(readme): mention offline support feature by @fyfrey in https://github.com/immich-app/immich/pull/2902
1.63.2 – 1.71.0: no action items (12 versions)
1.72.0 2023-08-06
1 Breaking — show quotes
Breaking
- The mobile app needs to be on the same version of the server
v1.72.0to operate correctly. - Drop support for armV7
1.72.1 – 1.72.2: no action items (2 versions)
1.73.0 2023-08-15
1 Breaking — show quotes
Breaking
Please make sure the mobile app and the server are on the same version to see the album displayed on the mobile app.
1.74.0: no action items (1 version)
1.75.0 2023-08-26
1 Breaking — show quotes
Breaking
- To disable machine learning now, use
IMMICH_MACHINE_LEARNING_ENABLED=false(previously
IMMICH_MACHINE_LEARNING_URL=false)
- Sentence-Transformers is no longer used for CLIP models, users who set
MACHINE_LEARNING_CLIP_IMAGE_MODELorMACHINE_LEARNING_CLIP_TEXT_MODELmust migrate to one of the ViT-B models listed here, with the caveat that OpenCLIP models will require running CLIP on all images since the embeddings are incompatible.
1.75.1 – 1.79.1: no action items (9 versions)
1.80.0 2023-10-02
1 Breaking — show quotes
Breaking
Warning
Breaking Changes (Action Required)
- The reverse geocoding settings have been moved to the admin settings pages. If you have set the level of accuracy in the
.envfile, you will need to make the corresponding changes in the settings menu on the administration page on the web.- Migrate thumbnails to a new folder structure by running the new migration job
Admin > Settings > Migration. See #4112 for more details)
1.81.0 – 1.81.1: no action items (2 versions)
1.82.0 2023-10-17
1 Breaking — show quotes
Breaking
Warning
Action Required - BREAKING CHANGE
- The mobile app and server must be on the same version to work correctly.
- We removed a section from the default docker-compose.yml that passed the
IMMICH_SERVER_URLandIMMICH_WEB_URLenvironment variables to immich-proxy. If your setup requires those, make sure you keep them passed through.- We have improved the time bucket grouping algorithm (see more below). To take advantage of this feature, please run the job to “Extract Metadata” for all assets.
[image: image]
1.82.1: no action items (1 version)
1.83.0 2023-10-28
1 Note — show quotes
Note
Note that when using the
albumvariable, the storage template won’t be applied immediately unless an asset is directly uploaded to an album. Therefore, the Storage Template Migration job may need to be run manually after sorting new assets into albums.
1.84.0: no action items (1 version)
1.85.0 2023-11-08
1 Warning — show quotes
Warning
Breaking Changes
- The server and mobile app must be on the same version for the application to work correctly.
- The
/server-info/statsendpoint has been changed to/server-info/statistics
1.86.0 2023-11-14
1 Warning — show quotes
Warning
Breaking Changes
- The server and mobile app must be on the same version for the application to work correctly.
- The mobile app might log you out. You will need to log in again for this release since we are changing some of the APIs and cannot auto-resolve when the user is logged in.
- Docker compose auto-names resources based on the project name, with a fallback to the current folder. In #4906 we now set the project name to “immich” in our docker compose file. For existing installs, we recommend ignoring this change as it would lead to orphaned resources.
We are sorry for the inconvenience
1.87.0: no action items (1 version)
1.88.0 2023-11-20
1 Warning — show quotes
Warning
BREAKING CHANGES
immich-proxyandimmich-webare no longer used as announced. Please see the content that needs to be edited from thedocker-compose.ymlfile below.immich-servernow serves the api on/apiand the web-app from/.The steps to update are as follow:
- Bring down the stack with
docker compose down --remove-orphans- Update the
docker-compose.ymlfile2.1. Remove
immich-proxyservice 2.2. Removeimmich-webservice 2.3. Expose port2283:3001in theimmich-serverservice
- Run
docker compose pull- Bring up the stack with
docker compose up -dFor those using a custom proxy, please update the routing to forward all requests to
immich-serverwithout the/apipath re-write.
services:
immich-server:
container_name: immich_server
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
command: [ "start.sh", "immich" ]
volumes:
- ${UPLOAD_LOCATION}:/usr/src/app/upload
- /etc/localtime:/etc/localtime:ro
env_file:
- .env
+ ports:
+ - 2283:3001
depends_on:
- redis
- database
- typesense
restart: always
immich-microservices:
[...]
immich-machine-learning:
[...]
- immich-web:
- container_name: immich_web
- image: ghcr.io/immich-app/immich-web:${IMMICH_VERSION:-release}
- env_file:
- - .env
- restart: always
typesense:
[...]
redis:
[...]
database:
[...]
- immich-proxy:
- container_name: immich_proxy
- image: ghcr.io/ Warninimmich-app/immich-proxy:${IMMICH_VERSION:-release}
- ports:
- - 2283:8080
- depends_on:
- - immich-server
- - immich-web
- restart: always
1.88.1 2023-11-21
1 Warning — show quotes
Warning
BREAKING CHANGES
immich-proxyandimmich-webare no longer used as announced. Please see the content that needs to be edited from thedocker-compose.ymlfile below.immich-servernow serves the api on/apiand the web-app from/.The steps to update are as follow:
- Bring down the stack with
docker compose down --remove-orphans- Update the
docker-compose.ymlfile2.1. Remove
immich-proxyservice 2.2. Removeimmich-webservice 2.3. Expose port2283:3001in theimmich-serverservice
- Run
docker compose pull- Bring up the stack with
docker compose up -dFor those using a custom proxy, please update the routing to forward all requests to
immich-serverwithout the/apipath re-write.
1.88.2 2023-11-21
1 Warning — show quotes
Warning
BREAKING CHANGES
immich-proxyandimmich-webare no longer used as announced.
1.89.0 2023-11-29
1 Warning — show quotes
Warning
If you are running your own Postgres database (not the one in our default docker-compose) and created the immich user yourself, you may need to enable the required extensions as the database superuser. You can do this by running the following two queries under the context of the immich database. This will only need to be run once.
CREATE EXTENSION cube; CREATE EXTENSION earthdistance;
1.90.0 2023-12-07
1 Breaking, 2 Note — show quotes
Breaking
Announcement (Breaking changes next release v1.91.0)
Continuing the effort of reducing Immich's footprint, we would like to announce another planned change. Starting from the next release (not this release), we will be removing the Typesense container and changing the database image. Below are the changes that must be made in your docker-compose.yml file.
immich-server:
[...]
depends_on:
- redis
- database
- - typesense
restart: always
immich-microservices:
[...]
depends_on:
- redis
- database
- - typesense
restart: always
- typesense:
- container_name: immich_typesense
- image: typesense/typesense:0.24.1@sha256:9bcff2b829f12074426ca044b56160ca9d777a0c488303469143dd9f8259d4dd
- environment:
- - TYPESENSE_API_KEY=${TYPESENSE_API_KEY}
- - TYPESENSE_DATA_DIR=/data
- # remove this to get debug messages
- - GLOG_minloglevel=1
- volumes:
- - tsdata:/data
- restart: always
[...]
database:
container_name: immich_postgres
- image: postgres:14-alpine@sha256:6a0e35296341e676fe6bd8d236c72afffe2dfe3d7eb9c2405c0f3fc04500cd07
+ image: tensorchord/pgvecto-rs:pg14-v0.1.11
env_file:
- .env
environment:
volumes:
pgdata:
model-cache:
- tsdata:Note
Note: If you are running your database with a non-superuser role for Immich, you must enable the pgvecto.rs extension manually. You can do this by connecting to the
immichdatabase as a superuser and running:CREATE EXTENSION vectors;
Note
Metadata edits only apply to non-external/read-only assets.
1.90.1 2023-12-08
1 Breaking — show quotes
Breaking
Announcement (Breaking changes next release - v1.91.0)
Continuing the effort of reducing Immich's footprint, we would like to announce another planned change. Starting from the next release (not this release), we will be removing the Typesense container and changing the database image. Below are the changes that must be made in your docker-compose.yml file.
immich-server:
[...]
depends_on:
- redis
- database
- - typesense
restart: always
immich-microservices:
[...]
depends_on:
- redis
- database
- - typesense
restart: always
- typesense:
- container_name: immich_typesense
- image: typesense/typesense:0.24.1@sha256:9bcff2b829f12074426ca044b56160ca9d777a0c488303469143dd9f8259d4dd
- environment:
- - TYPESENSE_API_KEY=${TYPESENSE_API_KEY}
- - TYPESENSE_DATA_DIR=/data
- # remove this to get debug messages
- - GLOG_minloglevel=1
- volumes:
- - tsdata:/data
- restart: always
[...]
database:
container_name: immich_postgres
- image: postgres:14-alpine@sha256:6a0e35296341e676fe6bd8d236c72afffe2dfe3d7eb9c2405c0f3fc04500cd07
+ image: tensorchord/pgvecto-rs:pg14-v0.1.11
env_file:
- .env
environment:
volumes:
pgdata:
model-cache:
- tsdata:Note
Same text as in 1.90.0, above.
1.90.2 2023-12-08
Breaking
Same text as in 1.90.1, above.
Note
Same text as in 1.90.0, above.
1.91.0 2023-12-15
1 Important, 1 Breaking — show quotes
Important
Action Required
docker-compose.ymlupdates related to dropping Typesense- Reupload certain iOS Live Photos
- Changes to the
LOG_LEVELenvironment variable
1. docker-compose.yml updates
We are removing the Typesense container and changing the database image. Below are the changes that must be made in your docker-compose.yml file.
immich-server:
[...]
depends_on:
- redis
- database
- - typesense
restart: always
immich-microservices:
[...]
depends_on:
- redis
- database
- - typesense
restart: always
- typesense:
- container_name: immich_typesense
- image: typesense/typesense:0.24.1@sha256:9bcff2b829f12074426ca044b56160ca9d777a0c488303469143dd9f8259d4dd
- environment:
- - TYPESENSE_API_KEY=${TYPESENSE_API_KEY}
- - TYPESENSE_DATA_DIR=/data
- # remove this to get debug messages
- - GLOG_minloglevel=1
- volumes:
- - tsdata:/data
- restart: always
[...]
database:
container_name: immich_postgres
- image: postgres:14-alpine@sha256:6a0e35296341e676fe6bd8d236c72afffe2dfe3d7eb9c2405c0f3fc04500cd07
+ image: tensorchord/pgvecto-rs:pg14-v0.1.11
env_file:
- .env
environment:
volumes:
pgdata:
model-cache:
- tsdata:
Note
Note: If you are running your database with a non-superuser role for Immich, you must enable the pgvecto.rs extension manually. You can do this by connecting to the
immichdatabase as a superuser and running:CREATE EXTENSION vectors;
Note
See below for more details about this change, including frequently asked questions.
2. Reupload certain iOS Live Photos
iOS Live Photos uploaded after v1.89.0 that are not linked need to be deleted and re-uploaded from the mobile app.
This is a one-time action, and future live photos uploaded from the mobile app will be properly linked together.
3. Changes to the LOG_LEVEL environment variable
The LOG_LEVEL value of simple has been removed. The equivalent value is log. If you were using the value simple, the server container will not start until this is updated.
Breaking
- feat(web,server)!: runtime log level by @jrasm91 in https://github.com/immich-app/immich/pull/5672
- feat(server): use pgvecto.rs by @jrasm91 in https://github.com/immich-app/immich/pull/3605
1.91.1 2023-12-16
1 Important — show quotes
Important
There was breaking changes in
v1.91.0please refer to the previous release note for more information
1.91.2 2023-12-17
Important
Same text as in 1.91.1, above.
1.91.3 2023-12-17
Important
Same text as in 1.91.1, above.
1.91.4 2023-12-19
Important
Same text as in 1.91.1, above.
1.92.0 2024-01-08
1 Breaking — show quotes
Breaking
- feat(server)!: move welcome message to settings by @jrasm91 in https://github.com/immich-app/immich/pull/6157
1.92.1 – 1.93.3: no action items (5 versions)
1.94.0 2024-01-31
2 Breaking — show quotes
Breaking
- The mobile app will no be longer compatible with server version <
v1.92starting from this version. Please make sure to have your server and mobile app on the same version to work correctly. docker-compose.ymlcontent change for hardware acceleration to incorporate hardware acceleration for machine learning- The following asset endpoints have been deprecated and will be removed in a future release
GET /asset/assetById/:idPOST /asset/download/infoPOST /asset/download/archivePOST /asset/download/:idPOST /asset/restorePOST /asset/trash/emptyPOST /asset/trash/restore- WebSocket connections no longer use "polling". If you see a disconnected status in the web, make sure your reverse proxy allows websockets.
Breaking
- chore(server): remove old device id endpoint by @jrasm91 in https://github.com/immich-app/immich/pull/6578
- feat(ml)!: cuda and openvino acceleration by @mertalev in https://github.com/immich-app/immich/pull/5619
1.94.1: no action items (1 version)
1.95.0 2024-02-20
2 Breaking — show quotes
Breaking
1. Upgrade pgvecto.rs to stable version 0.2.0 for enhanced search
Step 1: Change the docker-compose.yml database image from 0.1.11 to 0.2.0
[...]
database:
container_name: immich_postgres
- image: tensorchord/pgvecto-rs:pg14-v0.1.11@sha256:0335a1a22f8c5dd1b697f14f079934f5152eaaa216c09b61e293be285491f8ee
+ image: tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_USER: ${DB_USERNAME}
POSTGRES_DB: ${DB_DATABASE_NAME}
volumes:
- pgdata:/var/lib/postgresql/data
restart: always
[...]
Step 2: Perform docker compose pull
Step 3:
a) If Immich is a Postgres superuser (default)
Bring the stack up with docker compose up
When the server starts up, it will log a message like this:
WARN [DatabaseService] Could not run vector reindexing checks. If the extension was updated, please restart the Postgres instance.
[image: warn]
This is normal. Continue to Step 4.
b) If Immich is not a Postgres superuser
If Immich doesn't have superuser permissions, you'll need to bring up the database and run a few commands manually:
BEGIN;
CREATE SCHEMA IF NOT EXISTS vectors;
ALTER DATABASE immich SET search_path TO "$user", public, vectors;
SET search_path TO "$user", public, vectors;
UPDATE pg_catalog.pg_extension SET extversion = '0.1.11' WHERE extname = 'vectors';
UPDATE pg_catalog.pg_extension SET extrelocatable = true WHERE extname = 'vectors';
ALTER EXTENSION vectors SET SCHEMA vectors;
UPDATE pg_catalog.pg_extension SET extrelocatable = false WHERE extname = 'vectors';
ALTER EXTENSION vectors UPDATE TO '0.2.0';
SELECT pgvectors_upgrade();
COMMIT;
Step 4: Terminate and restart the stack
Bring the stack down (or terminate with ctrl + c) with:
docker compose down
Then bring it back up:
docker compose up
You'll run into a message saying:
[DatabaseRepository] Could not reindex index face_index. Attempting to auto-fix.
[image: image]
This is normal. The server will do some magic and start to work.
Step 5: Enjoy the new ✨search enhancements✨
2. OAuth encryption algorithm setting changes
OAuth setups using HS256 (mainly Authentik) will need to either (1) update the signing algorithm in Immich or (2) specify a signing key in the provider settings (so that it uses RS256 instead).
Specify a signing key in Authentik:
Screencast from 02-02-2024 12:05:04 AM.webm
New Immich OAuth Setting
[image: image]
Background
RS256 is generally better than HS256. RS256 is pretty much the most commonly used algorithm. The client library we use for open-id defaults to RS256. It's very easy to setup Authentik without specifying a signing key, which will default to use HS256. The original implementation added a hack/fallback to HS256 in some conditions to try to handle that situation. The current code removes the fallback, and adds a specific Signing Algortithm setting which can be explicitly set. Alternatively, the issue could be fixed by specifying a signing key in Authentik.
References:
Breaking
- feat(server)!: oauth encryption algorithm setting by @danieldietzler in https://github.com/immich-app/immich/pull/6818
- feat(server)!: pgvecto.rs 0.2 and pgvector compatibility by @mertalev in https://github.com/immich-app/immich/pull/6785
1.95.1 2024-02-21
Breaking
Same text as in 1.95.0, above.
1.96.0 – 1.101.0: no action items (8 versions)
1.102.0 2024-04-19
2 Breaking — show quotes
Breaking
⚠️ Breaking Changes (OPT-IN ONLY)
Caution
For people always pulling the latest compose file, this is a breaking change! Disregarding the notes will result in (temporary) data loss!
Background
In the past, we've seen many cases where people accidentally deleted their Postgres data by (unintentionally) deleting the docker volume (e.g., docker compose down -v). This is unfortunate as there is no way to recover that data (if you don't have a backup, MAKE BACKUPS!). We have been thinking about mounting the Postgres data to a local folder for a while but always hesitated, as this would break existing instances due to people not reading the change logs carefully. However, there have been too many issues, and we ultimately decided to make that change.
What do I have to do?
Nothing. You should only copy the compose file with every new release if we tell you to do so in the release notes. Generally, we don't recommend making changes to existing instances. If you have never had issues, attempting to migrate the data will put it at (an unnecessary) risk.
I want to migrate my docker volume to a local folder
Unfortunately there isn't a "proper" way to export a docker volume. The recommended method is to mount the volume and the directory (you want to copy your data to) to an arbitrary container, get a shell inside that container and copy the folder manually.
Caution
Take backups before attempting this. Especially make sure you have a current database dump (
pg_dump)
Warning
Do not use a directory under
/mntfor the postgres location if you are using WSL. Generally (on all operating systems) we recommend against using a network share for your database location. This is bound to break and cause all sorts of weird issues.
If you would like to opt-in to this change, there is an additional environment variable in the .env file as well as a modification in your existing docker-compose.yml file.
docker-compose.yml file
database:
container_name: immich_postgres
image: registry.hub.docker.com/tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_USER: ${DB_USERNAME}
POSTGRES_DB: ${DB_DATABASE_NAME}
volumes:
- - pgdata:/var/lib/postgresql/data
+ - ${DB_DATA_LOCATION}:/var/lib/postgresql/data
restart: always
volumes:
- pgdata:
model-cache:
.env file
[...]
DB_HOSTNAME=immich_postgres
DB_USERNAME=postgres
DB_DATABASE_NAME=immich
+DB_DATA_LOCATION=./postgres
Breaking
- mount postgres folder to local directory by default by @danieldietzler in https://github.com/immich-app/immich/pull/8443
1.102.1 – 1.103.1: no action items (5 versions)
1.104.0 2024-05-13
1 Caution, 1 Breaking — show quotes
Caution
EXTERNAL LIBRARY EDITABILITY
For external library users, you can now manage your assets directly from Immich's user interface, i.e. you can edit date/time, location information, and delete from the web and the mobile app.
If you don't want Immich to handle those operations, please make sure to have the read-only, i.e.,
:roflag on your mount point in thedocker-compose.ymlfile.
Breaking
- feat(server): read-write external assets by @jrasm91 in https://github.com/immich-app/immich/pull/9235
1.105.0 2024-05-14
1 Caution, 1 Breaking — show quotes
Caution
Changes in glob path external library
Library import paths no longer support wildcards (* notation/globs). If your library was previously using this, please update affected paths to point to directories instead. Note: exclusion paths remain unchanged and still support glob syntax.
Breaking
- fix(server): support special characters in library paths by @sushain97 in https://github.com/immich-app/immich/pull/9385
1.105.1 2024-05-14
1 Caution — show quotes
Caution
Please update immediately, as this bug can put your data at risk if using external libraries.
1.106.1 2024-06-11
2 Breaking — show quotes
Breaking
1. Underlying API changes
Please ensure your mobile app and server are on the same version. Otherwise, you won't be able to access the app.
We advise you to wait for the mobile app to be reviewed and released from the app stores before updating your instance to avoid disrupting your users.
2. Environment variables
SERVER_PORT,MICROSERVICES_PORT, andMACHINE_LEARNING_PORTwere renamed toIMMICH_PORTHOSTandMACHINE_LEARNING_HOSTwere renamed toIMMICH_HOST3. Removal of the
immich-microservicescontainerThe microservices container/process can now be deployed within the immich-server container itself and is done so by default.
Please refer to our documentation for a detailed explanation of this change and a way to keep microservices as a separate container.
Please edit your
docker-compose.ymlfile with the following changes. If you use hardware acceleration previously inimmich-microservices, you can move theextendsblock's content to theimmich-serverservice to keep the same functionality.
services:
immich-server:
container_name: immich_server
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
- command: ['start.sh', 'immich']
volumes:
- ${UPLOAD_LOCATION}:/usr/src/app/upload
- /etc/localtime:/etc/localtime:ro
env_file:
- .env
ports:
- 2283:3001
depends_on:
- redis
- database
restart: always
- immich-microservices:
- container_name: immich_microservices
- image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
- # extends: # uncomment this section for hardware acceleration - see https://immich.app/docs/features/hardware-transcoding
- # file: hwaccel.transcoding.yml
- # service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding
- command: ['start.sh', 'microservices']
- volumes:
- - ${UPLOAD_LOCATION}:/usr/src/app/upload
- - /etc/localtime:/etc/localtime:ro
- env_file:
- - .env
- depends_on:
- - redis
- - database
- restart: alwaysBreaking
- feat: microservices be gone by @zackpollard in https://github.com/immich-app/immich/pull/9551
- refactor!: LOG_LEVEL => IMMICH_LOG_LEVEL by @jrasm91 in https://github.com/immich-app/immich/pull/9557
- refactor!: port env by @jrasm91 in https://github.com/immich-app/immich/pull/9559
- refactor(server): plural endpoints by @jrasm91 in https://github.com/immich-app/immich/pull/9667
- refactor(server): user info endpoint by @jrasm91 in https://github.com/immich-app/immich/pull/9668
- refactor(server): /user profile endpoint by @jrasm91 in https://github.com/immich-app/immich/pull/9669
- refactor(server): user endpoints by @jrasm91 in https://github.com/immich-app/immich/pull/9730
- refactor(server)!: move markers and style to dedicated map endpoint/controller by @danieldietzler in https://github.com/immich-app/immich/pull/9832
- fix(server): proper asset sync by @fyfrey in https://github.com/immich-app/immich/pull/10019
1.106.2 2024-06-11
Breaking
Same text as in 1.106.1, above.
1.106.3 2024-06-12
1 Breaking — show quotes
Breaking
1. Underlying API changes
Please ensure your mobile app and server are on the same version. Otherwise, you won't be able to access the app.
We advise you to wait for the mobile app to be reviewed and released from the app stores before updating your instance to avoid disrupting your users.
2. Environment variables
SERVER_PORT,MICROSERVICES_PORT, andMACHINE_LEARNING_PORTwere renamed toIMMICH_PORTHOSTandMACHINE_LEARNING_HOSTwere renamed toIMMICH_HOST3. Removal of the
immich-microservicescontainerThe microservices container/process can now be deployed within the immich-server container itself and is done so by default.
Please refer to our documentation for a detailed explanation of this change and a way to keep microservices as a separate container.
Please edit your
docker-compose.ymlfile with the following changes. If you use hardware acceleration previously inimmich-microservices, you can move theextendsblock's content to theimmich-serverservice to keep the same functionality.When you bring the container up, please make sure to include the
--remove-orphansflag, so that theimmich-microservicescontainer is removed properly. So the full command will bedocker compose up -d --remove-orphans
services:
immich-server:
container_name: immich_server
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
- command: ['start.sh', 'immich']
volumes:
- ${UPLOAD_LOCATION}:/usr/src/app/upload
- /etc/localtime:/etc/localtime:ro
env_file:
- .env
ports:
- 2283:3001
depends_on:
- redis
- database
restart: always
- immich-microservices:
- container_name: immich_microservices
- image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
- # extends: # uncomment this section for hardware acceleration - see https://immich.app/docs/features/hardware-transcoding
- # file: hwaccel.transcoding.yml
- # service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding
- command: ['start.sh', 'microservices']
- volumes:
- - ${UPLOAD_LOCATION}:/usr/src/app/upload
- - /etc/localtime:/etc/localtime:ro
- env_file:
- - .env
- depends_on:
- - redis
- - database
- restart: always1.106.4 2024-06-13
Breaking
Same text as in 1.106.3, above.
1.107.0 – 1.107.1: no action items (2 versions)
1.107.2 2024-07-03
Required stop
1.108.0 2024-07-10
1 Caution — show quotes
Caution
This release includes a security update for Node.js. While we don't think these CVEs affect Immich, we strongly recommend you update. For more details, see https://nodejs.org/en/blog/vulnerability/july-2024-security-releases.
1.109.0 2024-07-18
1 Important — show quotes
Important
Read our announcement about supporting Immich by buying a license here
1.109.1 – 1.109.2: no action items (2 versions)
1.110.0 2024-07-26
1 Warning — show quotes
Warning
If you use CUDA for machine learning, the minimum NVIDIA driver version is now 545 from 535.
1.111.0 – 1.112.1: no action items (3 versions)
1.113.0 2024-08-30
2 Breaking — show quotes
Breaking
For OAuth users, please replace
app.immich:/withapp.immich:///oauth-callbackfor the Redirect URI in your OAuth provider settings
Breaking
- feat(server): granular permissions for api keys by @jrasm91 in https://github.com/immich-app/immich/pull/11824
- refactor(server): stacks by @jrasm91 in https://github.com/immich-app/immich/pull/11453
- fix(server): album statistics endpoint by @jrasm91 in https://github.com/immich-app/immich/pull/11924
- fix: remove
asset.resizedby @jrasm91 in https://github.com/immich-app/immich/pull/11983 - fix(mobile): use a valid OAuth callback URL by @qrkourier in https://github.com/immich-app/immich/pull/10832
1.113.1: no action items (1 version)
1.114.0 2024-09-06
1 Note — show quotes
Note
NOTE: these changes apply to the metadata extraction job. To apply them to your photos and videos, re-run metadata extraction.
1.115.0 – 1.116.2: no action items (4 versions)
1.117.0 2024-10-03
1 Breaking — show quotes
Breaking
The
imagesection of the config file structure for thumbnails and previews has changed. If you use a config file and set the image settings to custom values, these will be ignored until updated to the new structure.
…
"image": {
- “previewFormat”: “jpeg”,
- “previewSize”: 1440,
- “quality”: 80,
- “thumbnailFormat”: “webp”,
- “thumbnailSize”: 250,
+ "thumbnail": {
+ "format": "webp",
+ "size": 250,
+ "quality": 80
+ },
+ "preview": {
+ "format": "jpeg",
+ "size": 1440,
+ "quality": 80
+ },
"colorspace": "p3",
"extractEmbedded": false
}
…1.118.0 2024-10-15
2 Breaking — show quotes
Breaking
This release includes the following breaking changes:
- Port alignment
- Remove deprecated API endpoints
- Remove deprecated
start.sharguments
1. Port alignment
We aligned the internal port of the immich-server to be similar to the binding port. Please make the following change to your docker-compose.yml file under the immich-server section. Reverse proxies using port 3001 also need to be updated to use port 2283.
services:
immich-server:
container_name: immich_server
...
ports:
- - 2283:3001
+ - 2283:2283
...
2. Remove deprecated API endpoints
The following endpoints were previously deprecated and have been removed, if you are a community project maintainer and using one of the endpoints below, please make sure to make changes to your project:
/api/server-info/*has been removed. Use/api/server/*instead./api/people/:id/assetshas been removed. Use/api/search/metadatainstead.
Note
This includes
/api/server-info/ping,/api/server-info/version,/api/server-features,/api/server-info/config,/api/server-info/statistics, and others.
3. Remove deprecated start.sh arguments
The following docker commands have been removed:
start.sh immichstart.sh microservices
Follow the steps below to align docker-compose.yml with the default setup.
Note
These steps are only required if you still have the
immich-microservicessection in yourdocker-compose.ymlor didn't follow the previous instructions to remove the command section. If you don't have the mentioned content below, you can ignore this
1. Update docker-compose.yml
Remove the command line from immich-server and the entire immich-microservices service section as shown below.
services:
immich-server:
container_name: immich_server
...
:
- command: [ "start.sh", "immich" ]
...
- immich-microservices:
- container_name: immich_microservices
- ...
- :
- command: [ "start.sh", "microservices" ]
- ...
2. Remove the running immich-microservices container
Run docker compose down --remove-orphans after updating docker-compose.yml to remove the old immich-microservices container.
Breaking
- refactor(server): worker env by @jrasm91 in https://github.com/immich-app/immich/pull/13160
- chore: remove deprecated controller by @jrasm91 in https://github.com/immich-app/immich/pull/13189
- chore: remove deprecated endpoint by @jrasm91 in https://github.com/immich-app/immich/pull/13190
- feat: align compose ports by @jrasm91 in https://github.com/immich-app/immich/pull/13185
1.118.1 2024-10-15
1 Warning — show quotes
Warning
Version v1.118.0 contains breaking changes. Read about them here.
1.118.2 2024-10-16
Warning
Same text as in 1.118.1, above.
1.119.0 2024-10-28
1 Caution, 1 Breaking — show quotes
Caution
The env variable for the host binding was erroneously named
HOSTinstead ofIMMICH_HOST(which is how it was listed in the docs). This has been corrected in this release. If you were using theHOSTenv var in your setup before, please update it toIMMICH_HOST.If you are using the built-in Prometheus endpoint for monitoring, please read on. If not, you can ignore this section.
The following env variables have been removed:
IMMICH_METRICSIMMICH_API_METRICSIMMICH_HOST_METRICSIMMICH_IO_METRICSIMMICH_JOB_METRICSUse
IMMICH_TELEMETRY_INCLUDE/IMMICH_TELEMETRY_EXCLUDEinstead.Examples:
-- IMMICH_METRICS=true ++ IMMICH_TELEMETRY_INCLUDE=all-- IMMICH_METRICS=true -- IMMICH_HOST_METRICS=false ++ IMMICH_TELEMETRY_INCLUDE=all ++ IMMICH_TELEMETRY_EXCLUDE=host-- IMMICH_API_METRICS=true -- IMMICH_HOST_METRICS=true ++ IMMICH_TELEMETRY_INCLUDE=api,host
Breaking
- refactor(server): move host env to config repo by @jrasm91 in https://github.com/immich-app/immich/pull/13507
- refactor(server): telemetry env variables by @danieldietzler in https://github.com/immich-app/immich/pull/13705
1.119.1: no action items (1 version)
1.120.0 2024-11-06
1 Note — show quotes
Note
Note for third-party Immich distributions: as this filter only exists in jellyfin-ffmpeg, please ensure you use this build instead of a standard FFmpeg build.
1.120.1 – 1.121.0: no action items (3 versions)
1.122.0 2024-12-05
2 Note, 1 Breaking — show quotes
Note
Some videos may appear warped when viewing. If this occurs, please sign out and sign back in. This only needs to be done once and does not apply to new app installations on 1.122.0 or later.
Note
This feature requires always granting precise location permission for the Immich app so it can read the Wi-Fi name in both foreground and background.
Breaking
- refactor: rename searchMetadata to searchAssets by @jrasm91 in https://github.com/immich-app/immich/pull/14151
1.122.1 – 1.124.2: no action items (7 versions)
1.125.1 2025-01-23
2 Important, 1 Breaking — show quotes
Important
If you are running remote machine learning, please make sure the remote service pulls the latest version.
Important
For uploading photos from the gallery, it is still recommeded to use the built-in backup feature since the share-to mechanism that can cause mismatching upload status. Additionally, iOS defaults to sharing an exported JPEG image instead of the original for formats like HEIC. You can change this by tapping “Options” near the top of the iOS sharing menu and selecting “Current” instead of “Automatic”.
Breaking
- chore(server)!: default max bitrate unit to kbps by @mertalev in https://github.com/immich-app/immich/pull/15264
- feat: better spec urls by @jrasm91 in https://github.com/immich-app/immich/pull/15487
1.125.2 – 1.126.1: no action items (7 versions)
1.127.0 2025-02-26
1 Breaking — show quotes
Breaking
- chore: removed unused endpoint by @jrasm91 in https://github.com/immich-app/immich/pull/16167
1.128.0 – 1.129.0: no action items (2 versions)
1.130.0 2025-03-25
1 Note — show quotes
Note
Possible breaking change: If you use creative exclusion patterns for your libraries, please check if these are still respected and report any issues to us.
1.130.1 – 1.131.3: no action items (7 versions)
1.132.0 2025-04-23
1 Note, 1 Breaking — show quotes
Note
We are now using Valkey's image for the Redis service in the default docker-compose.yml template. This is not a required change. If you wish to use it, you can download the
docker-compose.ymlfile at the bottom of the release notes and replace the redis image with the new one.
Breaking
- refactor: notification-admin controller by @jrasm91 in https://github.com/immich-app/immich/pull/17748
1.132.1: no action items (1 version)
1.132.3 2025-04-28
1 Important — show quotes
Required stop
Important
Please update your Authelia config with the following property
token_endpoint_auth_method: "client_secret_post"
1.133.0 2025-05-21
2 Breaking, 1 Important, 1 Note — show quotes
Breaking
- Mobile app version
Please make sure to have the mobile app and the server on the same version for this release. Older versions of the mobile app will not work correctly with version
v1.133.0of the server. At the time of this release, the updated version of the mobile app should be available on the app stores.
- Upgrading the server from a very old release
As of 1.133.0, Immich only supports upgrading directly from 1.107.2 or later. If you’re trying to upgrade a version of Immich below this, please upgrade to 1.107.2 first and ensure Immich starts up successfully before continuing to the latest release.
- New database vector extension
We are migrating off the deprecated pgvecto.rs database extension to its successor VectorChord, which comes with performance improvements in almost all aspects. This change is a major milestone we want to perform prior to the stable release.
Before making any other changes, please back up your database. While every effort has been made to make this migration as smooth as possible, there’s always a chance that something can go wrong.
After making a backup, please modify your
docker-compose.ymlfile with the following information.
[...]
database:
container_name: immich_postgres
- image: docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:739cdd626151ff1f796dc95a6591b55a714f341c737e27f045019ceabf8e8c52
+ image: ghcr.io/immich-app/postgres:14-vectorchord0.3.0-pgvectors0.2.0
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_USER: ${DB_USERNAME}
POSTGRES_DB: ${DB_DATABASE_NAME}
POSTGRES_INITDB_ARGS: '--data-checksums'
+ # Uncomment the DB_STORAGE_TYPE: 'HDD' var if your database isn't stored on SSDs
+ # DB_STORAGE_TYPE: 'HDD'
volumes:
# Do not edit the next line. If you want to change the database storage location on your system, edit the value of DB_DATA_LOCATION in the .env file
- ${DB_DATA_LOCATION}:/var/lib/postgresql/data
- healthcheck:
- test: >-
- pg_isready --dbname="$${POSTGRES_DB}" --username="$${POSTGRES_USER}" || exit 1;
- Chksum="$$(psql --dbname="$${POSTGRES_DB}" --username="$${POSTGRES_USER}" --tuples-only --no-align
- --command='SELECT COALESCE(SUM(checksum_failures), 0) FROM pg_stat_database')";
- echo "checksum failure count is $$Chksum";
- [ "$$Chksum" = '0' ] || exit 1
- interval: 5m
- start_interval: 30s
- start_period: 5m
- command: >-
- postgres
- -c shared_preload_libraries=vectors.so
- -c 'search_path="$$user", public, vectors'
- -c logging_collector=on
- -c max_wal_size=2GB
- -c shared_buffers=512MB
- -c wal_compression=on
restart: always
[...]Important
Note: after switching to VectorChord, you should not downgrade Immich below 1.133.0.
Note
Your Immich instance must be accessed through a public HTTPS endpoint in order for the casting device to successfully load media. Accessing the instance and casting from a private HTTPS endpoint (or an HTTP endpoint) will result in the cast receiver failing to load any media.
Breaking
- refactor: user avatar color by @jrasm91 in https://github.com/immich-app/immich/pull/17753
- chore: remove old memory lane implementation by @jrasm91 in https://github.com/immich-app/immich/pull/18000
- feat: vectorchord by @mertalev in https://github.com/immich-app/immich/pull/18042
1.133.1 – 1.135.3: no action items (6 versions)
1.136.0 2025-07-24
2 Breaking, 1 Note — show quotes
Breaking
IMMICH_MEDIA_LOCATION (#19995)
Note: This is a different variable than
UPLOAD_LOCATION, which requires no change.Note: if you DO NOT have
IMMICH_MEDIA_LOCATIONin your.envfile, or if it is set to a path that starts with a/(absolute path), THIS BREAKING CHANGE DOES NOT APPLY TO YOU. Users of the all-in-one image (e.g., the unraid app) for instance are not affected.If you have a custom
IMMICH_MEDIA_LOCATIONenvironment variable set to a relative path, you will have to do the following process:
- Stop Immich (
docker compose stop):- Update Immich (
docker compose pull)- Update the environment variable to an absolute path, for example:
-IMMICH_MEDIA_LOCATION=./my-library +IMMICH_MEDIA_LOCATION=/usr/src/app/my-library
- Start Immich (
docker compose up -d --force-recreate)- After the server successfully starts up, connect to it (
docker exec ``*-it*`` immich_server /bin/sh) and runimmich-admin change-media-location. When prompted, enter the appropriate values. For example:docker exec -it immich_server /bin/sh $ immich-admin change-media-location ... ? Enter the previous value of IMMICH_MEDIA_LOCATION: ./my-library ? Enter the new value of IMMICH_MEDIA_LOCATION: /usr/src/app/my-library Previous value: ./my-library Current value: /usr/src/app/my-library Changing database paths from "my-library/*" to "/usr/src/app/my-library/*" ? Do you want to proceed? [Y/n] y Matching database file paths were updated successfully! 🎉 You may now set IMMICH_MEDIA_LOCATION=/usr/src/app/my-library and restart!Background/Motivation
Relative paths have implied ambiguity, as they depend on the current working directory to resolve correctly, leading to issues like (#4465). This change removes this ambiguity and sets up the project to transition away from files living at
/usr/src/app/uploadentirely. Currently, theuploadfolder lives at/usr/src/app/upload/upload, which is very confusing… for everyone. This change opens to door for a future migration to something likeIMMICH_DATA=/data, which a more sensible setup.API Key changes (#20113)
Note: This change may affect the use of third-party applications, such as ImmichGo, ImmichKios, or ImmichFrame.
This release includes a change to how API Keys work, specifically when used with routes that don’t require a specific permission. Previously, a scoped API Key could access these routes, but they will now throw a forbidden error. Routes without a declared scope now implicitly require the “all” permission.
Note
This is only supported when both the server and the mobile app are updated to
v1.136.0
Breaking
- feat!: absolute file paths by @jrasm91 in https://github.com/immich-app/immich/pull/19995
- fix: default route permission by @jrasm91 in https://github.com/immich-app/immich/pull/20113
1.137.0 2025-07-31
2 Breaking, 1 Caution — show quotes
Breaking
If your current, running version of Immich is
v1.132.0or newer, there is NO ACTION required. If you are updating from version belowv1.132.0continue reading.Remove TypeORM (#20366)
This update requires applications to have started up at least once on
1.132.0+. See https://immich.app/errors#typeorm-upgrade for more details.
Caution
Related to these changes, a few API permissions have been renamed. See #20250 for more details.
Breaking
- feat!: more permissions by @jrasm91 in https://github.com/immich-app/immich/pull/20250
- feat!: remove typeorm by @jrasm91 in https://github.com/immich-app/immich/pull/20366
1.137.1 – 1.137.3: no action items (2 versions)
1.138.0 2025-08-14
1 Important, 1 Breaking — show quotes
Important
For users that are using the beta timeline, please update your server to
v1.138.0so that the sync mechanism can work correctly.v1.138.0of the mobile app doesn’t sync the data correctly if your server isv1.137.2or below.
Breaking
- fix: album asset sync must sync new assets in a shared album by @zackpollard in https://github.com/immich-app/immich/pull/20655
1.138.1 – 1.142.1: no action items (9 versions)
1.143.0 2025-09-22
1 Note — show quotes
Note
If you're still experiencing issues with remote assets or albums not showing up on the mobile app, please ensure that your server is updated to the latest version. If you are still having issues, try logging out and back in.
1.143.1 – 2.2.3: no action items (9 versions)
2.3.0 2025-11-19
1 Important — show quotes
Important
We will start the work on removing the old mobile timeline soon. If you are still using the old timeline, please make sure to switch to the new timeline. If this message does not make sense to you, you can ignore it as you are already on the new timeline
2.3.1 2025-11-20
1 Important — show quotes
Important
We encourage all users to update to this version to avoid the issue that will happen when the next minor update is available, i.e.,
v2.4.0
2.4.0 – 2.4.1: no action items (2 versions)
2.5.0 2026-01-27
2 Note — show quotes
Note
Reclaim storage To use the reclaimed space right away, you must manually empty the system/gallery trash outside Immich.
Note
Limitations:
- Mobile clients must be updated to v2.5.0 in order view the edited version of an asset. Clients will continue to > see the original asset if on a mobile app version <2.5.0
- As of this version, the edited download won't include the EXIF metadata of the original asset. This feature will come in future releases.
- Mobile editing still uses the old edit system (saving a new version of the photo). The mobile editor will be upgraded to use the new non-destructive editing system in a future release.
2.5.2 2026-01-29
1 Note — show quotes
Note
This version of the mobile app will pull down some data from the server to fix the incorrect data in the mobile app local database, so you will see the sync icon running for a little bit
2.5.3 – 2.5.6: no action items (3 versions)
2.6.0 2026-03-19
1 Warning — show quotes
Warning
For those who are still using the old timeline, please switch to the new timeline to avoid interruption, as the old timeline will be removed in the next release.
ps: The old timeline has an exclamation icon next to the logo.
2.6.1 – 2.6.3: no action items (3 versions)
2.7.0 2026-04-07
1 Note — show quotes
Note
Known limitations
- The machine learning service on
amd64currently requires the>= x86-64-v2microarchitecture. This will be patched in an upcoming patch release for backward compatibility with very old processors (before ~2010), but it will become a minimum requirement in 3.0.arm64is not affected by this change.
2.7.2 – 2.7.5: no action items (4 versions)
3.0.0 2026-07-02
2 Breaking, 2 Note — show quotes
Breaking
This release includes several breaking changes; read the full migration guide here. It's worth mentioning that many of the breaking changes are updates to API endpoints and affect only third-party tools that integrate with Immich's API. For the vast majority of users, updating works exactly as it always has.
Note
How to update
Warning
v3.0.0drops support for pgvecto.rs. If you run Immich beforev1.133.0and haven't done the migration step yet, see the migration guide here. https://docs.immich.app/install/upgrading/#migrating-to-vectorchord
First, update the IMMICH_VERSION in your .env file to v3:
- IMMICH_VERSION=v2
+ IMMICH_VERSION=v3
Then run the usual update commands:
docker compose pull && docker compose up -dNote
For assets imported prior to v3, you will also need to re-run Metadata Extraction in the job panel for them to be re-processed.
Breaking
- refactor!: migrate class-validator to zod by @timonrieger in https://github.com/immich-app/immich/pull/26597
- refactor!: remove replace asset by @jrasm91 in https://github.com/immich-app/immich/pull/27022
- refactor!: remove my shared link dto by @jrasm91 in https://github.com/immich-app/immich/pull/27023
- chore!: remove deprecated env variables by @jrasm91 in https://github.com/immich-app/immich/pull/27802
- chore!: remove getRandom api endpoint by @bwees in https://github.com/immich-app/immich/pull/27780
- chore!: remove unused token response param by @jrasm91 in https://github.com/immich-app/immich/pull/27805
- refactor: yeet old timeline by @shenlong-tanwen in https://github.com/immich-app/immich/pull/27666
- chore!: remove old timeline sync endpoints by @jrasm91 in https://github.com/immich-app/immich/pull/27804
- chore!: remove deviceId and deviceAssetId by @danieldietzler in https://github.com/immich-app/immich/pull/27818
- chore!: rename API key schemas by @jrasm91 in https://github.com/immich-app/immich/pull/27828
- chore!: remove without assets by @jrasm91 in https://github.com/immich-app/immich/pull/27835
- fix: oauth issuerUrl validation by @bo0tzz in https://github.com/immich-app/immich/pull/27848
- fix!: do not allow insecure oauth requests by default by @bo0tzz in https://github.com/immich-app/immich/pull/27844
- fix!: set duration to null when not present by @meesfrensel in https://github.com/immich-app/immich/pull/26982
- chore!: remove /api/server/theme endpoint by @jrasm91 in https://github.com/immich-app/immich/pull/27880
- chore!: migrate album owner to album_user by @danieldietzler in https://github.com/immich-app/immich/pull/27467
- refactor!: change number to integer types by @timonrieger in https://github.com/immich-app/immich/pull/27912
- refactor(server)!: move correlationId to X-Correlation-ID response header by @timonrieger in https://github.com/immich-app/immich/pull/28139
- refactor(server)!: remove redundant error and statusCode fields from error responses by @timonrieger in https://github.com/immich-app/immich/pull/28140
- chore(server)!: drop pgvecto.rs support by @mertalev in https://github.com/immich-app/immich/pull/28159
- chore!: duration in milliseconds by @mertalev in https://github.com/immich-app/immich/pull/28003
- refactor(server)!: sanitize error messages to avoid leaking resource details by @timonrieger in https://github.com/immich-app/immich/pull/28154
- refactor(server)!: structured validation error responses by @timonrieger in https://github.com/immich-app/immich/pull/28204
- feat(server)!: add isOwned filter to albums API by @timonrieger in https://github.com/immich-app/immich/pull/28213
- chore(ml)!: require numpy 2.4 by @mertalev in https://github.com/immich-app/immich/pull/28158
- fix(deps): update dependency nestjs-otel to v8 by @renovate[bot] in https://github.com/immich-app/immich/pull/27863
- chore(ml)!: remove deprecated envs by @mertalev in https://github.com/immich-app/immich/pull/28326
- chore(server)!: remove libopus enum by @mertalev in https://github.com/immich-app/immich/pull/28325
- refactor!: remove asset faces from AssetResponseDto by @bwees in https://github.com/immich-app/immich/pull/27779
- refactor(server)!: drop empty string to null conversion by @timonrieger in https://github.com/immich-app/immich/pull/28808
- refactor(server)!: remove changeExpiryTime by @timonrieger in https://github.com/immich-app/immich/pull/28816
- refactor!: disallow star rating < 1 by @meesfrensel in https://github.com/immich-app/immich/pull/27896
- fix!: search endpoints visibility can be omitted by @danieldietzler in https://github.com/immich-app/immich/pull/29385
3.0.1 – 3.0.2: no action items (2 versions)
3.0.3 2026-07-15
1 Note — show quotes
Note
In some specific circumstances, newly uploaded Live Photos could have broken thumbnails. If you see any such cases, please run the "missing" job for thumbnails or wait for the respective nightly job to clear it up.
3.1.0 2026-07-29
1 Breaking — show quotes
Breaking
- chore(mobile): drop support for iOS 14 by @agg23 in https://github.com/immich-app/immich/pull/29780
3.2.0 – 3.2.4: no action items (4 versions)
Release notes from github.com/immich-app/immich/releases, checked 17 hours ago. Only text the vendor marks as breaking, or puts in a warning/caution/important note, or a plain note, is shown (a note that asks nothing of the admin, such as a call for feedback or testing, is not); read the full notes for anything else.