v4.5.15

triggerdotdev/trigger.devv4.5.15Aug 31, 2026by github-actions[bot]

AI Summary

This release focuses on package optimization by removing compiled test files and introduces named side channels for Sessions to handle out-of-band data streams.

Key Highlights

  • Stop shipping compiled test files (*.test.ts) to reduce package size and dead weight.
  • Introduced named side channels for Sessions to allow multiple named streams that don't trigger runs.
  • Increased the limit for Session `triggerConfig.tags` from 5 to 10.

New Features

  • Named side channels on a Session using `sessions.open(id).channel(name)`

Full Release Notes

# trigger.dev v4.5.15

## 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.15`](https://github.com/triggerdotdev/trigger.dev/pkgs/container/trigger.dev/1191282211?tag=v4.5.15)

## Release notes

Read the full release notes: https://trigger.dev/changelog/v4-5-15

## What's changed

## Improvements
- Stop shipping compiled test files in the published packages. The `*.test.ts` sources were being emitted into `dist`, adding dead weight to every install and leaving modules that `require("vitest")` (not a dependency) inside the tarball, which tripped tooling that walks every file in a package. ([#4833](https://github.com/triggerdotdev/trigger.dev/pull/4833))
- Named side channels on a Session: durable, two-way realtime streams that outlive a single run and are shared across runs. Open a channel with `sessions.open(id).channel(name)` (or `chat.channel(name)` inside a `chat.agent`) to get an `.in`/`.out` pair addressed by name rather than the reserved default pair. Writing a side channel's `.in` does not wake or trigger a run, so a channel can carry out-of-band data (a stream of frames, a control signal) that many clients read while the agent produces it. ([#4815](https://github.com/triggerdotdev/trigger.dev/pull/4815))
  
  ```ts
  // Inside a chat.agent: stream frames on a named channel, wakes nothing
  const frames = chat.channel("screenshots");
  await frames.out.append(frame);
  frames.in.on((control) => {
  /* client control, no suspend */
  });
  ```
  
  Declare channel record types once with `sessions.defineChannel(...)` and infer them on both the producer and the consumer, including `useSessionStreamChannel` in React. Channels get a default retention that keeps them bounded, overridable per channel.
- Session `triggerConfig.tags` now accepts up to 10 tags, matching the run tag limit. Previously it was capped at 5, which for `chat.agent` left room for only 4 of your own tags after the automatic `chat:{chatId}` tag. ([#4832](https://github.com/triggerdotdev/trigger.dev/pull/4832))

## All packages: v4.5.15

@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

Matt Aitken, github-actions[bot], Saadi Myftija, claude[bot], Eric Allam, James Ritchie

**Full changelog**: https://github.com/triggerdotdev/trigger.dev/compare/v4.5.14...v4.5.15