Troubleshooting
Runs stay in "Running" forever, and nothing is logged
Inngest is calling an address that answers but is not your service — usually because the app
registered the address it was reached at during the sync, which only exists on the other side of a
proxy, a Docker network or a cluster. Set
serveOrigin to the origin
Inngest can reach.
InngestStrategy has to be started before the application listens
startAllMicroservices() was called after listen(). Swap them — see
Express and Fastify.
/api/inngest answers 404 on Express
The strategy was started after app.init(), so its route sits behind Nest's not-found handler.
Call startAllMicroservices() before init() as well — which listen() calls for you when the
microservices were started first.
InngestStrategy needs a Nest HTTP adapter
Pass httpAdapter: app.getHttpAdapter(), or call strategy.setHttpAdapter(...) before
startAllMicroservices(). A standalone microservice (NestFactory.createMicroservice) has no HTTP
server to mount on; use a hybrid application.
'orders.#' stands for no event name … nothing will ever trigger this handler
The pattern has a wildcard the default resolver cannot spell out, or every name it stands for was claimed by a more specific pattern. Give the strategy a trigger resolver, or bind literal names.
… Inngest takes at most 10 triggers on one function
A resolver answered more than ten names for one pattern. Split it into several patterns.
… would both create the Inngest function '…'
Two patterns derive the same function id. Give one of them an id:
@InngestEventPattern(pattern, { id }).
A NonRetriableError is retried, and the run's error says "Internal server error"
Nest's default exception filter replaced the error. Apply
InngestExceptionFilter.
Unable to resolve signature of method decorator when called as an expression
NestJS 12's @EventPattern with a typed @Ctx() parameter. Use @InngestEventPattern, or
@EventPattern<string>(pattern) — see Receiving events.
context.getPattern is not a function
A pipe applied with @UsePipes() also transformed the @Ctx() parameter. Bind the pipe to the
payload: @Payload(MyPipe).
A side effect happens several times in one run
Code outside a step.run runs on every invocation of a function with steps. Move the side effect
into a step — see Steps.
send() errors with "gets no reply"
Inngest events have no reply. Use emit(); to call a function and wait for its result from another
function, use step.invoke.
Events are sent but no function runs (locally)
- The dev server does not know the app: open
http://localhost:8288, Apps, and synchttp://<your app>/api/inngest, or start the dev server with-upointing at it. - The client is not in dev mode and is sending to Inngest Cloud: set
isDev: trueorINNGEST_DEV=1.