SpawnOptions

Bun

Symbol

SpawnOptions

namespace SpawnOptions

  • interface OptionsObject<In extends Writable = Writable, Out extends Readable = Readable, Err extends Readable = Readable>

    • argv0?: string

      Path to the executable to run in the subprocess. This defaults to cmds[0].

      One use-case for this is for applications which wrap other applications or to simulate a symlink.

    • cwd?: string

      The current working directory of the process

      Defaults to process.cwd()

    • env?: Record<string, undefined | string>

      The environment variables of the process

      Defaults to process.env as it was when the current Bun process launched.

      Changes to process.env at runtime won't automatically be reflected in the default value. For that, you can pass process.env explicitly.

    • killSignal?: string | number

      The signal to use when killing the process after a timeout, when the AbortSignal is aborted, or when the process goes over the maxBuffer limit.

      // Kill the process with SIGKILL after 5 seconds
      const subprocess = Bun.spawn({
        cmd: ["sleep", "10"],
        timeout: 5000,
        killSignal: "SIGKILL",
      });
      
    • maxBuffer?: number

      The maximum number of bytes the process may output. If the process goes over this limit, it is killed with signal killSignal (defaults to SIGTERM).

    • serialization?: 'json' | 'advanced'

      The serialization format to use for IPC messages. Defaults to "advanced".

      To communicate with Node.js processes, use "json".

      When ipc is not specified, this is ignored.

    • signal?: AbortSignal

      An AbortSignal that can be used to abort the subprocess.

      This is useful for aborting a subprocess when some other part of the program is aborted, such as a fetch response.

      If the signal is aborted, the process will be killed with the signal specified by killSignal (defaults to SIGTERM).

      const controller = new AbortController();
      const { signal } = controller;
      const start = performance.now();
      const subprocess = Bun.spawn({
       cmd: ["sleep", "100"],
       signal,
      });
      await Bun.sleep(1);
      controller.abort();
      await subprocess.exited;
      const end = performance.now();
      console.log(end - start); // 1ms instead of 101ms
      
    • stderr?: Err

      The file descriptor for the standard error. It may be:

      • "pipe", undefined: The process will have a ReadableStream for standard output/error
      • "ignore", null: The process will have no standard output/error
      • "inherit": The process will inherit the standard output/error of the current process
      • ArrayBufferView: The process write to the preallocated buffer. Not implemented.
      • number: The process will write to the file descriptor
    • stdin?: In

      The file descriptor for the standard input. It may be:

      • "ignore", null, undefined: The process will have no standard input
      • "pipe": The process will have a new FileSink for standard input
      • "inherit": The process will inherit the standard input of the current process
      • ArrayBufferView, Blob: The process will read from the buffer
      • number: The process will read from the file descriptor
    • stdio?: [In, Out, Err]

      The standard file descriptors of the process, in the form [stdin, stdout, stderr]. This overrides the stdin, stdout, and stderr properties.

      For stdin you may pass:

      • "ignore", null, undefined: The process will have no standard input (default)
      • "pipe": The process will have a new FileSink for standard input
      • "inherit": The process will inherit the standard input of the current process
      • ArrayBufferView, Blob, Bun.file(), Response, Request: The process will read from buffer/stream.
      • number: The process will read from the file descriptor

      For stdout and stdin you may pass:

      • "pipe", undefined: The process will have a ReadableStream for standard output/error
      • "ignore", null: The process will have no standard output/error
      • "inherit": The process will inherit the standard output/error of the current process
      • ArrayBufferView: The process write to the preallocated buffer. Not implemented.
      • number: The process will write to the file descriptor
    • stdout?: Out

      The file descriptor for the standard output. It may be:

      • "pipe", undefined: The process will have a ReadableStream for standard output/error
      • "ignore", null: The process will have no standard output/error
      • "inherit": The process will inherit the standard output/error of the current process
      • ArrayBufferView: The process write to the preallocated buffer. Not implemented.
      • number: The process will write to the file descriptor
    • timeout?: number

      The maximum amount of time the process is allowed to run in milliseconds.

      If the timeout is reached, the process will be killed with the signal specified by killSignal (defaults to SIGTERM).

      // Kill the process after 5 seconds
      const subprocess = Bun.spawn({
        cmd: ["sleep", "10"],
        timeout: 5000,
      });
      await subprocess.exited; // Will resolve after 5 seconds
      
    • windowsHide?: boolean

      If true, the subprocess will have a hidden window.

    • windowsVerbatimArguments?: boolean

      If true, no quoting or escaping of arguments is done on Windows.

    • ipc(message: any, subprocess: Subprocess<In, Out, Err>): void

      When specified, Bun will open an IPC channel to the subprocess. The passed callback is called for incoming messages, and subprocess.send can send messages to the subprocess. Messages are serialized using the JSC serialize API, which allows for the same types that postMessage/structuredClone supports.

      The subprocess can send and recieve messages by using process.send and process.on("message"), respectively. This is the same API as what Node.js exposes when child_process.fork() is used.

      Currently, this is only compatible with processes that are other bun instances.

      @param subprocess

      The Subprocess that sent the message

    • onExit(subprocess: Subprocess<In, Out, Err>, exitCode: null | number, signalCode: null | number, error?: ErrorLike): void | Promise<void>

      Callback that runs when the Subprocess exits

      This is called even if the process exits with a non-zero exit code.

      Warning: this may run before the Bun.spawn function returns.

      A simple alternative is await subprocess.exited.

      @param error

      If an error occurred in the call to waitpid2, this will be the error.

      const subprocess = spawn({
       cmd: ["echo", "hello"],
       onExit: (subprocess, code) => {
         console.log(`Process exited with code ${code}`);
        },
      });
      
  • type OptionsToSubprocess<Opts extends OptionsObject> = Opts extends OptionsObject<infer In, infer Out, infer Err> ? Subprocess<Writable extends In ? 'ignore' : In, Readable extends Out ? 'pipe' : Out, Readable extends Err ? 'inherit' : Err> : Subprocess<Writable, Readable, Readable>
  • type OptionsToSyncSubprocess<Opts extends OptionsObject> = Opts extends OptionsObject<any, infer Out, infer Err> ? SyncSubprocess<Readable extends Out ? 'pipe' : Out, Readable extends Err ? 'pipe' : Err> : SyncSubprocess<Readable, Readable>
  • type Readable = 'pipe' | 'inherit' | 'ignore' | null | undefined | BunFile | ArrayBufferView | number

    Option for stdout/stderr

  • type ReadableIO = ReadableStream<Uint8Array> | number | undefined
  • type ReadableToIO<X extends Readable> = X extends 'pipe' | undefined ? ReadableStream<Uint8Array> : X extends BunFile | ArrayBufferView | number ? number : undefined
  • type ReadableToSyncIO<X extends Readable> = X extends 'pipe' | undefined ? Buffer : undefined
  • type Writable = 'pipe' | 'inherit' | 'ignore' | null | undefined | BunFile | ArrayBufferView | number | ReadableStream | Blob | Response | Request

    Option for stdin

  • type WritableIO = FileSink | number | undefined
  • type WritableToIO<X extends Writable> = X extends 'pipe' ? FileSink : X extends BunFile | ArrayBufferView | Blob | Request | Response | number ? number : undefined