2 new features, 11 new MCP tools, 6 bug fixes, and 15 server changes.
Highlights
Task-level and global TTL defaults
You can now set TTL (time-to-live) defaults at the task level in your task definition and globally in trigger.config.ts. If a run isn't dequeued within the configured window, it expires and never executes. Per-trigger overrides still take precedence over both.
// trigger.config.ts — set a project-wide defaultimport { defineConfig } from "@trigger.dev/sdk";export default defineConfig({ project: "<project ref>", ttl: "1h", // runs expire after 1 hour if not dequeued});
// task — override the global default for this taskexport const myTask = task({ id: "my-task", ttl: "30m", // this task's runs expire after 30 minutes run: async (payload) => { // ... },});
Set ttl: 0 on a task to opt out of the global default entirely. See trigger.config.ts for all configuration options. (#3196)
Multi-provider object storage for large run outputs
Large run outputs now use a new storage API that supports switching object storage providers with zero-downtime migration via protocol-based routing. IAM role-based authentication is also supported, so no access keys are required. (#3275)
CLI improvements
- Platform notifications: the
trigger devandtrigger logincommands now fetch and display notifications (info, warn, error, success) from the server with color markup rendering. Discovery-based filtering shows notifications based on your project file patterns. Use--skip-platform-notificationsto disable. (#3254)
MCP server improvements
New tools
get_span_details— inspect individual spans within a run trace, including attributes, timing, events, and AI enrichment (model, tokens, cost). Span IDs are now shown inget_run_detailstrace output for easy discovery. (#3255)get_query_schema— discover available TRQL tables and columnsquery— execute TRQL queries against your datalist_dashboards— list built-in dashboards and their widgetsrun_dashboard_query— execute a single dashboard widget querywhoami— show current profile, user, and API URLlist_profiles— list all configured CLI profilesswitch_profile— switch the active profile for the MCP sessionstart_dev_server— starttrigger devin the background and stream outputstop_dev_server— stop the running dev serverdev_server_status— check dev server status and view recent logs
Improvements
--readonlyflag hides write tools (deploy,trigger_task,cancel_run) so the AI cannot make changesget_run_detailstrace output is now paginated with cursor supportget_query_schemanow requires a table name and returns only that table's schemaget_current_workerno longer inlines payload schemas — use the newget_task_schematool instead- Query results formatted as text tables instead of JSON (~50% fewer tokens)
cancel_run,list_deploys,list_preview_branchesformatted as text instead of raw JSON- Schema and dashboard API responses cached to avoid redundant fetches
- MCP tool annotations (
readOnlyHint,destructiveHint) added to all tools read:queryJWT scope added for query endpoint authorization- CLI API client now propagates the trigger source via HTTP headers (#3241)
Bug fixes
- Fix dev CLI leaking build directories on rebuild. Deprecated workers are now pruned (capped at 2 retained) when no active runs reference them, and the watchdog cleans up
.trigger/tmp/when killed ungracefully (e.g. SIGKILL from pnpm). (#3224) - Fix
--loadflag being silently ignored on local and self-hosted builds. (#3114) - Fixed
search_docsMCP tool failing due to a renamed upstream Mintlify tool (SearchTriggerDev→search_trigger_dev). - Fixed
list_deploysMCP tool failing when deployments have nullruntimeorruntimeVersionfields. (#3139) - Fixed
list_preview_branchesMCP tool crashing due to incorrect response shape access. - Fixed
metricsTRQL table column documented asvalueinstead ofmetric_value.
Server changes
These changes are included in the v4.4.4 Docker image and are already live on Trigger.dev Cloud:
- Add admin UI for viewing and editing feature flags with org-level overrides and global defaults. (#3291)
- Add
allowRollbacksquery param to the promote deployment API to support version downgrades. (#3214) - Automatic LLM cost calculation for spans with GenAI semantic conventions. Costs are calculated from an in-memory pricing registry and written to span attributes (
trigger.llm.*) and a newllm_metrics_v1ClickHouse table capturing usage, cost, latency, and finish reason. (#3213) - New
GET /api/v1/runs/:runId/spans/:spanIdendpoint returning span properties, events, AI enrichment, and triggered child runs. (#3255) - Multi-provider object storage with protocol-based routing for zero-downtime migration. Adds IAM role-based auth for object stores (no access keys required). (#3275)
- Platform notifications for informing users about new features and platform events directly in the CLI and dashboard. (#3254)
- Private networking support via AWS PrivateLink. Includes BillingClient methods for managing connections, org settings UI for connection management, and supervisor pod labels for CiliumNetworkPolicy matching. (#3264)
- Reduce run start latency by skipping the intermediate queue when concurrency is available, rolled out per-region and enabled automatically for development environments. (#3299)
- Environment variable page search now matches on environment type (production, staging, development, preview) and branch name, not just variable name and value. (#3302)
- Set
application_nameon Prisma connections fromSERVICE_NAMEfor DB load attribution by service. (#3348) - Add p-retry (3 attempts, 500ms–2s exponential backoff) around object store uploads in
BatchPayloadProcessorand removex-should-retry: falsefrom batch 500 responses so the SDK's existing retry path can recover. (#3331) - Concurrency-keyed queues now use a single master queue entry per base queue instead of one per key, preventing high-CK-count tenants from starving others on the same shard. (#3219)
- Reduce lock contention when processing large
batchTriggerAndWaitbatches by removing the per-item Redis lock acquisition. (#3232) - Strip
securequery parameter fromQUERY_CLICKHOUSE_URLbefore passing to the ClickHouse client, fixing a startup crash withError: Unknown URL parameters: secure. (#3204) - Fix dev environment selection for teams with multiple members: now filters DEVELOPMENT environments by
orgMember.userIdto ensure the logged-in user's dev environment is returned. (#3273)
How to upgrade
Update the trigger.dev/* packages to v4.4.4 using your package manager:
npx trigger.dev@latest update # npmpnpm dlx trigger.dev@latest update # pnpmyarn dlx trigger.dev@latest update # yarnbunx trigger.dev@latest update # bun
Self-hosted users: update your Docker image to ghcr.io/triggerdotdev/trigger.dev:v4.4.4.




