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