Global objects | Node.js v20.20.2 Documentation

Skip to content
Table of contents

- Global objects
  - Class: `AbortController`
    - `abortController.abort([reason])`
    - `abortController.signal`
    - Class: `AbortSignal`
      - Static method: `AbortSignal.abort([reason])`
      - Static method: `AbortSignal.timeout(delay)`
      - Static method: `AbortSignal.any(signals)`
      - Event: `'abort'`
      - `abortSignal.aborted`
      - `abortSignal.onabort`
      - `abortSignal.reason`
      - `abortSignal.throwIfAborted()`
  - Class: `Blob`
  - Class: `Buffer`
  - Class: `ByteLengthQueuingStrategy`
  - `__dirname`
  - `__filename`
  - `atob(data)`
  - `BroadcastChannel`
  - `btoa(data)`
  - `clearImmediate(immediateObject)`
  - `clearInterval(intervalObject)`
  - `clearTimeout(timeoutObject)`
  - Class: `CompressionStream`
  - `console`
  - Class: `CountQueuingStrategy`
  - `Crypto`
  - `crypto`
  - `CryptoKey`
  - `CustomEvent`
  - Class: `DecompressionStream`
  - `Event`
  - `EventSource`
  - `EventTarget`
  - `exports`
  - `fetch`
    - Custom dispatcher
    - Related classes
  - Class: `File`
  - Class `FormData`
  - `global`
  - Class `Headers`
  - `MessageChannel`
  - `MessageEvent`
  - `MessagePort`
  - `module`
  - `PerformanceEntry`
  - `PerformanceMark`
  - `PerformanceMeasure`
  - `PerformanceObserver`
  - `PerformanceObserverEntryList`
  - `PerformanceResourceTiming`
  - `performance`
  - `process`
  - `queueMicrotask(callback)`
  - Class: `ReadableByteStreamController`
  - Class: `ReadableStream`
  - Class: `ReadableStreamBYOBReader`
  - Class: `ReadableStreamBYOBRequest`
  - Class: `ReadableStreamDefaultController`
  - Class: `ReadableStreamDefaultReader`
  - `require()`
  - `Response`
  - `Request`
  - `setImmediate(callback[, ...args])`
  - `setInterval(callback, delay[, ...args])`
  - `setTimeout(callback, delay[, ...args])`
  - `structuredClone(value[, options])`
  - `SubtleCrypto`
  - `DOMException`
  - `TextDecoder`
  - Class: `TextDecoderStream`
  - `TextEncoder`
  - Class: `TextEncoderStream`
  - Class: `TransformStream`
  - Class: `TransformStreamDefaultController`
  - `URL`
  - `URLSearchParams`
  - `WebAssembly`
  - `WebSocket`
  - Class: `WritableStream`
  - Class: `WritableStreamDefaultController`
  - Class: `WritableStreamDefaultWriter`

## Global objects#

These objects are available in all modules.

The following variables may appear to be global but are not. They exist only in the scope of CommonJS modules:

- `__dirname`
- `__filename`
- `exports`
- `module`
- `require()`

The objects listed here are specific to Node.js. There are built-in objects that are part of the JavaScript language itself, which are also globally accessible.

### Class: `AbortController`#

History

Version | Changes
--- | ---
v15.4.0 | No longer experimental.
v15.0.0, v14.17.0 | Added in: v15.0.0, v14.17.0

A utility class used to signal cancelation in selected `Promise`-based APIs. The API is based on the Web API `AbortController`.

    const ac = new AbortController();

    ac.signal.addEventListener('abort', () => console.log('Aborted!'),
                               { once: true });

    ac.abort();

    console.log(ac.signal.aborted);  // Prints true

#### `abortController.abort([reason])`#

History

Version | Changes
--- | ---
v17.2.0, v16.14.0 | Added the new optional reason argument.
v15.0.0, v14.17.0 | Added in: v15.0.0, v14.17.0

- `reason` <any> An optional reason, retrievable on the `AbortSignal`'s `reason` property.

Triggers the abort signal, causing the `abortController.signal` to emit the `'abort'` event.

#### `abortController.signal`#

Added in: v15.0.0, v14.17.0

- Type: <AbortSignal>

#### Class: `AbortSignal`#

Added in: v15.0.0, v14.17.0

- Extends: <EventTarget>

The `AbortSignal` is used to notify observers when the `abortController.abort()` method is called.

##### Static method: `AbortSignal.abort([reason])`#

History

Version | Changes
--- | ---
v17.2.0, v16.14.0 | Added the new optional reason argument.
v15.12.0, v14.17.0 | Added in: v15.12.0, v14.17.0

- `reason`: <any>
- Returns: <AbortSignal>

Returns a new already aborted `AbortSignal`.

##### Static method: `AbortSignal.timeout(delay)`#

Added in: v17.3.0, v16.14.0

- `delay` <number> The number of milliseconds to wait before triggering the AbortSignal.

Returns a new `AbortSignal` which will be aborted in `delay` milliseconds.

##### Static method: `AbortSignal.any(signals)`#

Added in: v20.3.0

- `signals` <AbortSignal[]> The `AbortSignal`s of which to compose a new `AbortSignal`.

Returns a new `AbortSignal` which will be aborted if any of the provided signals are aborted. Its `abortSignal.reason` will be set to whichever one of the `signals` caused it to be aborted.

##### Event: `'abort'`#

Added in: v15.0.0, v14.17.0

The `'abort'` event is emitted when the `abortController.abort()` method is called. The callback is invoked with a single object argument with a single `type` property set to `'abort'`:

    const ac = new AbortController();

    // Use either the onabort property...
    ac.signal.onabort = () => console.log('aborted!');

    // Or the EventTarget API...
    ac.signal.addEventListener('abort', (event) => {
      console.log(event.type);  // Prints 'abort'
    }, { once: true });

    ac.abort();

The `AbortController` with which the `AbortSignal` is associated will only ever trigger the `'abort'` event once. We recommended that code check that the `abortSignal.aborted` attribute is `false` before adding an `'abort'` event listener.

Any event listeners attached to the `AbortSignal` should use the `{ once: true }` option (or, if using the `EventEmitter` APIs to attach a listener, use the `once()` method) to ensure that the event listener is removed as soon as the `'abort'` event is handled. Failure to do so may result in memory leaks.

##### `abortSignal.aborted`#

Added in: v15.0.0, v14.17.0

- Type: <boolean> True after the `AbortController` has been aborted.

##### `abortSignal.onabort`#

Added in: v15.0.0, v14.17.0

- Type: <Function>

An optional callback function that may be set by user code to be notified when the `abortController.abort()` function has been called.

##### `abortSignal.reason`#

Added in: v17.2.0, v16.14.0

- Type: <any>

An optional reason specified when the `AbortSignal` was triggered.

    const ac = new AbortController();
    ac.abort(new Error('boom!'));
    console.log(ac.signal.reason);  // Error: boom!

##### `abortSignal.throwIfAborted()`#

Added in: v17.3.0, v16.17.0

If `abortSignal.aborted` is `true`, throws `abortSignal.reason`.

### Class: `Blob`#

Added in: v18.0.0

See <Blob>.

### Class: `Buffer`#

Added in: v0.1.103

- <Function>

Used to handle binary data. See the buffer section.

### Class: `ByteLengthQueuingStrategy`#

Added in: v18.0.0

Stability: 1 - Experimental.

A browser-compatible implementation of `ByteLengthQueuingStrategy`.

### `__dirname`#

This variable may appear to be global but is not. See `__dirname`.

### `__filename`#

This variable may appear to be global but is not. See `__filename`.

### `atob(data)`#

Added in: v16.0.0

Stability: 3 - Legacy. Use `Buffer.from(data, 'base64')` instead.

Global alias for `buffer.atob()`.

### `BroadcastChannel`#

Added in: v18.0.0

See <BroadcastChannel>.

### `btoa(data)`#

Added in: v16.0.0

Stability: 3 - Legacy. Use `buf.toString('base64')` instead.

Global alias for `buffer.btoa()`.

### `clearImmediate(immediateObject)`#

Added in: v0.9.1

`clearImmediate` is described in the timers section.

### `clearInterval(intervalObject)`#

Added in: v0.0.1

`clearInterval` is described in the timers section.

### `clearTimeout(timeoutObject)`#

Added in: v0.0.1

`clearTimeout` is described in the timers section.

### Class: `CompressionStream`#

Added in: v18.0.0

Stability: 1 - Experimental.

A browser-compatible implementation of `CompressionStream`.

### `console`#

Added in: v0.1.100

- <Object>

Used to print to stdout and stderr. See the `console` section.

### Class: `CountQueuingStrategy`#

Added in: v18.0.0

Stability: 1 - Experimental.

A browser-compatible implementation of `CountQueuingStrategy`.

### `Crypto`#

History

Version | Changes
--- | ---
v19.0.0 | No longer behind `--experimental-global-webcrypto` CLI flag.
v17.6.0, v16.15.0 | Added in: v17.6.0, v16.15.0

Stability: 1 - Experimental. Disable this API with the `--no-experimental-global-webcrypto` CLI flag.

A browser-compatible implementation of <Crypto>. This global is available only if the Node.js binary was compiled with including support for the `node:crypto` module.

### `crypto`#

History

Version | Changes
--- | ---
v19.0.0 | No longer behind `--experimental-global-webcrypto` CLI flag.
v17.6.0, v16.15.0 | Added in: v17.6.0, v16.15.0

Stability: 1 - Experimental. Disable this API with the `--no-experimental-global-webcrypto` CLI flag.

A browser-compatible implementation of the Web Crypto API.

### `CryptoKey`#

History

Version | Changes
--- | ---
v19.0.0 | No longer behind `--experimental-global-webcrypto` CLI flag.
v17.6.0, v16.15.0 | Added in: v17.6.0, v16.15.0

Stability: 1 - Experimental. Disable this API with the `--no-experimental-global-webcrypto` CLI flag.

A browser-compatible implementation of <CryptoKey>. This global is available only if the Node.js binary was compiled with including support for the `node:crypto` module.

### `CustomEvent`#

History

Version | Changes
--- | ---
v19.0.0 | No longer behind `--experimental-global-customevent` CLI flag.
v18.7.0, v16.17.0 | Added in: v18.7.0, v16.17.0

Stability: 1 - Experimental. Disable this API with the `--no-experimental-global-customevent` CLI flag.

A browser-compatible implementation of the `CustomEvent` Web API.

### Class: `DecompressionStream`#

Added in: v18.0.0

Stability: 1 - Experimental.

A browser-compatible implementation of `DecompressionStream`.

### `Event`#

History

Version | Changes
--- | ---
v15.4.0 | No longer experimental.
v15.0.0 | Added in: v15.0.0

A browser-compatible implementation of the `Event` class. See `EventTarget` and `Event` API for more details.

### `EventSource`#

Added in: v20.18.0

Stability: 1 - Experimental. Enable this API with the `--experimental-eventsource` CLI flag.

A browser-compatible implementation of the `EventSource` class.

### `EventTarget`#

History

Version | Changes
--- | ---
v15.4.0 | No longer experimental.
v15.0.0 | Added in: v15.0.0

A browser-compatible implementation of the `EventTarget` class. See `EventTarget` and `Event` API for more details.

### `exports`#

This variable may appear to be global but is not. See `exports`.

### `fetch`#

History

Version | Changes
--- | ---
v18.0.0 | No longer behind `--experimental-fetch` CLI flag.
v17.5.0, v16.15.0 | Added in: v17.5.0, v16.15.0

Stability: 1 - Experimental. Disable this API with the `--no-experimental-fetch` CLI flag.

A browser-compatible implementation of the `fetch()` function.

    const res = await fetch('https://nodejs.org/api/documentation.json');
    if (res.ok) {
      const data = await res.json();
      console.log(data);
    }

The implementation is based upon undici, an HTTP/1.1 client written from scratch for Node.js. You can figure out which version of `undici` is bundled in your Node.js process reading the `process.versions.undici` property.

#### Custom dispatcher#

You can use a custom dispatcher to dispatch requests passing it in fetch's options object. The dispatcher must be compatible with `undici`'s `Dispatcher` class.

    fetch(url, { dispatcher: new MyAgent() });

It is possible to change the global dispatcher in Node.js by installing `undici` and using the `setGlobalDispatcher()` method. Calling this method will affect both `undici` and Node.js.

    import { setGlobalDispatcher } from 'undici';
    setGlobalDispatcher(new MyAgent());

#### Related classes#

The following globals are available to use with `fetch`:

- `FormData`
- `Headers`
- `Request`
- `Response`.

### Class: `File`#

Added in: v20.0.0

See <File>.

### Class `FormData`#

History

Version | Changes
--- | ---
v18.0.0 | No longer behind `--experimental-fetch` CLI flag.
v17.6.0, v16.15.0 | Added in: v17.6.0, v16.15.0

Stability: 1 - Experimental. Disable this API with the `--no-experimental-fetch` CLI flag.

A browser-compatible implementation of <FormData>.

### `global`#

Added in: v0.1.27

Stability: 3 - Legacy. Use `globalThis` instead.

- <Object> The global namespace object.

In browsers, the top-level scope has traditionally been the global scope. This means that `var something` will define a new global variable, except within ECMAScript modules. In Node.js, this is different. The top-level scope is not the global scope; `var something` inside a Node.js module will be local to that module, regardless of whether it is a CommonJS module or an ECMAScript module.

### Class `Headers`#

History

Version | Changes
--- | ---
v18.0.0 | No longer behind `--experimental-fetch` CLI flag.
v17.5.0, v16.15.0 | Added in: v17.5.0, v16.15.0

Stability: 1 - Experimental. Disable this API with the `--no-experimental-fetch` CLI flag.

A browser-compatible implementation of <Headers>.

### `MessageChannel`#

Added in: v15.0.0

The `MessageChannel` class. See `MessageChannel` for more details.

### `MessageEvent`#

Added in: v15.0.0

The `MessageEvent` class. See `MessageEvent` for more details.

### `MessagePort`#

Added in: v15.0.0

The `MessagePort` class. See `MessagePort` for more details.

### `module`#

This variable may appear to be global but is not. See `module`.

### `PerformanceEntry`#

Added in: v19.0.0

The `PerformanceEntry` class. See `PerformanceEntry` for more details.

### `PerformanceMark`#

Added in: v19.0.0

The `PerformanceMark` class. See `PerformanceMark` for more details.

### `PerformanceMeasure`#

Added in: v19.0.0

The `PerformanceMeasure` class. See `PerformanceMeasure` for more details.

### `PerformanceObserver`#

Added in: v19.0.0

The `PerformanceObserver` class. See `PerformanceObserver` for more details.

### `PerformanceObserverEntryList`#

Added in: v19.0.0

The `PerformanceObserverEntryList` class. See `PerformanceObserverEntryList` for more details.

### `PerformanceResourceTiming`#

Added in: v19.0.0

The `PerformanceResourceTiming` class. See `PerformanceResourceTiming` for more details.

### `performance`#

Added in: v16.0.0

The `perf_hooks.performance` object.

### `process`#

Added in: v0.1.7

- <Object>

The process object. See the `process` object section.

### `queueMicrotask(callback)`#

Added in: v11.0.0

- `callback` <Function> Function to be queued.

The `queueMicrotask()` method queues a microtask to invoke `callback`. If `callback` throws an exception, the `process` object `'uncaughtException'` event will be emitted.

The microtask queue is managed by V8 and may be used in a similar manner to the `process.nextTick()` queue, which is managed by Node.js. The `process.nextTick()` queue is always processed before the microtask queue within each turn of the Node.js event loop.

    // Here, `queueMicrotask()` is used to ensure the 'load' event is always
    // emitted asynchronously, and therefore consistently. Using
    // `process.nextTick()` here would result in the 'load' event always emitting
    // before any other promise jobs.

    DataHandler.prototype.load = async function load(key) {
      const hit = this._cache.get(key);
      if (hit !== undefined) {
        queueMicrotask(() => {
          this.emit('load', hit);
        });
        return;
      }

      const data = await fetchData(key);
      this._cache.set(key, data);
      this.emit('load', data);
    };

### Class: `ReadableByteStreamController`#

Added in: v18.0.0

Stability: 1 - Experimental.

A browser-compatible implementation of `ReadableByteStreamController`.

### Class: `ReadableStream`#

Added in: v18.0.0

Stability: 1 - Experimental.

A browser-compatible implementation of `ReadableStream`.

### Class: `ReadableStreamBYOBReader`#

Added in: v18.0.0

Stability: 1 - Experimental.

A browser-compatible implementation of `ReadableStreamBYOBReader`.

### Class: `ReadableStreamBYOBRequest`#

Added in: v18.0.0

Stability: 1 - Experimental.

A browser-compatible implementation of `ReadableStreamBYOBRequest`.

### Class: `ReadableStreamDefaultController`#

Added in: v18.0.0

Stability: 1 - Experimental.

A browser-compatible implementation of `ReadableStreamDefaultController`.

### Class: `ReadableStreamDefaultReader`#

Added in: v18.0.0

Stability: 1 - Experimental.

A browser-compatible implementation of `ReadableStreamDefaultReader`.

### `require()`#

This variable may appear to be global but is not. See `require()`.

### `Response`#

History

Version | Changes
--- | ---
v18.0.0 | No longer behind `--experimental-fetch` CLI flag.
v17.5.0, v16.15.0 | Added in: v17.5.0, v16.15.0

Stability: 1 - Experimental. Disable this API with the `--no-experimental-fetch` CLI flag.

A browser-compatible implementation of <Response>.

### `Request`#

History

Version | Changes
--- | ---
v18.0.0 | No longer behind `--experimental-fetch` CLI flag.
v17.5.0, v16.15.0 | Added in: v17.5.0, v16.15.0

Stability: 1 - Experimental. Disable this API with the `--no-experimental-fetch` CLI flag.

A browser-compatible implementation of <Request>.

### `setImmediate(callback[, ...args])`#

Added in: v0.9.1

`setImmediate` is described in the timers section.

### `setInterval(callback, delay[, ...args])`#

Added in: v0.0.1

`setInterval` is described in the timers section.

### `setTimeout(callback, delay[, ...args])`#

Added in: v0.0.1

`setTimeout` is described in the timers section.

### `structuredClone(value[, options])`#

Added in: v17.0.0

The WHATWG `structuredClone` method.

### `SubtleCrypto`#

History

Version | Changes
--- | ---
v19.0.0 | No longer behind `--experimental-global-webcrypto` CLI flag.
v17.6.0, v16.15.0 | Added in: v17.6.0, v16.15.0

Stability: 1 - Experimental. Disable this API with the `--no-experimental-global-webcrypto` CLI flag.

A browser-compatible implementation of <SubtleCrypto>. This global is available only if the Node.js binary was compiled with including support for the `node:crypto` module.

### `DOMException`#

Added in: v17.0.0

The WHATWG `DOMException` class. See `DOMException` for more details.

### `TextDecoder`#

Added in: v11.0.0

The WHATWG `TextDecoder` class. See the `TextDecoder` section.

### Class: `TextDecoderStream`#

Added in: v18.0.0

Stability: 1 - Experimental.

A browser-compatible implementation of `TextDecoderStream`.

### `TextEncoder`#

Added in: v11.0.0

The WHATWG `TextEncoder` class. See the `TextEncoder` section.

### Class: `TextEncoderStream`#

Added in: v18.0.0

Stability: 1 - Experimental.

A browser-compatible implementation of `TextEncoderStream`.

### Class: `TransformStream`#

Added in: v18.0.0

Stability: 1 - Experimental.

A browser-compatible implementation of `TransformStream`.

### Class: `TransformStreamDefaultController`#

Added in: v18.0.0

Stability: 1 - Experimental.

A browser-compatible implementation of `TransformStreamDefaultController`.

### `URL`#

Added in: v10.0.0

The WHATWG `URL` class. See the `URL` section.

### `URLSearchParams`#

Added in: v10.0.0

The WHATWG `URLSearchParams` class. See the `URLSearchParams` section.

### `WebAssembly`#

Added in: v8.0.0

- <Object>

The object that acts as the namespace for all W3C WebAssembly related functionality. See the Mozilla Developer Network for usage and compatibility.

### `WebSocket`#

Added in: v20.10.0

Stability: 1 - Experimental.

A browser-compatible implementation of `WebSocket`. Enable this API with the `--experimental-websocket` CLI flag.

### Class: `WritableStream`#

Added in: v18.0.0

Stability: 1 - Experimental.

A browser-compatible implementation of `WritableStream`.

### Class: `WritableStreamDefaultController`#

Added in: v18.0.0

Stability: 1 - Experimental.

A browser-compatible implementation of `WritableStreamDefaultController`.

### Class: `WritableStreamDefaultWriter`#

Added in: v18.0.0

Stability: 1 - Experimental.

A browser-compatible implementation of `WritableStreamDefaultWriter`.