mastra-ai/mastra · error · Error

No Pubsub adapter configured on the Mastra instance

Error message

No Pubsub adapter configured on the Mastra instance

What it means

The evented workflow execution engine's execute() method requires a Pub/Sub adapter to publish step events and subscribe for results. If mastra.pubsub is undefined, it throws immediately before doing any work, because the evented path cannot function without it.

Source

Thrown at packages/core/src/workflows/evented/execution-engine.ts:93

      forEachIndex?: number;
    };
    pubsub?: PubSub; // Not used - evented engine uses this.mastra.pubsub directly
    requestContext: RequestContext;
    retryConfig?: {
      attempts?: number;
      delay?: number;
    };
    abortController: AbortController;
    format?: 'legacy' | 'vnext' | undefined;
    outputOptions?: {
      includeState?: boolean;
      includeResumeLabels?: boolean;
    };
    perStep?: boolean;
  }): Promise<TOutput> {
    const pubsub = this.mastra?.pubsub;
    if (!pubsub) {
      throw new Error('No Pubsub adapter configured on the Mastra instance');
    }

    // Set up promise that will resolve when workflow finishes
    // CRITICAL: Must subscribe BEFORE publishing events to avoid race condition
    let resolveResult!: (data: any) => void;
    let rejectResult!: (error: any) => void;
    const resultPromise = new Promise<any>((resolve, reject) => {
      resolveResult = resolve;
      rejectResult = reject;
    });

    const finishCb = async (event: Event, ack?: () => Promise<void>) => {
      if (event.runId !== params.runId) {
        await ack?.();
        return;
      }

      if (['workflow.end', 'workflow.fail', 'workflow.suspend'].includes(event.type)) {

View on GitHub (pinned to 75dd419e61)

Solutions

  1. Configure a pubsub adapter on Mastra: new Mastra({ pubsub: myPubsubAdapter, ... }).
  2. Verify you are executing against the same configured Mastra instance (this.mastra is set).
  3. If you don't need evented execution, use the standard (non-evented) workflow run path instead.

Example fix

// before
const mastra = new Mastra({ agents: {...} });
await eventedEngine.execute(...); // throws
// after
const mastra = new Mastra({ agents: {...}, pubsub: new InMemoryPubSubAdapter() });
Defensive patterns

Strategy: validation

Validate before calling

if (!mastra?.pubsub) {
  throw new Error('Evented workflow execution requires a pubsub adapter; configure Mastra({ pubsub: ... })');
}

Type guard

function supportsEventedExecution(mastra: Mastra | undefined): mastra is Mastra & { pubsub: NonNullable<Mastra['pubsub']> } {
  return !!mastra?.pubsub;
}

Try / catch

try { await eventedEngine.execute(...); } catch (e) { if (e.message === 'No Pubsub adapter configured on the Mastra instance') { return runStandardEngine(input); } throw e; }

Prevention

When it happens

Trigger: Calling the evented execution engine's execute() (evented workflow run) on a Mastra instance that was constructed without a pubsub adapter, or where this.mastra is undefined.

Common situations: Switching a workflow to the evented engine without adding MastraOptions.pubsub; using a Mastra instance created in a different module than the one configured; forgetting to migrate configuration when opting into evented workflows.

Related errors


AI-assisted analysis of mastra-ai/mastra@75dd419e61 (2026-08-30). Data as JSON: /api/errors/17511c4f0d921d81. Report an issue: GitHub.