v4.5.7
immich-app/immichv4.5.7Jul 23, 2026by github-actions[bot]
AI Summary
This release officially supports Node.js 24 and 26, introduces ergonomic improvements for custom chat agents, and fixes critical crashes in the development environment. The UI has also been refreshed with a redesigned side menu.
Key Highlights
- Official support for Node.js 24 and 26 (deprecation of experimental aliases)
- Improved chat agent ergonomics: `chat.writeTurnComplete()` returns resume cursors, and `chat.pipeAndCapture()` returns a result object with status/message instead of throwing on failure.
- Fixes for `trigger dev` crashes caused by missing build directories after rebuilds.
- Redesigned side menu with separate organization and account menus, a new project switcher, and resizable width.
- Isolation of development branch names so different organization members can use the same branch names without collision.
Breaking Changes
- `chat.pipeAndCapture` now returns a `PipeAndCaptureResult` object instead of `UIMessage | undefined`, requiring updates to call sites to read `.message` from the result.
New Features
- Official Node.js 24 and 26 runtime options
- Custom chat agent turn loop improvements returning cursors and status objects
- Resizable side menu with redesigned Profile page
- Dev watchdog improvements preventing crashes on missing build directories
- Ability for different org members to use the same development branch names
Full Release Notes
# trigger.dev v4.5.7
## Upgrade
```sh
npx trigger.dev@latest update # npm
pnpm dlx trigger.dev@latest update # pnpm
yarn dlx trigger.dev@latest update # yarn
bunx trigger.dev@latest update # bun
```
Self-hosted Docker image: [`ghcr.io/triggerdotdev/trigger.dev:v4.5.7`](https://github.com/triggerdotdev/trigger.dev/pkgs/container/trigger.dev/1058728584?tag=v4.5.7)
## Release notes
Read the full release notes: https://trigger.dev/changelog/v4-5-7
## What's changed
## Improvements
- Add `node-24` and `node-26` as supported `runtime` options in `trigger.config.ts`. The `experimental-node-24` and `experimental-node-26` names are now deprecated aliases and emit a deprecation warning; switch to `node-24` / `node-26` instead. ([#4337](https://github.com/triggerdotdev/trigger.dev/pull/4337))
```ts
import { defineConfig } from "@trigger.dev/sdk";
export default defineConfig({
runtime: "node-24",
project: "<your-project-ref>",
});
```
- Avoid logging task run environment variable values at debug level ([#4336](https://github.com/triggerdotdev/trigger.dev/pull/4336))
- Custom chat agent loops get two ergonomic wins for owning the turn loop. ([#4304](https://github.com/triggerdotdev/trigger.dev/pull/4304))
`chat.writeTurnComplete()` now returns the turn boundary's resume cursors (`lastEventId` for the output stream and `sessionInEventId` for the input stream), so you can persist them straight from the task instead of round-tripping them back from the client.
```ts
const { lastEventId, sessionInEventId } = await chat.writeTurnComplete();
await db.chats.update(chatId, { lastEventId, sessionInEventId });
```
`chat.pipeAndCapture()` no longer throws when a stream is stopped or fails. It now returns a `PipeAndCaptureResult` whose `message` holds any partial output captured before the stop or failure, alongside a typed `status` (`"complete" | "aborted" | "error"`) and, on failure, the `error`. Read the message off the result:
```ts
const { message, status, error } = await chat.pipeAndCapture(result, {
signal,
});
if (message) conversation.addResponse(message);
if (status === "error") logger.error("turn failed", { error });
```
Note: `pipeAndCapture` previously resolved to `UIMessage | undefined`. Update call sites to read `.message` from the returned result.
- Suppress a build-time warning that could appear in Vite-based projects when the optional `@ai-sdk/otel` package is not installed. ([#4188](https://github.com/triggerdotdev/trigger.dev/pull/4188))
## Bug fixes
- Fixes intermittent `trigger dev` run crashes where a run could fail at boot with a cryptic `Cannot find module .../dev-run-worker.mjs` after a rebuild had cleaned up the build directory the run was launched against. Dev runs now retry cleanly instead of hard-crashing when their build directory is missing, the dev watchdog no longer removes the build tree of a still-running session, and a run assigned to a worker version that was superseded by a rebuild now fails fast with a clear message instead of silently hanging until it times out. ([#4276](https://github.com/triggerdotdev/trigger.dev/pull/4276))
## Server changes
These changes affect the self-hosted Docker image and Trigger.dev Cloud:
- Refreshed the side menu: separate organization and account menus, a new project switcher, and the menu is now resizable by dragging its edge. The account Profile page has also been redesigned. ([#4066](https://github.com/triggerdotdev/trigger.dev/pull/4066))
- Allow different organization members to use the same development branch name without sharing or colliding with each other's branch environments. ([#4323](https://github.com/triggerdotdev/trigger.dev/pull/4323))
- Limit account settings email input to 254 characters. ([#4330](https://github.com/triggerdotdev/trigger.dev/pull/4330))
- Prevent duplicate Staging and Preview environments when account setup requests overlap ([#4261](https://github.com/triggerdotdev/trigger.dev/pull/4261))
- Fix the docs link on the empty Prompts page, which pointed to a page that no longer exists. ([#4247](https://github.com/triggerdotdev/trigger.dev/pull/4247))
## All packages: v4.5.7
@trigger.dev/build, @trigger.dev/core, @trigger.dev/python, @trigger.dev/react-hooks, @trigger.dev/redis-worker, @trigger.dev/rsc, @trigger.dev/schema-to-json, @trigger.dev/sdk, trigger.dev
## Contributors
Chris Arderne, James Ritchie, Matt Aitken, Katia Bulatova, @nicktrn, github-actions[bot], Eric Allam, @D-K-P
**Full changelog**: https://github.com/triggerdotdev/trigger.dev/compare/v4.5.6...v4.5.7