610e7395 Thanks @scottnuma! - Enable sessions propagation by default#1645 aeae58dd Thanks @scottnuma! - Add a toggle to clients to control sessions propagation
#1646 39aee6f7 Thanks @scottnuma! - Add sessions support to deferred runs
#1678 c838b982 Thanks @scottnuma! - Sessions propagate into child runs, gated behind an opt-in client config
#1674 6b0ae370 Thanks @Linell! - Fix TS2742 errors in projects that use declaration or composite true by exporting SendSignalResponse appropriately.
#1658 edcb6536 Thanks @amh4r! - Fix wrapStep middleware hook sometimes skipped for parallel steps
#1667 961d2807 Thanks @jakobevangelista! - Allow sandbox Create to configure environment variables inherited by commands and managed processes.
#1654 23ddbc2e Thanks @jakobevangelista! - Add experimental sandbox APIs, including the direct inngest.sandboxes client and the opt-in durable step.sandbox surface enabled by sandboxMiddleware().
#1663 0bec14ee Thanks @mar-inngest! - Prevent Connect lease renewals from using a draining or replaced connection.
#1665 3f25b191 Thanks @Linell! - Sub-second durations no longer get dropped. step.sleep("id", 500) used to resolve immediately; it now rounds up and sleeps a full second, the minimum resolution of a durable wait. The same rounding applies to waitForEvent, invoke, waitForSignal, and cancelOn timeouts.
3cc9a110 Thanks @rhino1998! - feat(metadata): Extract AI call latency#1648 106aaaf9 Thanks @Linell! - Fix errant step.ai.wrap warning
#1649 690c0544 Thanks @Linell! - More informative errors for invalid functions
#1620 08ef03b9 Thanks @KiKoS0! - Fix run hangs on parallel steps when optimizeParallelism is off
#1615 9b5ea64c Thanks @Linell! - Fix a crash when using serve({ streaming: true }) and the client disconnects before a run completes
#1618 922e2024 Thanks @Linell! - Fix step.run and step.invoke output types collapsing to {} for objects with optional properties when using two or more middleware
2b800c73 Thanks @scottnuma! - Support parsing operation name for AI Metadata Extraction#1599 c02cc265 Thanks @scottnuma! - Support deprecated gen_ai.system for AI Metadata Extraction
#1600 2462e875 Thanks @scottnuma! - Support parsing finish reasons for AI Metadata Extraction
#1605 cd18ed18 Thanks @Linell! - Suppress unnecessary warning log for inngest.experiment.score.
#1602 e2e89ead Thanks @amh4r! - Fix Extended Traces not appearing when checkpointing disabled
#1594 124e55f8 Thanks @scottnuma! - Expand AI step metadata extraction to more OTel GenAI span attributes. The SDK now records additional model, provider, response id, token, and request parameter fields from OTel GenAI spans while continuing to ignore prompt and response content.
This removes the previous metadata extraction for Open Inference, Vercel AI SDK-specific, and Langfuse-specific span attributes.
#1595 aa315c7e Thanks @amh4r! - Add opt-out for AI metadata extraction
#1521 a69ec0e2 Thanks @jakobevangelista! - Add experimental createScorer function
#1521 a69ec0e2 Thanks @jakobevangelista! - Add experimental scoring primitives for writing run- and step-scoped inngest.score metadata via inngest.score() and scoreMiddleware()-gated step.score().
748c6cc4 Thanks @amh4r! - Deprecate Extended Traces provider creation. behaviour: "createProvider" and the "auto" fallback remain functional, but now direct users to preload @inngest/otel/node and extend that provider instead.#1577 1bc2ac7c Thanks @scottnuma! - Add metadata to steps containing LLM calls instrumented with OTel by Langfuse
#1547 04a79c95 Thanks @jakobevangelista! - Add sessions to event payloads
50a349b7 Thanks @rhino1998! - fix(extended traces): Emit extended trace spans parented to the finalized step span#1567 1c3ad876 Thanks @Linell! - Deprecate optimizeParallelism: false — use group.parallel({ mode: "race" }) for race semantics instead. Opting out prevents runs from resuming checkpointing after a Promise.all.
#1568 bd6016c1 Thanks @scottnuma! - Add metadata to steps containing OTel instrumented LLM calls
ba9874dc Thanks @rhino1998! - feat(experiments): Rename experiment_name -> experiment in metadata#1551 0af90c3c Thanks @rhino1998! - fix: Add step attribution attributes to all extended trace spans
#1556 5bd87775 Thanks @Linell! - Update internal tracing values used for identifying checkpointed data.
#1548 7be1cee3 Thanks @amh4r! - Fix unnecessary outgoing Durable Endpoint request
#1511 79558be2 Thanks @Linell! - Fix duplicate execution when response terminates early
#1522 ebeb4516 Thanks @Linell! - Bump minimum @opentelemetry/auto-instrumentations-node to 0.75.0 to address
GHSA-q7rr-3cgh-j5r3 in the
transitive @opentelemetry/sdk-node / @opentelemetry/exporter-prometheus packages.
Note that upstream auto-instrumentations-node@0.72.0 dropped bundled Fastify,
instrumentation, so if you relied on it for tracing your Fastify routes, add
@opentelemetry/instrumentation-fastify directly.
#1540 10dad398 Thanks @amh4r! - Fix attempt count not resetting during checkpointing
#1544 f1ee6f34 Thanks @jacobheric! - Allow useRealtime to accept direct client subscription tokens from getClientSubscriptionToken() when channel and topics are provided as hook options, and avoid reconnecting solely because an inline token factory or token object gets a new render identity.
#1506 342a7369 Thanks @amh4r! - Add option to disable unauthed PUT requests
#1518 fd71a95b Thanks @Linell! - Fix RetryAfterError not respected
#1512 be675a3d Thanks @amh4r! - Fix waitForSignal not in middleware StepType union
#1513 cbad05c3 Thanks @jakobevangelista! - Standardize variant naming to variant instead of variant_selected
#1516 1bca44a8 Thanks @BrunoScheufler! - - Add Request ID & Job ID to context and logs
5c8f50e1 Thanks @scottnuma! - Accept Temporal.Duration, Temporal.Instant, and Temporal.ZonedDateTime (and their *Like variants) wherever a timeout or sleep duration is taken: step.sleep(), step.waitForEvent(), step.waitForSignal(), step.invoke(), and function-level cancelOn timeouts. Durations are treated as relative waits; instants and zoned date-times as absolute deadlines.60cda73f Thanks @mar-inngest! - Fix Connect shutdown getting stuck when a late lease-extension ACK recreates a stale in-flight lease entry after request completion or lease loss#1492 68dcd8aa Thanks @amh4r! - Reduce response info when unauthorized
#1490 a8027116 Thanks @amh4r! - Authed introspection returns partial signing key hash
#1479 6b9769ca Thanks @scottnuma! - Fix step.sendSignal() return type to match runtime: Promise<InngestApi.SendSignalResponse> ({ runId: string | undefined }) instead of Promise<null>
#1483 d0a59629 Thanks @Linell! - Fix run IDs not URL encoded in Durable Endpoints
#1481 970ded9b Thanks @Linell! - Improves HMAC signature verification by using a constant-time comparison, which mitigates a potential timing-based signature-recovery attack against the request signature. Also improves handling of timestamps in signatures, including malformed or future-dated values.
#1472 9df36dee Thanks @Linell! - Fix empty body on Vercel serverless Node handlers
#1482 e34972d3 Thanks @Linell! - Hash the signing key used when exporting OTel traces
#1460 ce5110de Thanks @amh4r! - Fix multi-byte UTF-8 chars corrupted when split over chunks
#1461 d75b59ce Thanks @amh4r! - Fix CountQueuingStrategy erroring when stubbed in edge runtimes
#1366 aca72f88 Thanks @Linell! - Fix extendProvider() for OTel SDK v2 where addSpanProcessor() was removed.
Move @opentelemetry/auto-instrumentations-node and related imports from static top-level to dynamic await import() inside createProvider(). This prevents module-level monkey-patching side effects that broke inngest.send() when combined with host app OTel setups (e.g. Sentry). See #1324.
#1457 d151b404 Thanks @amh4r! - Fix using CountQueuingStrategy when not available
#1455 15495e03 Thanks @amh4r! - Fix dependencyInjection not working statically at function level
#1435 d8fc84b2 Thanks @KiKoS0! - Fix Connect worker blocking flushing & termination issues
#1437 ad7ae27a Thanks @amh4r! - Fix worker thread strategy missing graceful shutdown
#1420 38c6e27c Thanks @BrunoScheufler! - Connect: Refactor internal architecture
#1412 556a32eb Thanks @rhino1998! - Extended Traces: Include step attributes in userland spans
#1414 7e699a06 Thanks @rhino1998! - Step Metadata: Collapse step/step_attempt behavior
#1418 31300308 Thanks @BrunoScheufler! - Fix graceful shutdown cleanup in case of draining connection replacement
494364eb Thanks @jpwilliams! - Fix type exports not being available for composite: true projects
627c0720 Thanks @jacobheric! - Adds first class, internal realtime support with improved DX for publishing and subscribing to typed channels and topics. See: https://www.inngest.com/docs/features/realtime#1395 c4861ff8 Thanks @amh4r! - Error when function config is v3-style
#1389 905d4b24 Thanks @amh4r! - Ensure we track retries when creating a new run
#1396 9baa304f Thanks @amh4r! - Fix onRunError hook's isFinalAttempt not true on final attempt
#1387 983f527b Thanks @amh4r! - Fix checkpointing maxRuntime causing function run hang
#1387 983f527b Thanks @amh4r! - Fallback to async flow on checkpoint error
e8024132 Thanks @amh4r! - See list of changes in the migration guide: https://www.inngest.com/docs/reference/typescript/v4/migrations/v3-to-v4#1359 b4d9833f Thanks @Linell! - fix: use deterministic IDs for correct checkpointed parenting
#1370 037336dc Thanks @amh4r! - Fix mishandling drain message (Connect only)
#1350 470fdb98 Thanks @amh4r! - Fix false NESTING_STEPS error
#1356 2e961c21 Thanks @amh4r! - Fix checkpointing maxRuntime causing function run hang
4f45adb7 Thanks @jakobevangelista! - Fix signing key propagation from serve() options to InngestApi for outgoing API calls#1258 e17a148f Thanks @amh4r! - Connect: add worker thread support
#1313 bbdab785 Thanks @tonyhb! - Add step names and IDs to step not found error
#1306 b74bd1b9 Thanks @amh4r! - Add a log before the 405 response
#1288 daf858f0 Thanks @jpwilliams! - Add the ability to create Durable Endpoint Proxies, used to redirect to Inngest run results using a user's own domain.
import { Inngest, step } from "inngest";
import { endpointAdapter } from "inngest/edge";
const inngest = new Inngest({
id: "bun-sync-example",
endpointAdapter: endpointAdapter.withOptions({
asyncRedirectUrl: "/poll",
}),
});
const server = Bun.serve({
port: 3000,
routes: {
"/": inngest.endpoint(async (_req) => {
const foo = await step.run("example/step", async () => {
return "Hello from step!";
});
return new Response(`Step result: ${foo}`);
}),
// Proxy endpoint - fetches results from Inngest and decrypts if needed
"/poll": inngest.endpointProxy(),
},
});
console.log(`Listening on ${server.hostname}:${server.port}`);
#1284 5717c64b Thanks @jpwilliams! - Add a Durable Endpoints Next.js Adapter
// app/api/my-endpoint/route.ts
import { Inngest, step } from "inngest";
import { endpointAdapter } from "inngest/next";
const inngest = new Inngest({
id: "my-app",
endpointAdapter,
});
export const GET = inngest.endpoint(async (req) => {
const foo = await step.run("my-step", () => ({ foo: "bar" }));
return new Response(`Result: ${JSON.stringify(foo)}`);
});
#1297 32b59507 Thanks @ptts! - Fix extendProvider() failing to extend existing OTel providers by unwrapping the ProxyTracerProvider returned by trace.getTracerProvider(). Previously, the proxy wrapper hid the underlying provider's addSpanProcessor method, causing "auto" mode to fall through to createProvider() and register duplicate instrumentations.
#1292 9c8f5d94 Thanks @jpwilliams! - Fix Durable Endpoints not capturing and obeying step plan forcing, resulting in strange behaviour during parallel flows
#1285 9a7b0528 Thanks @jpwilliams! - Handle checkpointing failures more gracefully across async checkpointing and Durable Endpoints
8e377c27 Thanks @jpwilliams! - Add isInngestRequest() export for lightly checking if a Request looks like it comes from Inngest#1269 8e377c27 Thanks @jpwilliams! - Stabilise execution version when switching from sync to async
#1269 8e377c27 Thanks @jpwilliams! - Use endpoint adapters for experimental Durable Endpoints instead of wrappers
#1250 ad078067 Thanks @Linell! - NonRetriableError && RetryAfterError instanceof checks help resolve issues of errors not working as expected in monorepos.
#1168 4371be38 Thanks @Linell! - Add Anthropic Open Telemetry instrumentation so that calls to the Anthropic API are automatically captured.
#1269 8e377c27 Thanks @jpwilliams! - Rename http/run.started event created from Durable Endpoints to inngest/http.request
#1266 b6361ee1 Thanks @djfarrelly! - Fix issue where middleware transformOutput is not called.
#1226 dab4607c Thanks @jpwilliams! - Adds the ability to configure the number of bufferedSteps and maxInterval when checkpointing.
import { inngest } from "./client";
export const helloWorld = inngest.createFunction(
{
id: "hello-world",
checkpointing: { bufferedSteps: Infinity, maxInterval: "5s" },
},
{ event: "demo/event.sent" },
async ({ event, step }) => {
const a = await step.run("a", () => "a");
const b = await step.run("b", () => "b");
const c = await step.run("c", () => "c");
return {
message: `Hello ${event.name}! ${a} ${b} ${c}`,
};
},
);
If checkpointing: true is used, bufferedSteps defaults to 1 and no maxInterval is set.
#1093 ad044e05 Thanks @jpwilliams! - Add realtime client methods to inngest:
inngest.realtime.publish()inngest.realtime.getSubscriptionToken()step.realtime.publish()#1267 093c4f96 Thanks @amh4r! - Fix not properly handling transfer chunked requests
#1233 df7d3023 Thanks @Linell! - Lazily load ulid to avoid issues in edge environments.
#1257 0eb6b473 Thanks @Linell! - Use native Web Crypto API for HMAC-SHA256 signing with hash.js fallback
This change improves performance by using the native Web Crypto API when available for request signature verification. Falls back to hash.js for environments without crypto support.
#1226 dab4607c Thanks @jpwilliams! - Correctly access parallel step IDs from resumed sync requests
#1226 dab4607c Thanks @jpwilliams! - Default to v2 execution version when checkpointing
#1244 f5c565e8 Thanks @jpwilliams! - Ensure execution version doesn't slide when going to/from checkpointing
#1245 6694bccc Thanks @jpwilliams! - Fix async data fetching not happening with optimizedParallelism: true
#1215 29307e2e Thanks @rhino1998! - Fix step.fetch response status code
#1222 ecf46a58 Thanks @amh4r! - Remove "authentication_succeeded: false" when responding to unsigned requests
#1214 326fe06b Thanks @djfarrelly! - Fix Connect heartbeater stops too soon during shutdown