Skip to content

Tags: triggerdotdev/trigger.dev

Tags

docs-release-2026-10-15

Toggle docs-release-2026-10-15's commit message
docs(webhooks): publish the webhooks private beta docs

Mono-RevId: bb6728e6f219c8de7fd58500bb0629e311aecea4

docs-release-2026-10-15-2

Toggle docs-release-2026-10-15-2's commit message
docs(webhooks): pnpm-first beta install and release age exemptions

Webhooks private beta docs: pnpm-first install steps, and how to exempt
the beta packages from a package manager's minimum release age policy.

Mono-RevId: bef46032aba4ee4d7a250410e2cb5e5be89b1cb5

v4.7.4

Toggle v4.7.4's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
chore: release v4.7.4 (#5015)

## Summary
5 new features, 12 improvements, 6 bug fixes.

## Improvements
- Self-hosted instances can require custom deploy base images per
runtime via the new `DEPLOY_BASE_IMAGES` and `DEPLOY_BUILD_BASE_IMAGES`
webapp settings. The CLI builds on the images the instance specifies,
and older CLIs are rejected with an upgrade message.
([#5005](#5005))
- Add a `replay_run` tool to the MCP server, so your AI assistant can
replay a run, optionally with a new payload, metadata, tags, machine,
version, delay or other trigger options. It is hidden in `--readonly`
mode.
([`ff2aa236e`](ff2aa23))
- Override a concurrency limit's `perKey` for a single `concurrencyKey`:
`concurrencyLimits.override(name, { concurrencyKey, perKey, ttl })` caps
that one key under that one limit for a while (7 days by default, 30 at
most), `reset(name, { concurrencyKey })` clears it, and `retrieve(name,
{ concurrencyKey })` shows the key's bound and when the override
expires.
([`c49fd05f4`](c49fd05))
- `runs.replay()` now takes options, so you can replay a run with a
different payload, metadata, tags, queue, machine, version, delay and
other trigger options. Anything you leave out comes from the original
run, as before, and the payload is serialized like `trigger()`, so
values like `Date` and `BigInt` keep their types.
([`ff2aa236e`](ff2aa23))
  
  ```ts
  import { runs } from "@trigger.dev/sdk";
  
  await runs.replay("run_1234", {
  payload: { userId: "user_456" },
  tags: ["replayed"],
  delay: "10m",
  });
  ```

## Server changes

These changes affect the self-hosted Docker image and Trigger.dev Cloud:

- Self-hosted instances can add a Cloudflare Turnstile bot check to the
magic-link sign-in form by setting `TURNSTILE_SITE_KEY` and
`TURNSTILE_SECRET_KEY`. It's off unless both are set.
- Recent deployments started from the GitHub integration or a native CLI
deploy can be redeployed from the deployments list, rebuilding the same
commit or upload as a new deployment.
- Each webhook endpoint's request rate limit now comes from the
organization's plan and can be raised per organization, and the limits
page shows it.
- Each environment's webhook endpoints now share a rate limit that
counts larger request bodies as more than one request, set by the
organization's plan and shown on the limits page.
- Webhooks now appear in the dashboard side menu with a Beta badge, and
organizations without access can request beta access from the Webhooks
page. The New badges on Sessions, Prompts and Models are gone.
- The new API key dialog's access summary now shows Errors, Webhooks and
Waitpoints access, and API keys with waitpoint access can create, list
and retrieve waitpoint tokens.
- Log search uses whole-word matching for ASCII alphabetic terms, keeps
substring matching for other terms, and incrementally searches older
logs without blocking the page.
- Magic links now only sign you in from the browser that requested them,
so a link opened elsewhere (including by an email security scanner) no
longer logs anyone in. Self-hosted instances can turn this off with
`MAGIC_LINK_SAME_BROWSER_REQUIRED=false`.
- The multi-factor authentication login page now focuses the code input,
accepts pasted codes, and submits as soon as all six digits are entered.
- Dashboard tabs left in the background now pause their live updates
after 30 seconds and catch up as soon as you return, so idle tabs stop
reloading data nobody is looking at.
- Preview branch auto-archiving is now always available, with no feature
flag to enable first.
- Large run traces now load in chunks and update live without reloading
the page, on child run pages as well as root runs.
- The run page shows one clear trace status next to Cancel and Replay:
whether the run is live, still loading, only partially shown, or failed
to load (with a retry). Search, filters and the run actions now share a
single full-width toolbar.
- Keep blank Vercel imports from overwriting existing values when the
default-off empty environment variable feature is enabled.
- Errors on the login page, such as an expired or invalid magic link, no
longer disappear a moment after the page loads in a new browser.
- Magic-link sign-in emails now always link to `LOGIN_ORIGIN`, whatever
host the request came in on.
- Parent and root metadata updates from child tasks no longer stall
behind a parent run that is being updated by many children at once, and
can optionally be buffered in Redis so they survive a webapp restart.
- Revoking a personal access token is now permanent. Logging in with the
CLI again issues a new token instead of reinstating the revoked one, so
you can rotate a leaked CLI token by revoking it and running `trigger
logout` then `trigger login`.
- Webhook deliveries from a provider's shared IP addresses are no longer
throttled by other customers' traffic or by a spoofed `X-Forwarded-For`
header; the per-IP limit now applies only to requests for endpoints that
don't exist, and every ingest 429 includes `Retry-After`.

<details>
<summary>Raw changeset output</summary>

# Releases
## @trigger.dev/build@4.7.4

### Patch Changes

- Updated dependencies:
  - `@trigger.dev/core@4.7.4`
## trigger.dev@4.7.4

### Patch Changes

- Self-hosted instances can require custom deploy base images per
runtime via the new `DEPLOY_BASE_IMAGES` and `DEPLOY_BUILD_BASE_IMAGES`
webapp settings. The CLI builds on the images the instance specifies,
and older CLIs are rejected with an upgrade message.
([#5005](#5005))
- Add a `replay_run` tool to the MCP server, so your AI assistant can
replay a run, optionally with a new payload, metadata, tags, machine,
version, delay or other trigger options. It is hidden in `--readonly`
mode.
([`ff2aa236e`](ff2aa23))
- Updated dependencies:
  - `@trigger.dev/core@4.7.4`
  - `@trigger.dev/build@4.7.4`
  - `@trigger.dev/schema-to-json@4.7.4`
## @trigger.dev/core@4.7.4

### Patch Changes

- Override a concurrency limit's `perKey` for a single `concurrencyKey`:
`concurrencyLimits.override(name, { concurrencyKey, perKey, ttl })` caps
that one key under that one limit for a while (7 days by default, 30 at
most), `reset(name, { concurrencyKey })` clears it, and `retrieve(name,
{ concurrencyKey })` shows the key's bound and when the override
expires.
([`c49fd05f4`](c49fd05))
- Self-hosted instances can require custom deploy base images per
runtime via the new `DEPLOY_BASE_IMAGES` and `DEPLOY_BUILD_BASE_IMAGES`
webapp settings. The CLI builds on the images the instance specifies,
and older CLIs are rejected with an upgrade message.
([#5005](#5005))
- `runs.replay()` now takes options, so you can replay a run with a
different payload, metadata, tags, queue, machine, version, delay and
other trigger options. Anything you leave out comes from the original
run, as before, and the payload is serialized like `trigger()`, so
values like `Date` and `BigInt` keep their types.
([`ff2aa236e`](ff2aa23))

  ```ts
  import { runs } from "@trigger.dev/sdk";

  await runs.replay("run_1234", {
    payload: { userId: "user_456" },
    tags: ["replayed"],
    delay: "10m",
  });
  ```
## @trigger.dev/python@4.7.4

### Patch Changes

- Updated dependencies:
  - `@trigger.dev/sdk@4.7.4`
  - `@trigger.dev/core@4.7.4`
  - `@trigger.dev/build@4.7.4`
## @trigger.dev/react-hooks@4.7.4

### Patch Changes

- Updated dependencies:
  - `@trigger.dev/core@4.7.4`
## @trigger.dev/redis-worker@4.7.4

### Patch Changes

- Updated dependencies:
  - `@trigger.dev/core@4.7.4`
## @trigger.dev/rsc@4.7.4

### Patch Changes

- Updated dependencies:
  - `@trigger.dev/core@4.7.4`
## @trigger.dev/schema-to-json@4.7.4

### Patch Changes

- Updated dependencies:
  - `@trigger.dev/core@4.7.4`
## @trigger.dev/sdk@4.7.4

### Patch Changes

- Override a concurrency limit's `perKey` for a single `concurrencyKey`:
`concurrencyLimits.override(name, { concurrencyKey, perKey, ttl })` caps
that one key under that one limit for a while (7 days by default, 30 at
most), `reset(name, { concurrencyKey })` clears it, and `retrieve(name,
{ concurrencyKey })` shows the key's bound and when the override
expires.
([`c49fd05f4`](c49fd05))
- `runs.replay()` now takes options, so you can replay a run with a
different payload, metadata, tags, queue, machine, version, delay and
other trigger options. Anything you leave out comes from the original
run, as before, and the payload is serialized like `trigger()`, so
values like `Date` and `BigInt` keep their types.
([`ff2aa236e`](ff2aa23))

  ```ts
  import { runs } from "@trigger.dev/sdk";

  await runs.replay("run_1234", {
    payload: { userId: "user_456" },
    tags: ["replayed"],
    delay: "10m",
  });
  ```

- Updated dependencies:
  - `@trigger.dev/core@4.7.4`

</details>

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Oskar Otwinowski <oskar.otwinowski@gmail.com>

v.docker.4.7.4

Toggle v.docker.4.7.4's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
chore: release v4.7.4 (#5015)

## Summary
5 new features, 12 improvements, 6 bug fixes.

## Improvements
- Self-hosted instances can require custom deploy base images per
runtime via the new `DEPLOY_BASE_IMAGES` and `DEPLOY_BUILD_BASE_IMAGES`
webapp settings. The CLI builds on the images the instance specifies,
and older CLIs are rejected with an upgrade message.
([#5005](#5005))
- Add a `replay_run` tool to the MCP server, so your AI assistant can
replay a run, optionally with a new payload, metadata, tags, machine,
version, delay or other trigger options. It is hidden in `--readonly`
mode.
([`ff2aa236e`](ff2aa23))
- Override a concurrency limit's `perKey` for a single `concurrencyKey`:
`concurrencyLimits.override(name, { concurrencyKey, perKey, ttl })` caps
that one key under that one limit for a while (7 days by default, 30 at
most), `reset(name, { concurrencyKey })` clears it, and `retrieve(name,
{ concurrencyKey })` shows the key's bound and when the override
expires.
([`c49fd05f4`](c49fd05))
- `runs.replay()` now takes options, so you can replay a run with a
different payload, metadata, tags, queue, machine, version, delay and
other trigger options. Anything you leave out comes from the original
run, as before, and the payload is serialized like `trigger()`, so
values like `Date` and `BigInt` keep their types.
([`ff2aa236e`](ff2aa23))
  
  ```ts
  import { runs } from "@trigger.dev/sdk";
  
  await runs.replay("run_1234", {
  payload: { userId: "user_456" },
  tags: ["replayed"],
  delay: "10m",
  });
  ```

## Server changes

These changes affect the self-hosted Docker image and Trigger.dev Cloud:

- Self-hosted instances can add a Cloudflare Turnstile bot check to the
magic-link sign-in form by setting `TURNSTILE_SITE_KEY` and
`TURNSTILE_SECRET_KEY`. It's off unless both are set.
- Recent deployments started from the GitHub integration or a native CLI
deploy can be redeployed from the deployments list, rebuilding the same
commit or upload as a new deployment.
- Each webhook endpoint's request rate limit now comes from the
organization's plan and can be raised per organization, and the limits
page shows it.
- Each environment's webhook endpoints now share a rate limit that
counts larger request bodies as more than one request, set by the
organization's plan and shown on the limits page.
- Webhooks now appear in the dashboard side menu with a Beta badge, and
organizations without access can request beta access from the Webhooks
page. The New badges on Sessions, Prompts and Models are gone.
- The new API key dialog's access summary now shows Errors, Webhooks and
Waitpoints access, and API keys with waitpoint access can create, list
and retrieve waitpoint tokens.
- Log search uses whole-word matching for ASCII alphabetic terms, keeps
substring matching for other terms, and incrementally searches older
logs without blocking the page.
- Magic links now only sign you in from the browser that requested them,
so a link opened elsewhere (including by an email security scanner) no
longer logs anyone in. Self-hosted instances can turn this off with
`MAGIC_LINK_SAME_BROWSER_REQUIRED=false`.
- The multi-factor authentication login page now focuses the code input,
accepts pasted codes, and submits as soon as all six digits are entered.
- Dashboard tabs left in the background now pause their live updates
after 30 seconds and catch up as soon as you return, so idle tabs stop
reloading data nobody is looking at.
- Preview branch auto-archiving is now always available, with no feature
flag to enable first.
- Large run traces now load in chunks and update live without reloading
the page, on child run pages as well as root runs.
- The run page shows one clear trace status next to Cancel and Replay:
whether the run is live, still loading, only partially shown, or failed
to load (with a retry). Search, filters and the run actions now share a
single full-width toolbar.
- Keep blank Vercel imports from overwriting existing values when the
default-off empty environment variable feature is enabled.
- Errors on the login page, such as an expired or invalid magic link, no
longer disappear a moment after the page loads in a new browser.
- Magic-link sign-in emails now always link to `LOGIN_ORIGIN`, whatever
host the request came in on.
- Parent and root metadata updates from child tasks no longer stall
behind a parent run that is being updated by many children at once, and
can optionally be buffered in Redis so they survive a webapp restart.
- Revoking a personal access token is now permanent. Logging in with the
CLI again issues a new token instead of reinstating the revoked one, so
you can rotate a leaked CLI token by revoking it and running `trigger
logout` then `trigger login`.
- Webhook deliveries from a provider's shared IP addresses are no longer
throttled by other customers' traffic or by a spoofed `X-Forwarded-For`
header; the per-IP limit now applies only to requests for endpoints that
don't exist, and every ingest 429 includes `Retry-After`.

<details>
<summary>Raw changeset output</summary>

# Releases
## @trigger.dev/build@4.7.4

### Patch Changes

- Updated dependencies:
  - `@trigger.dev/core@4.7.4`
## trigger.dev@4.7.4

### Patch Changes

- Self-hosted instances can require custom deploy base images per
runtime via the new `DEPLOY_BASE_IMAGES` and `DEPLOY_BUILD_BASE_IMAGES`
webapp settings. The CLI builds on the images the instance specifies,
and older CLIs are rejected with an upgrade message.
([#5005](#5005))
- Add a `replay_run` tool to the MCP server, so your AI assistant can
replay a run, optionally with a new payload, metadata, tags, machine,
version, delay or other trigger options. It is hidden in `--readonly`
mode.
([`ff2aa236e`](ff2aa23))
- Updated dependencies:
  - `@trigger.dev/core@4.7.4`
  - `@trigger.dev/build@4.7.4`
  - `@trigger.dev/schema-to-json@4.7.4`
## @trigger.dev/core@4.7.4

### Patch Changes

- Override a concurrency limit's `perKey` for a single `concurrencyKey`:
`concurrencyLimits.override(name, { concurrencyKey, perKey, ttl })` caps
that one key under that one limit for a while (7 days by default, 30 at
most), `reset(name, { concurrencyKey })` clears it, and `retrieve(name,
{ concurrencyKey })` shows the key's bound and when the override
expires.
([`c49fd05f4`](c49fd05))
- Self-hosted instances can require custom deploy base images per
runtime via the new `DEPLOY_BASE_IMAGES` and `DEPLOY_BUILD_BASE_IMAGES`
webapp settings. The CLI builds on the images the instance specifies,
and older CLIs are rejected with an upgrade message.
([#5005](#5005))
- `runs.replay()` now takes options, so you can replay a run with a
different payload, metadata, tags, queue, machine, version, delay and
other trigger options. Anything you leave out comes from the original
run, as before, and the payload is serialized like `trigger()`, so
values like `Date` and `BigInt` keep their types.
([`ff2aa236e`](ff2aa23))

  ```ts
  import { runs } from "@trigger.dev/sdk";

  await runs.replay("run_1234", {
    payload: { userId: "user_456" },
    tags: ["replayed"],
    delay: "10m",
  });
  ```
## @trigger.dev/python@4.7.4

### Patch Changes

- Updated dependencies:
  - `@trigger.dev/sdk@4.7.4`
  - `@trigger.dev/core@4.7.4`
  - `@trigger.dev/build@4.7.4`
## @trigger.dev/react-hooks@4.7.4

### Patch Changes

- Updated dependencies:
  - `@trigger.dev/core@4.7.4`
## @trigger.dev/redis-worker@4.7.4

### Patch Changes

- Updated dependencies:
  - `@trigger.dev/core@4.7.4`
## @trigger.dev/rsc@4.7.4

### Patch Changes

- Updated dependencies:
  - `@trigger.dev/core@4.7.4`
## @trigger.dev/schema-to-json@4.7.4

### Patch Changes

- Updated dependencies:
  - `@trigger.dev/core@4.7.4`
## @trigger.dev/sdk@4.7.4

### Patch Changes

- Override a concurrency limit's `perKey` for a single `concurrencyKey`:
`concurrencyLimits.override(name, { concurrencyKey, perKey, ttl })` caps
that one key under that one limit for a while (7 days by default, 30 at
most), `reset(name, { concurrencyKey })` clears it, and `retrieve(name,
{ concurrencyKey })` shows the key's bound and when the override
expires.
([`c49fd05f4`](c49fd05))
- `runs.replay()` now takes options, so you can replay a run with a
different payload, metadata, tags, queue, machine, version, delay and
other trigger options. Anything you leave out comes from the original
run, as before, and the payload is serialized like `trigger()`, so
values like `Date` and `BigInt` keep their types.
([`ff2aa236e`](ff2aa23))

  ```ts
  import { runs } from "@trigger.dev/sdk";

  await runs.replay("run_1234", {
    payload: { userId: "user_456" },
    tags: ["replayed"],
    delay: "10m",
  });
  ```

- Updated dependencies:
  - `@trigger.dev/core@4.7.4`

</details>

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Oskar Otwinowski <oskar.otwinowski@gmail.com>

helm-v4.7.4

Toggle helm-v4.7.4's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
chore: release v4.7.4 (#5015)

## Summary
5 new features, 12 improvements, 6 bug fixes.

## Improvements
- Self-hosted instances can require custom deploy base images per
runtime via the new `DEPLOY_BASE_IMAGES` and `DEPLOY_BUILD_BASE_IMAGES`
webapp settings. The CLI builds on the images the instance specifies,
and older CLIs are rejected with an upgrade message.
([#5005](#5005))
- Add a `replay_run` tool to the MCP server, so your AI assistant can
replay a run, optionally with a new payload, metadata, tags, machine,
version, delay or other trigger options. It is hidden in `--readonly`
mode.
([`ff2aa236e`](ff2aa23))
- Override a concurrency limit's `perKey` for a single `concurrencyKey`:
`concurrencyLimits.override(name, { concurrencyKey, perKey, ttl })` caps
that one key under that one limit for a while (7 days by default, 30 at
most), `reset(name, { concurrencyKey })` clears it, and `retrieve(name,
{ concurrencyKey })` shows the key's bound and when the override
expires.
([`c49fd05f4`](c49fd05))
- `runs.replay()` now takes options, so you can replay a run with a
different payload, metadata, tags, queue, machine, version, delay and
other trigger options. Anything you leave out comes from the original
run, as before, and the payload is serialized like `trigger()`, so
values like `Date` and `BigInt` keep their types.
([`ff2aa236e`](ff2aa23))
  
  ```ts
  import { runs } from "@trigger.dev/sdk";
  
  await runs.replay("run_1234", {
  payload: { userId: "user_456" },
  tags: ["replayed"],
  delay: "10m",
  });
  ```

## Server changes

These changes affect the self-hosted Docker image and Trigger.dev Cloud:

- Self-hosted instances can add a Cloudflare Turnstile bot check to the
magic-link sign-in form by setting `TURNSTILE_SITE_KEY` and
`TURNSTILE_SECRET_KEY`. It's off unless both are set.
- Recent deployments started from the GitHub integration or a native CLI
deploy can be redeployed from the deployments list, rebuilding the same
commit or upload as a new deployment.
- Each webhook endpoint's request rate limit now comes from the
organization's plan and can be raised per organization, and the limits
page shows it.
- Each environment's webhook endpoints now share a rate limit that
counts larger request bodies as more than one request, set by the
organization's plan and shown on the limits page.
- Webhooks now appear in the dashboard side menu with a Beta badge, and
organizations without access can request beta access from the Webhooks
page. The New badges on Sessions, Prompts and Models are gone.
- The new API key dialog's access summary now shows Errors, Webhooks and
Waitpoints access, and API keys with waitpoint access can create, list
and retrieve waitpoint tokens.
- Log search uses whole-word matching for ASCII alphabetic terms, keeps
substring matching for other terms, and incrementally searches older
logs without blocking the page.
- Magic links now only sign you in from the browser that requested them,
so a link opened elsewhere (including by an email security scanner) no
longer logs anyone in. Self-hosted instances can turn this off with
`MAGIC_LINK_SAME_BROWSER_REQUIRED=false`.
- The multi-factor authentication login page now focuses the code input,
accepts pasted codes, and submits as soon as all six digits are entered.
- Dashboard tabs left in the background now pause their live updates
after 30 seconds and catch up as soon as you return, so idle tabs stop
reloading data nobody is looking at.
- Preview branch auto-archiving is now always available, with no feature
flag to enable first.
- Large run traces now load in chunks and update live without reloading
the page, on child run pages as well as root runs.
- The run page shows one clear trace status next to Cancel and Replay:
whether the run is live, still loading, only partially shown, or failed
to load (with a retry). Search, filters and the run actions now share a
single full-width toolbar.
- Keep blank Vercel imports from overwriting existing values when the
default-off empty environment variable feature is enabled.
- Errors on the login page, such as an expired or invalid magic link, no
longer disappear a moment after the page loads in a new browser.
- Magic-link sign-in emails now always link to `LOGIN_ORIGIN`, whatever
host the request came in on.
- Parent and root metadata updates from child tasks no longer stall
behind a parent run that is being updated by many children at once, and
can optionally be buffered in Redis so they survive a webapp restart.
- Revoking a personal access token is now permanent. Logging in with the
CLI again issues a new token instead of reinstating the revoked one, so
you can rotate a leaked CLI token by revoking it and running `trigger
logout` then `trigger login`.
- Webhook deliveries from a provider's shared IP addresses are no longer
throttled by other customers' traffic or by a spoofed `X-Forwarded-For`
header; the per-IP limit now applies only to requests for endpoints that
don't exist, and every ingest 429 includes `Retry-After`.

<details>
<summary>Raw changeset output</summary>

# Releases
## @trigger.dev/build@4.7.4

### Patch Changes

- Updated dependencies:
  - `@trigger.dev/core@4.7.4`
## trigger.dev@4.7.4

### Patch Changes

- Self-hosted instances can require custom deploy base images per
runtime via the new `DEPLOY_BASE_IMAGES` and `DEPLOY_BUILD_BASE_IMAGES`
webapp settings. The CLI builds on the images the instance specifies,
and older CLIs are rejected with an upgrade message.
([#5005](#5005))
- Add a `replay_run` tool to the MCP server, so your AI assistant can
replay a run, optionally with a new payload, metadata, tags, machine,
version, delay or other trigger options. It is hidden in `--readonly`
mode.
([`ff2aa236e`](ff2aa23))
- Updated dependencies:
  - `@trigger.dev/core@4.7.4`
  - `@trigger.dev/build@4.7.4`
  - `@trigger.dev/schema-to-json@4.7.4`
## @trigger.dev/core@4.7.4

### Patch Changes

- Override a concurrency limit's `perKey` for a single `concurrencyKey`:
`concurrencyLimits.override(name, { concurrencyKey, perKey, ttl })` caps
that one key under that one limit for a while (7 days by default, 30 at
most), `reset(name, { concurrencyKey })` clears it, and `retrieve(name,
{ concurrencyKey })` shows the key's bound and when the override
expires.
([`c49fd05f4`](c49fd05))
- Self-hosted instances can require custom deploy base images per
runtime via the new `DEPLOY_BASE_IMAGES` and `DEPLOY_BUILD_BASE_IMAGES`
webapp settings. The CLI builds on the images the instance specifies,
and older CLIs are rejected with an upgrade message.
([#5005](#5005))
- `runs.replay()` now takes options, so you can replay a run with a
different payload, metadata, tags, queue, machine, version, delay and
other trigger options. Anything you leave out comes from the original
run, as before, and the payload is serialized like `trigger()`, so
values like `Date` and `BigInt` keep their types.
([`ff2aa236e`](ff2aa23))

  ```ts
  import { runs } from "@trigger.dev/sdk";

  await runs.replay("run_1234", {
    payload: { userId: "user_456" },
    tags: ["replayed"],
    delay: "10m",
  });
  ```
## @trigger.dev/python@4.7.4

### Patch Changes

- Updated dependencies:
  - `@trigger.dev/sdk@4.7.4`
  - `@trigger.dev/core@4.7.4`
  - `@trigger.dev/build@4.7.4`
## @trigger.dev/react-hooks@4.7.4

### Patch Changes

- Updated dependencies:
  - `@trigger.dev/core@4.7.4`
## @trigger.dev/redis-worker@4.7.4

### Patch Changes

- Updated dependencies:
  - `@trigger.dev/core@4.7.4`
## @trigger.dev/rsc@4.7.4

### Patch Changes

- Updated dependencies:
  - `@trigger.dev/core@4.7.4`
## @trigger.dev/schema-to-json@4.7.4

### Patch Changes

- Updated dependencies:
  - `@trigger.dev/core@4.7.4`
## @trigger.dev/sdk@4.7.4

### Patch Changes

- Override a concurrency limit's `perKey` for a single `concurrencyKey`:
`concurrencyLimits.override(name, { concurrencyKey, perKey, ttl })` caps
that one key under that one limit for a while (7 days by default, 30 at
most), `reset(name, { concurrencyKey })` clears it, and `retrieve(name,
{ concurrencyKey })` shows the key's bound and when the override
expires.
([`c49fd05f4`](c49fd05))
- `runs.replay()` now takes options, so you can replay a run with a
different payload, metadata, tags, queue, machine, version, delay and
other trigger options. Anything you leave out comes from the original
run, as before, and the payload is serialized like `trigger()`, so
values like `Date` and `BigInt` keep their types.
([`ff2aa236e`](ff2aa23))

  ```ts
  import { runs } from "@trigger.dev/sdk";

  await runs.replay("run_1234", {
    payload: { userId: "user_456" },
    tags: ["replayed"],
    delay: "10m",
  });
  ```

- Updated dependencies:
  - `@trigger.dev/core@4.7.4`

</details>

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Oskar Otwinowski <oskar.otwinowski@gmail.com>

docs-release-2026-10-14

Toggle docs-release-2026-10-14's commit message
Publish docs: v4.7.4 (per-key concurrency overrides, runs.replay opti…

…ons, trace API paging, docs accuracy fixes)

re2-test-supervisor-tri-12102

Toggle re2-test-supervisor-tri-12102's commit message
feat: stamp the worker cell and lane on runs at attempt start

Records, per run, which worker cluster (cell) and lane (`container` or
`microvm`) the most recent attempt executed in, so runs can be
attributed to the cluster that served them and queried by it.

The supervisor adds both values to every attempt start it proxies for a
runner, overriding anything the runner sends. The engine merges them
into the run's existing `annotations` inside the update that already
starts the attempt, replacing the previous stamp as a unit. Replication
projects them into two new `task_runs_v2` columns, `worker_cell` and
`worker_lane`. The cell name comes from the new optional
`TRIGGER_WORKER_CELL_NAME` supervisor env var (helm:
`supervisor.config.cellName`); the lane is derived from the selected
backend. Both also go into the worker instance metadata sent on connect,
and admins see them on the run inspector. Neither is exposed to
customers.

Mono-RevId: 87b2c6a5ce7724b4d32c2826fc74c266e3604c3a

re2-test-supervisor-main-f9fd2b8

Toggle re2-test-supervisor-main-f9fd2b8's commit message
fix(supervisor): allow native microVM restore subscriptions

Supervisor: allow compute restore subscriptions on the native Kubernetes microVM backend without a compute gateway URL.
Mono-RevId: e3ca49a622dd64b7aed290de0ea7528d423ace7b

build-supervisor-2026-10-07

Toggle build-supervisor-2026-10-07's commit message
feat(webapp): incremental live tail for the run trace view

Live runs in the run trace view now update incrementally. Instead of
reloading the whole trace on every update, the page fetches only the
rows written since its last read and merges them into the tree it
already has, so large live traces keep updating without re-downloading
everything. Progressive trace loading now always uses this live tail.

Mono-RevId: 8cc2387d2af102abc3a17d23b3ad1e0a2846aca5

v4.7.3

Toggle v4.7.3's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
chore: release v4.7.3 (#4997)

## Summary
1 new feature, 6 improvements, 4 bug fixes.

## Breaking changes
- Creating or resuming a session with `POST /api/v1/sessions` now
requires both session-write and task-trigger permissions. Scoped keys
and public tokens must grant `write:sessions` (or access to the target
session) and permission to trigger its task.

## Improvements
- Update the minimatch dependency to ^10.2.3.
([`5236799b7`](5236799))
- Add `trigger.dev orgs list` to show the organizations you belong to,
with their slugs and IDs. Use the slug with `trigger.dev projects create
--org`, including for organizations that don't have any projects yet.
`trigger.dev projects create` now activates the Free plan for
organizations that don't have a plan yet, matching `trigger.dev init`.
([`68ee6be4b`](68ee6be))
- Reports filed with the `submit_feedback` MCP tool now reach the
Trigger.dev team. They were being sent, but not somewhere anyone was
reading.
([`4a94982a1`](4a94982))
- Stopping a `chat.agent` turn whose `run()` returns a `streamText`
result no longer sends an `error` chunk with "An unexpected error
occurred". The turn ends quietly again and the run stays alive for the
next message.
([`64c3ba13c`](64c3ba1))
- `chat.createStartSessionAction`, `chat.headStart` and
`chat.startHeadStart` now accept `tags` for the Session itself, so chat
sessions can be filtered by tag on the Sessions page.
`triggerConfig.tags` still tags the session's runs.
([`9dbc5f984`](9dbc5f9))
  
  ```ts
  await startChatSession({
  chatId,
  clientData,
  tags: [`org:${org.slug}`, `user:${user.id}`],
  });
  ```

## Server changes

These changes affect the self-hosted Docker image and Trigger.dev Cloud:

- Self-hosted instances can block sign-in and sign-up from specific
email domains with the new `BLOCKED_EMAIL_DOMAINS` setting.
- Run traces now appear almost immediately and load progressively as you
watch, and much larger traces are viewable than before.
- The Logs page loads and searches faster, and busy environments no
longer fail to load it. Searches that are still too expensive now show a
message suggesting a narrower range instead of a generic error.
- Fix a rare case where a run could stay stuck executing after the child
run or wait it was waiting on had completed.
- Deployments with an unsupported `runtime` now fail with a 400 that
names the supported runtimes, instead of a generic 500
- Preserve the cancellation reason when a run that was executing is
finalized, instead of replacing it with the default text.

<details>
<summary>Raw changeset output</summary>

# Releases
## @trigger.dev/build@4.7.3

### Patch Changes

- Updated dependencies:
  - `@trigger.dev/core@4.7.3`
## trigger.dev@4.7.3

### Patch Changes

- Update the minimatch dependency to ^10.2.3.
([`5236799b7`](5236799))
- Add `trigger.dev orgs list` to show the organizations you belong to,
with their slugs and IDs. Use the slug with `trigger.dev projects create
--org`, including for organizations that don't have any projects yet.
`trigger.dev projects create` now activates the Free plan for
organizations that don't have a plan yet, matching `trigger.dev init`.
([`68ee6be4b`](68ee6be))
- Reports filed with the `submit_feedback` MCP tool now reach the
Trigger.dev team. They were being sent, but not somewhere anyone was
reading.
([`4a94982a1`](4a94982))
- Updated dependencies:
  - `@trigger.dev/build@4.7.3`
  - `@trigger.dev/core@4.7.3`
  - `@trigger.dev/schema-to-json@4.7.3`
## @trigger.dev/python@4.7.3

### Patch Changes

- Updated dependencies:
  - `@trigger.dev/sdk@4.7.3`
  - `@trigger.dev/build@4.7.3`
  - `@trigger.dev/core@4.7.3`
## @trigger.dev/react-hooks@4.7.3

### Patch Changes

- Updated dependencies:
  - `@trigger.dev/core@4.7.3`
## @trigger.dev/redis-worker@4.7.3

### Patch Changes

- Updated dependencies:
  - `@trigger.dev/core@4.7.3`
## @trigger.dev/rsc@4.7.3

### Patch Changes

- Updated dependencies:
  - `@trigger.dev/core@4.7.3`
## @trigger.dev/schema-to-json@4.7.3

### Patch Changes

- Updated dependencies:
  - `@trigger.dev/core@4.7.3`
## @trigger.dev/sdk@4.7.3

### Patch Changes

- Stopping a `chat.agent` turn whose `run()` returns a `streamText`
result no longer sends an `error` chunk with "An unexpected error
occurred". The turn ends quietly again and the run stays alive for the
next message.
([`64c3ba13c`](64c3ba1))
- `chat.createStartSessionAction`, `chat.headStart` and
`chat.startHeadStart` now accept `tags` for the Session itself, so chat
sessions can be filtered by tag on the Sessions page.
`triggerConfig.tags` still tags the session's runs.
([`9dbc5f984`](9dbc5f9))

  ```ts
  await startChatSession({
    chatId,
    clientData,
    tags: [`org:${org.slug}`, `user:${user.id}`],
  });
  ```

- Updated dependencies:
  - `@trigger.dev/core@4.7.3`
## @trigger.dev/core@4.7.3

</details>

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>