trigger.dev v4.5.10
Upgrade
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 # bunSelf-hosted Docker image: ghcr.io/triggerdotdev/trigger.dev:v4.5.10
Release notes
Read the full release notes: https://trigger.dev/changelog/v4-5-10
What's changed
Highlights
- Allow task-scoped environment API keys to run batch operations for their permitted tasks. The SDK declares the batch's task set before creation, and
@trigger.dev/core/v3/apiKeysnow exports the additional-key format helper. (#4389)
Improvements
-
Refresh package builds for TypeScript 7 compatibility while preserving existing runtime entry points. Projects using
emitDecoratorMetadata()with TypeScript 7 can install the@typescript/typescript6compatibility package alongside it; the package remains optional, so installing the Trigger.dev CLI does not install an additional compiler. (#4318) -
AgentChat.reconnect()now settles promptly when reconnecting to an idle chat instead of holding the connection open for the full long-poll window. Also upgrades the S2 streamstore client to 0.25 and moves realtime streams to S2's current hosts. (#4349) -
You can now choose the region a run executes in when triggering a task through the MCP server. (#4439)
-
Transient connection errors when a run starts are now retried for longer, so a brief connectivity blip no longer sends the run back through the queue and delays its first attempt. (#4441)
-
debouncenow works when you pass an array of items tobatchTriggerorbatchTriggerAndWait, and when you trigger fromuseTaskTrigger. Previously the option was accepted by the types and dropped before the request was sent, so every trigger created its own run instead of collapsing onto the debounce key. (#4520)await myTask.batchTrigger([ { payload: { id: "a" }, options: { debounce: { key: "same-key", delay: "30s" } }, }, { payload: { id: "b" }, options: { debounce: { key: "same-key", delay: "30s" } }, }, ]);
The streaming (async iterable) forms of the batch calls were already forwarding
debouncecorrectly.
Bug fixes
- Fix a chunk occasionally dropped when a chat.agent run takes over from the warm first turn. The realtime stream writer now reports the inclusive last-written position as the resume cursor, so the agent's first record after the handover is no longer skipped. (#4349)
- Fix a preloaded
chat.agentrun dropping an in-flight message when it retries after an out-of-memory error. The message being processed when the run hit the OOM is now recovered and re-run on the retry, instead of being skipped while the run waited for a new message. (#4349)
Server changes
These changes affect the self-hosted Docker image and Trigger.dev Cloud:
- Self-hosted deployments can now create multiple full-access API keys for each environment. (#4390)
- Short links like /_/apikeys now take you straight to that page in your current project and environment, so you no longer need the full URL with your org, project and environment in it. (#4523)
- The dashboard gets a refreshed Dark theme as its new default look. On the account page you can switch to Light, System preference (follows your OS), or the original Classic look, and fine-tune the new themes with a contrast slider. (#4206)
- Additional environment API keys can now create scoped public access tokens. (#4390)
- Additional environment API keys can authenticate API requests using their configured permissions, with revoked and expired keys rejected. Batch responses use server-issued public access tokens so additional keys never need the environment signing secret. (#4389)
- Self-hosted Kubernetes deployments can now add tolerations to run pods, so runs are allowed onto tainted nodes. An invalid toleration now stops the supervisor at startup instead of failing every run pod, so check existing values before upgrading. (#4491)
- Lower background database load during deployments and dev sessions for projects that use declarative schedules. (#4522)
- Triggering a task now does one fewer database write, so runs reach the queue slightly faster. (#4419)
- Creating or updating a schedule, and deploying a project with declarative schedules, is faster in long-lived projects with many deploys. (#4518)
- Admins opening an impersonation link from outside the dashboard now get a confirmation page naming the organization and destination instead of being bounced back, and while impersonating they can switch to "View as user" to see the dashboard exactly as that user sees it, with the admin-only UI and the impersonation highlight both hidden. Stopping impersonation is still one click away in the account menu. (#4421)
- Browser tabs now name the page you're on, and the run, task or queue when you're looking at one, instead of all reading "Trigger.dev". (#4517)
- Allow the database connection pool and connect timeouts to be tuned separately for each database's writer and read replica, falling back to the shared defaults when unset. (#4515)
- In-app feedback and add-on/quota requests are now recorded with more account context for the support team. (#4368)
- Self-hosted Kubernetes deployments now measure running-task count more accurately when deciding whether to pause pulling new work, so the safeguard engages closer to its configured thresholds. (#4442)
- The Queues pages now open on the last hour instead of the last day, and remember the time period you picked when you navigate between queues or reload the page. (#4438)
- Speeds up resolving the latest worker version and deployment for an environment, removing an occasional stall when triggering runs in projects that have accumulated many deployed versions. (#4452)
- API rate limits now apply per environment, so creating extra API keys no longer increases how many requests an environment can make. (#4508)
- When the capacity signal drops out, the last decision is held for a grace period rather than released. (#4444)
- Batch triggers no longer fail to start their runs when an environment is under heavy API load. If a batch still can't finish being created,
batchTriggerAndWaitnow fails with an error instead of leaving the parent run waiting forever, and the batches page says so rather than reporting that it resumed. (#4397) - Triggering a run with a very large
priorityno longer fails. The priority is now capped to the highest supported value instead of erroring out. (#4512) - Fix debounce doing nothing when the delay was longer than an hour, which made every trigger
create its own run instead of collapsing onto the debounce key. Debounced runs now keep being
pushed back for as long as triggers keep arriving, so setmaxDelaywhen the work has to happen
eventually, and settings that could never debounce are rejected rather than silently ignored. (#4521) - Honor the configured database connection timeout so brief connection spikes no longer surface as spurious "can't reach database server" errors. (#4513)
- Fixed a rare case where a single run or span carrying data that could not be ingested would make other runs or trace events in the same batch go missing from the runs list, traces, and logs. Now the rest of the batch is always kept: an affected run still appears with its status (only its un-ingestable output is dropped), and an affected trace event or payload is skipped instead of taking down everything around it. (#4358)
- Fix the sidebar "Help & Feedback → Contact us" form sometimes not sending your message. It now sends reliably every time. (#4445)
- Requests spanning multiple tasks now require permission for every requested task instead of accepting permission for only one task. (#4389)
- The four charts at the top of the Queues page now always cover the whole environment, so paging through or re-sorting your queues no longer changes them. The scheduling delay chart also leaves a gap where no runs started, instead of dropping to zero. (#4486)
- Reject alert webhook destinations in reserved benchmarking IP ranges. (#4528)
- Fix the health report failing with an internal error when requested through the API. (#4488)
- Triggering a task no longer intermittently fails to create the run when a database write briefly stalls. (#4514)
- Team members who join an organization through single sign-on or directory sync now get their own development environment for every project, so the dashboard's dev view and
trigger devbecome available to them without an admin having to set anything up. Members who were already missing one are repaired the next time their membership is synced from your identity provider. (#4426) - Fixed a rare error where triggering a task could fail if the idempotency key or debounce key contained an invalid null character. The character is now removed automatically and the run is created as normal. (#4527)
All packages: v4.5.10
@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
Eric Allam, Chris Arderne, @nicktrn, Matt Aitken, claude[bot], Katia Bulatova, Wes Mason, James Ritchie, @isshaddad, github-actions[bot], Oskar Otwinowski
Full changelog: v4.5.9...v4.5.10