Vigia

Upgrading execa from 9.x to 10.x

Comparison of the public API of execa 9.6.1 and 10.2.1, computed automatically from their TypeScript types. A changed signature is a candidate for a breaking change, not a certainty.

Summary

Removed import paths0
Removed exports2
Changed signatures8
Removed class or interface members0
Changed class or interface members10
Newly deprecated0
Requirement changes (engines, peer dependencies)1
New exports0

Removed exports

importexportkindBefore
execaexecaCommandvariable<NewOptionsType extends Options = {}>(options: NewOptionsType): ExecaCommandMethod<{} & NewOptionsType> | (templateString_0: TemplateStringsArray, templateString_1?: string | undefined): ResultPromise<{}> | <NewOptionsType extends Options = {}>(command: string, options?: NewOptionsType | undefined): ResultPromise<{} & NewOptionsType>
execaexecaCommandSyncvariable<NewOptionsType extends SyncOptions = {}>(options: NewOptionsType): ExecaCommandSyncMethod<{} & NewOptionsType> | (templateString_0: TemplateStringsArray, templateString_1?: string | undefined): SyncResult<{}> | <NewOptionsType extends SyncOptions = {}>(command: string, options?: NewOptionsType | undefined): SyncResult<{} & NewOptionsType>

Changed signatures

exportBeforeAfter
execa · $<NewOptionsType extends CommonOptions = {}>(options: NewOptionsType): ExecaScriptMethod<{} & NewOptionsType> | (templateString_0: TemplateStringsArray, ...templateString: TemplateExpression[]): ResultPromise<{}> | <NewOptionsType extends Options = {}>(file: string | URL, arguments?: readonly string[] | undefined, options?: NewOptionsType | undefined): ResultPromise<StricterOptions<{} & NewOptionsType, Options>> | <NewOptionsType extends Options = {}>(file: string | URL, options?: NewOptionsType | undefined): ResultPromise<StricterOptions<{} & NewOptionsType, Options>><NewOptionsType extends Options = {}>(options: NewOptionsType): ExecaScriptMethod<MergeOptions<{}, NewOptionsType, CommonOptions>> | (templateString_0: TemplateStringsArray, ...templateString: TemplateExpression[]): Omit<ResultPromise<{}>, "stdin" | "stdio"> & { stdin: any; stdio: any[]; } | <NewOptionsType extends Options = {}>(file: string | URL, arguments?: readonly string[] | undefined, options?: NewOptionsType | undefined): ScriptSubprocess<MergeOptions<{}, NewOptionsType, CommonOptions>> | <NewOptionsType extends Options = {}>(file: string | URL, options?: NewOptionsType | undefined): Sc…
execa · execa<NewOptionsType extends Options = {}>(options: NewOptionsType): ExecaMethod<{} & NewOptionsType> | (templateString_0: TemplateStringsArray, ...templateString: TemplateExpression[]): ResultPromise<{}> | <NewOptionsType extends Options = {}>(file: string | URL, arguments?: readonly string[] | undefined, options?: NewOptionsType | undefined): ResultPromise<{} & NewOptionsType> | <NewOptionsType extends Options = {}>(file: string | URL, options?: NewOptionsType | undefined): ResultPromise<{} & NewOptionsType><NewOptionsType extends Options = {}>(options: NewOptionsType): ExecaMethod<MergeOptions<{}, NewOptionsType, Options>> | (templateString_0: TemplateStringsArray, ...templateString: TemplateExpression[]): ResultPromise<{}> | <NewOptionsType extends Options = {}>(file: string | URL, arguments?: readonly string[] | undefined, options?: NewOptionsType | undefined): ResultPromise<MergeOptions<{}, NewOptionsType, Options>> | <NewOptionsType extends Options = {}>(file: string | URL, options?: NewOptionsType | undefined): ResultPromise<MergeOptions<{}, NewOptionsType, Options>>
execa · Options{ readonly preferLocal?: boolean | undefined; readonly localDir?: string | URL | undefined; readonly node?: boolean | undefined; readonly nodeOptions?: readonly string[] | undefined; readonly nodePath?: string | URL | undefined; readonly shell?: string | boolean | URL | undefined; readonly cwd?: string | URL | undefined; readonly env?: Readonly<Partial<Record<string, string>>> | undefined; readonly extendEnv?: boolean | undefined; readonly input?: any; readonly inputFile?: string | URL | undefined; readonly stdin?: any; readonly stdout?: any; readonly stderr?: any; readonly stdio?: StdioOption…TextOptions<false> | BinaryOptions<false>
execa · execaNode<NewOptionsType extends Options = {}>(options: NewOptionsType): ExecaNodeMethod<{} & NewOptionsType> | (templateString_0: TemplateStringsArray, ...templateString: TemplateExpression[]): ResultPromise<{}> | <NewOptionsType extends Options = {}>(scriptPath: string | URL, arguments?: readonly string[] | undefined, options?: NewOptionsType | undefined): ResultPromise<{} & NewOptionsType> | <NewOptionsType extends Options = {}>(scriptPath: string | URL, options?: NewOptionsType | undefined): ResultPromise<{} & NewOptionsType><NewOptionsType extends Options = {}>(options: NewOptionsType): ExecaNodeMethod<MergeOptions<{}, NewOptionsType, Options>> | (templateString_0: TemplateStringsArray, ...templateString: TemplateExpression[]): ResultPromise<{ readonly node: true; }> | <NewOptionsType extends Options = {}>(scriptPath: string | URL, arguments?: readonly string[] | undefined, options?: NewOptionsType | undefined): ResultPromise<NodeOptions<MergeOptions<{}, NewOptionsType, Options>>> | <NewOptionsType extends Options = {}>(scriptPath: string | URL, options?: NewOptionsType | undefined): ResultPromise<NodeOptions<Mer…
execa · execaSync<NewOptionsType extends SyncOptions = {}>(options: NewOptionsType): ExecaSyncMethod<{} & NewOptionsType> | (templateString_0: TemplateStringsArray, ...templateString: TemplateExpression[]): SyncResult<{}> | <NewOptionsType extends SyncOptions = {}>(file: string | URL, arguments?: readonly string[] | undefined, options?: NewOptionsType | undefined): SyncResult<{} & NewOptionsType> | <NewOptionsType extends SyncOptions = {}>(file: string | URL, options?: NewOptionsType | undefined): SyncResult<{} & NewOptionsType><NewOptionsType extends SyncOptions = {}>(options: NewOptionsType): ExecaSyncMethod<MergeOptions<{}, NewOptionsType, SyncOptions>> | (templateString_0: TemplateStringsArray, ...templateString: TemplateExpression[]): SyncResult<{}> | <NewOptionsType extends SyncOptions = {}>(file: string | URL, arguments?: readonly string[] | undefined, options?: NewOptionsType | undefined): SyncResult<MergeOptions<{}, NewOptionsType, SyncOptions>> | <NewOptionsType extends SyncOptions = {}>(file: string | URL, options?: NewOptionsType | undefined): SyncResult<MergeOptions<{}, NewOptionsType, SyncOptions>>
execa · SubprocessOmit<ChildProcess, "pipe" | "stdout" | "stderr" | "all" | typeof asyncIterator | "pid" | "stdin" | "stdio" | "kill" | "iterable" | "readable" | "writable" | "duplex" | keyof IpcMethods<HasIpcOption<OptionsType["ipc"], "ipcInput" extends keyof OptionsType ? OptionsType[keyof OptionsType & "ipcInput"] : undefined, "gracefulCancel" extends keyof OptionsType ? OptionsType[keyof OptionsType & "gracefulCancel"] : undefined>, OptionsType["serialization"]>> & { pid?: number | undefined; stdin: any; stdout: any; stderr: any; all: AllStream<AllIgnored<OptionsType["all"], OptionsType>>; stdio: Subprocess…SubprocessIpcMethods<OptionsType> & PipableSubprocess & SubprocessResultMethods<OptionsType> & { pid?: number | undefined; stdin: SubprocessStdioStream<"0", OptionsType>; stdout: SubprocessStdioStream<"1", OptionsType>; stderr: SubprocessStdioStream<"2", OptionsType>; stdio: [...{ -readonly [FdNumber in keyof StdioOptionNormalized<OptionsType["stdio"]>]: SubprocessStdioStream<FdNumber extends string ? FdNumber : string, OptionsType>; }, ...HasIpcOption<OptionsType["ipc"], "node" extends keyof OptionsType ? OptionsType[keyof OptionsType & "node"] : undefined, "ipcInput" extends keyof OptionsTyp…
execa · SyncOptions{ readonly preferLocal?: boolean | undefined; readonly localDir?: string | URL | undefined; readonly node?: boolean | undefined; readonly nodeOptions?: readonly string[] | undefined; readonly nodePath?: string | URL | undefined; readonly shell?: string | boolean | URL | undefined; readonly cwd?: string | URL | undefined; readonly env?: Readonly<Partial<Record<string, string>>> | undefined; readonly extendEnv?: boolean | undefined; readonly input?: any; readonly inputFile?: string | URL | undefined; readonly stdin?: any; readonly stdout?: any; readonly stderr?: any; readonly stdio?: StdioOption…TextOptions<true> | BinaryOptions<true>
execa · ResultPromiseOmit<ChildProcess, "pipe" | "stdout" | "stderr" | "all" | typeof asyncIterator | "pid" | "stdin" | "stdio" | "kill" | "iterable" | "readable" | "writable" | "duplex" | keyof IpcMethods<HasIpcOption<OptionsType["ipc"], "ipcInput" extends keyof OptionsType ? OptionsType[keyof OptionsType & "ipcInput"] : undefined, "gracefulCancel" extends keyof OptionsType ? OptionsType[keyof OptionsType & "gracefulCancel"] : undefined>, OptionsType["serialization"]>> & { pid?: number | undefined; stdin: any; stdout: any; stderr: any; all: AllStream<AllIgnored<OptionsType["all"], OptionsType>>; stdio: Subprocess…SubprocessIpcMethods<OptionsType> & PipableSubprocess & SubprocessResultMethods<OptionsType> & { pid?: number | undefined; stdin: SubprocessStdioStream<"0", OptionsType>; stdout: SubprocessStdioStream<"1", OptionsType>; stderr: SubprocessStdioStream<"2", OptionsType>; stdio: [...{ -readonly [FdNumber in keyof StdioOptionNormalized<OptionsType["stdio"]>]: SubprocessStdioStream<FdNumber extends string ? FdNumber : string, OptionsType>; }, ...HasIpcOption<OptionsType["ipc"], "node" extends keyof OptionsType ? OptionsType[keyof OptionsType & "node"] : undefined, "ipcInput" extends keyof OptionsTyp…

Removed class or interface members

None detected.

Changed class or interface members

memberBeforeAfter
ExecaError.allResultAllProperty<OptionsType["all"], OptionsType>ResultAll<OptionsType>
ExecaError.stdioMapResultStdio<StdioOptionNormalized<OptionsType["stdio"]>, OptionsType>[...MapResultStdio<StdioOptionNormalized<OptionsType["stdio"]>, OptionsType>, ...OptionsType extends unknown ? HasIpcOption<StricterOptions<OptionsType, Options>["ipc"], "node" extends keyof StricterOptions<OptionsType, Options> ? StricterOptions<OptionsType, Options>["node"] : undefined, "ipcInput"…
ExecaError.stderrResultStdioProperty<"2", "2", IgnoresResultOutput<"2", OptionsType>, OptionsType>ResultStdio<"2", "2", "2", OptionsType>
ExecaError.stdoutResultStdioProperty<"1", "1", IgnoresResultOutput<"1", OptionsType>, OptionsType>ResultStdio<"1", "1", "1", OptionsType>
ExecaError.ipcOutputResultIpcAsync<FdSpecificOption<OptionsType["buffer"], "ipc">, HasIpcOption<StricterOptions<OptionsType, Options>["ipc"], "ipcInput" extends keyof StricterOptions<OptionsType, Options> ? StricterOptions<OptionsType, Options>["ipcInput"] : undefined, "gracefulCancel" extends keyof StricterOptions<Opt…OptionsType extends unknown ? ResultIpcAsync<FdSpecificOption<OptionsType["buffer"], "ipc">, HasIpcOption<StricterOptions<OptionsType, Options>["ipc"], "node" extends keyof StricterOptions<OptionsType, Options> ? StricterOptions<OptionsType, Options>["node"] : undefined, "ipcInput" extends keyof Str…
ExecaError.pipedFromResult<Options>[](Result<Options> | ExecaError<Options>)[]
ExecaSyncError.allResultAllProperty<OptionsType["all"], OptionsType>ResultAll<OptionsType>
ExecaSyncError.stdioMapResultStdio<StdioOptionNormalized<OptionsType["stdio"]>, OptionsType>[...MapResultStdio<StdioOptionNormalized<OptionsType["stdio"]>, OptionsType>]
ExecaSyncError.stderrResultStdioProperty<"2", "2", IgnoresResultOutput<"2", OptionsType>, OptionsType>ResultStdio<"2", "2", "2", OptionsType>
ExecaSyncError.stdoutResultStdioProperty<"1", "1", IgnoresResultOutput<"1", OptionsType>, OptionsType>ResultStdio<"1", "1", "1", OptionsType>

Newly deprecated

None detected.

Requirement changes (engines, peer dependencies)

BeforeAfter
engines.node^18.19.0 || >=20.5.0>=22

Give your AI agent these facts

Vigia is a free MCP server: your coding agent checks versions, breaking changes and vulnerabilities before it writes code. No signup, no API key.

claude mcp add --transport http vigia https://vigia.coredls.cloud/mcp

Add to CursorAdd to VS Code★ Star on GitHub

Any other MCP client
{ "mcpServers": { "vigia": { "url": "https://vigia.coredls.cloud/mcp" } } }

Agent skill (SKILL.md): tells the agent when to use Vigia · GitHub Action for pull requests

Frequently asked questions

What are the breaking changes when upgrading execa from 9 to 10?

Between execa 9.6.1 and 10.2.1, Vigia found 2 removed exports, 8 changed signatures and 10 removed or changed class or interface members.

What became deprecated in execa 10?

0 exports or members are newly marked as deprecated in execa 10.2.1.

For agents

GET https://vigia.coredls.cloud/v1/packages/npm/execa/upgrade?from=9.6.1&to=10.2.1