September 23, 2025
— Jason Rasmussen
After working on Immich for a year or two, the team, collectively, had learned a lot of weird stuff. We often found ourselves discussing these oddities, which we internally dubbed "cursed knowledge" — knowledge we had, that we wished we did not have. The range of topics varied from obscure bugs to random, unintuitive library behavior. Eventually, we decided to create a dedicated page to document what we had learned.
The first batch of cursed knowledge was added in #10907 and included behavior of JavaScript date objects, bcrypt limitations, weird npm packages, and PostgreSQL NOTIFY behavior. Naturally, this cursed knowledge is heavily connected to the tools and technology we use, which mainly consists of Node.js, JavaScript, TypeScript, & PostgreSQL. However, Immich itself, as a self-hosted photo & video management product, exposes us to complexities with media files, codecs, image processing, authentication, browsers, and varying operating systems, that our users run Immich on. All of this to say, that the team has been exposed to a lot of cursed knowledge over the years while building it.
It is worth clarifying that the purpose of this page is not to complain. We, more than most, understand the complexities of building software, and the challenges that every developer faces. We rely on, and appreciate the work of other developers, especially those that have built the tools that we use today. Instead, the page aims to document knowledge we have, that we wish we did not. We do not want to know how cursed JavaScript date objects are, but, inevitably, we do. Some entries are just quirks, while other are undefined, or even expected behavior. Either way, if it's in the list, we wish we didn't have to know it.
It is also worth mentioning that some of the cursed knowledge is now "legacy". Some of the issues, like the
Cloudflare Fetch
behavior is less cursed because the setting that enabled this behavior now has a
different default, and it is much more difficult to enable it unknowingly.
Inevitably, and somewhat reluctantly, we will likely continue to gain even more cursed knowledge. We will continue to update our page as this happens, so check back periodically for new entries!
Cheers,
The Immich Team
This project is available under GNU AGPL v3 license.
Privacy should not be a luxury