immich/web
Min Idzelis 4aa31d38bf
fix(web): svelte regression - cancel video preview fetch when bind:this is cleared early (#27713)
fix(web): cancel video preview fetch when bind:this is cleared early

In Svelte 5.53.9, `bind:this` is now cleared earlier in the unmount
sequence ("better bind:this cleanup timing"). The video thumbnail's
$effect was relying on the old order to read the bound `player` element
and clear its `src` to abort the in-flight `/api/assets/{id}/video/playback`
range request — but the bind is now `undefined` by the time the effect
runs, so the cleanup is silently skipped. The detached <video> keeps
its src, and Firefox does not abort an in-flight media fetch when the
element is detached/GC'd. Long-lived 206 range requests then saturate
Firefox's 6-connection HTTP/1.1 per-host limit and freeze the timeline
(see #27585).

Capture the player reference inside the effect and tear down via the
effect cleanup return — Svelte runs the prior cleanup (with the captured
ref) before `bind:this` is cleared. Use the canonical
`pause() / removeAttribute('src') / load()` sequence which actually aborts
the fetch in Firefox, even on a detached element.

Fixes #27585

Change-Id: I4d9fba859955f5c54f603c345e61d4206a6a6964
2026-04-15 20:18:59 -05:00
..
bin chore: build sdk while server is starting (#22083) 2025-09-16 12:48:31 -04:00
src fix(web): svelte regression - cancel video preview fetch when bind:this is cleared early (#27713) 2026-04-15 20:18:59 -05:00
static fix: allow bots to access /s/ urls (#27579) 2026-04-07 09:22:53 -05:00
tests chore(web): bump immich/ui for tooltips (#24632) 2026-01-05 19:51:03 +00:00
.browserslistrc chore: bump browserlists version and load tscompat browserlist from file (#19212) 2025-06-16 10:03:46 -05:00
.dockerignore feat(web)!: SPA (#5069) 2023-11-17 22:13:36 -06:00
.gitignore Add ablum feature to web (#352) 2022-07-15 23:18:17 -05:00
.npmrc Add web interface with admin functionality (#167) 2022-05-21 02:23:55 -05:00
.nvmrc chore(deps): update node.js to v24.14.1 (#27412) 2026-03-31 12:46:38 +02:00
.prettierignore chore(web): fix weblate conflicts (#10071) 2024-06-10 13:59:54 +01:00
.prettierrc chore(web): enable prettier json key sorting recursively (#10120) 2024-06-11 12:52:20 +01:00
eslint.config.js chore(deps): update dependency typescript to v6 (#27577) 2026-04-07 17:15:55 +02:00
mise.toml chore: update task commands in web/mise.toml to use pnpm (#26345) 2026-02-19 16:10:55 -05:00
package.json feat: upgrade immich/ui (#27792) 2026-04-14 16:18:12 +00:00
README.md fix(web): Updated web README.md (#12899) 2024-09-25 12:59:35 +00:00
svelte.config.js fix: make web build stage deterministic (#27823) 2026-04-15 19:31:23 +02:00
tsconfig.json chore(deps): update dependency typescript to v6 (#27577) 2026-04-07 17:15:55 +02:00
vite.config.ts chore: add vitest project names and fix server config root paths (#26684) 2026-03-04 08:20:43 -05:00

Immich web project

This project uses the SvelteKit web framework. Please refer to the SvelteKit docs for information on getting started as a contributor to this project. In particular, it will help you navigate the project's code if you understand the basics of SvelteKit routing.

When developing locally, you will run a SvelteKit Node.js server. When this project is deployed to production, it is built as a SPA and deployed as part of the server project.