Immich v2.0.0 – First stable release

2025-10-026:25547159github.com

v2.0.0 - Stable Release of Immich Watch the video Welcome Hello everyone, After: ~1,337 days, 271 releases, 78,000 stars on GitHub, 1,558 contributors, 31,500 members on Discord, 36,000 members on ...

Beta Was this translation helpful? Give feedback.

You must be logged in to vote

You can’t perform that action at this time.


Read the original article

Comments

  • By jaredlt 2025-10-028:245 reply

    I appreciate the Cursed Knowledge section on their website https://immich.app/cursed-knowledge

    > Cursed knowledge we have learned as a result of building Immich that we wish we never knew

    • By darkwater 2025-10-028:383 reply

      Reading it I see this

        50 extra packages are cursed
      
        There is a user in the JavaScript community who goes around adding "backwards compatibility" to projects. They do this by adding 50 extra package dependencies to your project, which are maintained by them.
      
      
      which bring to this user: Jordan Harband https://github.com/sponsors/ljharb Does anyone know what they actually mean with that cursed knowledge point? And what's the "backwards compatibility" that Jordan also boasts in his GH profile?

      • By whilenot-dev 2025-10-029:241 reply

        To not just link to another thread: The specialty of ljharbs issues sits somewhere between "JavaScript is a very dynamic programming language that grew a lot and quite fast" and "we cannot trust developers to do the right thing".

        His libraries tend to build up on older runtime implementations and freeze every used functionality during runtime, so they provide "second-run safety" and "backwards compatibility". Developers disagree with some of its effects, such as a grown dependency tree and impacts in performance of multiple magnitudes (as measured in micro-benchmarks). ljharb seems to follow a rather strong ideology, but is a member of the TC39 group and a highly trusted person.

        • By 12345hn6789 2025-10-0214:452 reply

          ljharb is also conveniently paid per download. His actions border on malicious especially when viewing from a supply chain attack angle.

          https://github.com/A11yance/axobject-query/pull/354#issuecom...

          • By pxc 2025-10-0217:532 reply

            It definitely feels a bit strange and potentially alarming, but after reading through that whole thread he ultimately seems like a sincere person doing work that he thinks matters, now getting dogpiled for it.

            • By lpln3452 2025-10-032:561 reply

              If he had kept his strange and alarming behavior to himself, he wouldn't be 'getting dogpiled' for it now.

              The problem is that he's forcing his ways on others. If we're identifying an aggressor here, it's him. The project maintainers are the victims.

              • By pxc 2025-10-0319:361 reply

                At least in the thread linked here, it seems like his maintainership over the project is legitimate, which makes it wrong to characterize him as "forcing" his ways on anyone.

                • By lpln3452 2025-10-0321:171 reply

                  Even ignoring that examples of his behavior are easily found elsewhere, the link itself shows him completely disregarding feedback from other contributors to force his own way.

                  Honestly, I can't understand the intent behind such a defensive rebuttal to the criticism of his actions.

                  • By pxc 2025-10-0417:201 reply

                    I don't care one way or another. I'm not a JS developer. I'm just struck by a reaction that seems quite extreme, and very visible dogpiling.

                    • By lpln3452 2025-10-0418:14

                      My point wasn't about javascript. He got pushback because he ignored everyone and just did his own thing. It has nothing to do with javascript and you can see that in the link. That's a weird excuse.

            • By Sammi 2025-10-0221:01

              I haven't found one person who agrees with him on what he thinks matters. His way is wasteful and slow and just indefensible.

          • By silverwind 2025-10-0216:07

            Also, I imagine cost of the globally wasted CPU cycles is much higher than what he profits. It's a pure abuse of resources.

      • By slaterbug 2025-10-028:582 reply

        I don't have much to add myself, but there was a bit of discussion around this back in August that you might be interested in: https://news.ycombinator.com/item?id=44831811

        • By darkwater 2025-10-0210:10

          Wow! Didn't know Immich's Cursed page had already a dedicated post on HN.

          I love reading about opensource drama, especially if it's some technology I don't use directly, it's like watching a soap opera.

        • By 12345hn6789 2025-10-0214:431 reply

          This user makes money of off how many downloads their packages receive.

          https://github.com/A11yance/axobject-query/pull/354#issuecom...

          • By greggsy 2025-10-0216:11

            What a dumpster fire.

            Is he really being paid per download, or is he just being sponsored? It’s not clear if either would imply some form of malicious intent either.

      • By pcthrowaway 2025-10-028:55

        Seems like this thread answers your question https://news.ycombinator.com/item?id=37604373

    • By whilenot-dev 2025-10-028:391 reply

      Agree, I wish every project would have that!

      I still think the conclusion on "setTimeout is cursed"[0] is faulty:

      > The setTimeout method in JavaScript is cursed when used with small values because the implementation may or may not actually wait the specified time.

      The issue to me seems that performance.now()[1] returns the timestamp in milliseconds and will therefor round up/down. So 1ms errors are just within its tolerance.

      [0]: https://github.com/immich-app/immich/pull/20655

      [1]: https://developer.mozilla.org/en-US/docs/Web/API/Performance...

      • By ffsm8 2025-10-029:274 reply

        JS is not a realtime language.

        setTimeout() does not actually guarantee to run after the elapsed time. It merely gets queued for the next async execution window after that timer elapsed. Hence it can also be off by infinity and never get called - because JS is single threaded (unless you use a worker - which comes with its own challenges) and async windows only open if the main thread is "idle".

        Usually, this is very close to the time you set via setTimeout, but it's very frequently slightly off, too.

        • By whilenot-dev 2025-10-0210:20

          setTimeout guarantees that the time provided is the time that has at least been elapsed, if it elapses at all - I think that is known to every JavaScript engineer out there.

          Then there are also gotchas like these[0][1]:

          > As specified in the HTML standard, browsers will enforce a minimum timeout of 4 milliseconds once a nested call to setTimeout has been scheduled 5 times.

          Still, the issue is rather how to measure the elapsed time reliably, for unit-tests among other things.

          [0]: https://developer.mozilla.org/en-US/docs/Web/API/Window/setT...

          [1]: https://html.spec.whatwg.org/multipage/timers-and-user-promp... (first Note)

        • By tigeroil 2025-10-0211:04

          Indeed - I was a bit surprised by them mentioning this to be honest, since, as I understand it, this is kind of a widely accepted limitation of setTimeout - it's purely a 'best effort' timer. It's not intended to be something where "yes after exactly Xms it'll execute.

        • By MrJohz 2025-10-0210:26

          This isn't quite the whole picture. If called in a nested context, `setTimeout` callbacks get executed in the next execution window, or at least 4ms after the initial call, whichever is earlier. Similarly, I believe `setInterval` has a minimum interval that it can't run faster than.

          See: https://developer.mozilla.org/en-US/docs/Web/API/Window/setT...

        • By perching_aix 2025-10-0210:14

          > JS is not a realtime language.

          Is there even such a thing? You're at the mercy of the platform you're running on. And Windows, Linux, Mac, Android, and iOS are not realtime to begin with.

          I guess if you're running on a realtime platform but in a VM like JS does, you can then take that property away, downgrading the "language" from being realtime. I wouldn't call that a language property still though, maybe my VM implementation doesn't make that downgrade after all.

    • By daemonologist 2025-10-0213:332 reply

      They think Postgres is cursed with a 2^16 limit; SQL Server has a parameter limit of ~2,000. I guess at least it's low enough that you're going to fail early.

      • By kardianos 2025-10-0215:45

        Sure, but SQL Server DB protocol (TD) has a dedicated Bulk Insert specific for that functionality. TDS isn't perfect, but it is much better then the postgresql wire protocol v3.

        Sometime I want to build a DB front-end that you send up some type of iceberg/parquet or similar, and return a similar file format over a quic protocol. Like quic, persistent connections could be virtualized, and bulk insert could be sane and normalized: eg insert these rows into a table or temp table, then execute this script referencing it. While I'm at it, I'll normalize PL/SQL so even brain-dead back-ends (sqlite) could use procedural statements and in-database logic.

      • By thewisenerd 2025-10-0213:52

        and then you write `.chunked(list)` so you can write `.map { query(list) }` instead of `.map { query(it) }` :)

        i wish there was an unused lambda parameter warning..

    • By kmarc 2025-10-028:39

      I love it. Immediately added to my daily note-taking practice

    • By senectus1 2025-10-028:521 reply

      the "personality" of this team is just such a joy...

      • By perching_aix 2025-10-0212:15

        Are you being sarcastic or just an ellipsis (…) abuser? If the former, what for?

  • By teekert 2025-10-029:061 reply

    Immich is really great, easily now my fav self-hosted app. I used the Immich CLI [0] and later Immich-go [1] to get all my photos in. That was a breeze. I set it to use the folders as albums... And now I have a lot of cleaning up to do, but other than with files and folders, I'm really enjoying the process!

    A poweruser tip that has helped me a couple of times: Use ZFS (or other snapshotting facilities) to make snapshot before making any changes/updates or doing large imports. It makes the whole thing sort of bullet proof and you can retry if you're not happy with some import flag.

    Immich had my old Corei3 server making a lot of noise for a couple of days btw! But, it's really good at facial recognition, not so much on finding dogs or something. But still very cool if you don't have to compromise on features as a self-hoster, I'm really grateful and will buy the "support package" (which does not add anything afaik... btw later they will come with a way to do seamless, encrypted off-site backups).

    [0] https://docs.immich.app/features/command-line-interface/

    [1] https://github.com/simulot/immich-go

    • By stavros 2025-10-0216:27

      I just added an external folder and copied all my photos there. Even though Immich's own photos folder is just a directory with dates, Immich is much less picky about what goes in the external folder (and, more importantly, what disappears from it).

  • By sonar_un 2025-10-029:535 reply

    For me Immich has been good, but not great. I keep going back to nextcloud photos if I really want to do any work, like sharing images and file management.

    I really don’t get having all of your images in a a library and not in a file structure. Immich can look at your external libraries but it can’t really do anything with them. I can’t injest, say my iPhone photos and then later categorize them and move them to the folder structure for more secure and stable long-term storage. I’ve wanted to like Immich and what they are doing, but I am fearful that they won’t be around forever and I will have just another wandering database of my images that I can’t really move to another platform when inevitably comes along.

    • By sz4kerto 2025-10-0212:232 reply

      > I really don’t get having all of your images in a a library and not in a file structure

      Immich can store your photos in a file structure you want. It can also reorganise your files on disk based on EXIF data, and so on.

      > I can’t injest, say my iPhone photos and then later categorize them and move them to the folder structure for more secure and stable long-term storage

      It can absolutely do exactly this.

      https://docs.immich.app/administration/storage-template/

      • By sonar_un 2025-10-0214:27

        The storage template is nothing like managing your photos within the app, moving them to different, more specific, folders. All it does is allow a type of folder structure on the main drive where the upload directories are, but if you have a more specific file structure, it doesn't allow you to manage this.

      • By kevinfiol 2025-10-0214:081 reply

        Does this make Immich effectively function like Photoview? My current Immich by default stores my uploads in an `uploads/<UUID>/<bunch of random two character folders>` structure. This was a huge disappointment after moving from Photoview.

        • By stavros 2025-10-0216:28

          I just had it store images in "photos/YYYY/MM/" when I set it up and that was it.

    • By oblio 2025-10-0210:261 reply

      They've been around for a 3 years, which is not a very long time for FOSS. However the software seems stable, fast, it has lots of releases, all of which are good signs in terms of future availability.

      I forgot the name, but there is a software "law" that software that has been around for N years will probably be around for N more years (so the longer it's been around, the longer it will continue to be around).

      I see about 7 big contributors: https://github.com/immich-app/immich/graphs/contributors. I think most of them work for/are sponsored by FUTO: https://futo.org/about/what-is-futo/

      And seeing the FUTO description, I like that. We need more of that :-)

      > FUTO is an organization dedicated to developing, both through in-house engineering and investment, technologies that frustrate centralization and industry consolidation.

      Though this part needs more research:

      > From its founding, FUTO has been funded entirely by investment from its sole owner, Eron Wolf.

      I have no idea who Eron Wolf is...

      Edit: found some more info. Potentially promising:

      https://news.ycombinator.com/item?id=35914264

      https://gitlab.futo.org/eron/public/-/wikis/Thoughts-on-Open...

      Though the question remains about FUTOs long term sustainability.

      • By alfyboy 2025-10-0211:20

        You’re thinking about the [Lindy effect](https://en.m.wikipedia.org/wiki/Lindy_effect)

        I donate to Immich monthly, and I’m glad they managed to keep the project going and not paywalling any of their features, even under the influence of their new sponsor.

    • By poisonborz 2025-10-0211:29

      But for structuring, tagging, why would you need a database? There's the file system, and countless tools to batch edit images and exif. Immich is great to display images, and perhaps gather some bit of metadata, like face recognition.

    • By sharperguy 2025-10-0210:581 reply

      Funnily enough I use nextcloud to upload my photos and then immich with the external dir pointed to my nextcloud directory to actually view them. Mostly came about because I installed nextcloud first. But it means I get to keep both immich and still have a regular file structure.

      • By hagbard_c 2025-10-0211:461 reply

        Same here, I tried Nextcloud Memories first which has some of the same functionality but ended up being too slow in nearly all aspects. Immich does well in this regard so I use it just like you do using its external library feature.

        You may be interested in the change I submitted to Immich which makes it possible to directly log in to Immich using the Nextcloud OIDC app. Add Immich as an 'external site' and use the autoLaunch parameter [1] to have the site open in NC as if it were a 'native' app without needing to log in first.

        [1] https://docs.immich.app/administration/oauth/#auto-launch

        • By sharperguy 2025-10-0419:34

          I didn't realize that nextcloud can act as an oidc provider. I use authelia for logging into nextcloud

HackerNews