Web Streams API | Node.js v26.8.2 Documentation
https://nodejs.org/api/webstreams.html • 281 KB fetched
Open original page
Web Streams API | Node.js v26.8.2 Documentation Skip to content
Node.js
* About this documentation
* Usage and example
* Assertion testing
* Asynchronous context tracking
* Async hooks
* Buffer
* C++ addons
* C/C++ addons with Node-API
* C++ embedder API
* Child processes
* Cluster
* Command-line options
* Console
* Crypto
* Debugger
* Deprecated APIs
* Diagnostics Channel
* DNS
* Domain
* Environment Variables
* Errors
* Events
* File system
* FFI
* Globals
* HTTP
* HTTP/2
* HTTPS
* Inspector
* Internationalization
* Iterable Streams API
* Modules: CommonJS modules
* Modules: ECMAScript modules
* Modules: node:module API
* Modules: Packages
* Modules: TypeScript
* Net
* OS
* Path
* Performance hooks
* Permissions
* Process
* Punycode
* Query strings
* Readline
* REPL
* Report
* Single executable applications
* SQLite
* Stream
* String decoder
* Test runner
* Timers
* TLS/SSL
* Trace events
* TTY
* UDP/datagram
* URL
* Utilities
* V8
* Virtual File System
* VM
* WASI
* Web Crypto API
* Web Streams API
* Worker threads
* Zlib
*
Code repository and issue tracker
Node.js v26.8.2 documentation
* Node.js v26.8.2
* Table of contents
* Web Streams API
* Overview
* Example ReadableStream
* Node.js streams interoperability
* API
* ReadableStreamTee(stream[, cloneForBranch2])
* Class: ReadableStream
* new ReadableStream([underlyingSource [, strategy]])
* readableStream.locked
* readableStream.cancel([reason])
* readableStream.getReader([options])
* readableStream.pipeThrough(transform[, options])
* readableStream.pipeTo(destination[, options])
* readableStream.tee()
* readableStream.values([options])
* Async Iteration
* Transferring with postMessage()
* ReadableStream.from(iterable)
* Class: ReadableStreamDefaultReader
* new ReadableStreamDefaultReader(stream)
* readableStreamDefaultReader.cancel([reason])
* readableStreamDefaultReader.closed
* readableStreamDefaultReader.read()
* readableStreamDefaultReader.releaseLock()
* Class: ReadableStreamBYOBReader
* new ReadableStreamBYOBReader(stream)
* readableStreamBYOBReader.cancel([reason])
* readableStreamBYOBReader.closed
* readableStreamBYOBReader.read(view[, options])
* readableStreamBYOBReader.releaseLock()
* Class: ReadableStreamDefaultController
* readableStreamDefaultController.close()
* readableStreamDefaultController.desiredSize
* readableStreamDefaultController.enqueue([chunk])
* readableStreamDefaultController.error([error])
* Class: ReadableByteStreamController
* readableByteStreamController.byobRequest
* readableByteStreamController.close()
* readableByteStreamController.desiredSize
* readableByteStreamController.enqueue(chunk)
* readableByteStreamController.error([error])
* Class: ReadableStreamBYOBRequest
* readableStreamBYOBRequest.respond(bytesWritten)
* readableStreamBYOBRequest.respondWithNewView(view)
* readableStreamBYOBRequest.view
* Class: WritableStream
* new WritableStream([underlyingSink[, strategy]])
* writableStream.abort([reason])
* writableStream.close()
* writableStream.getWriter()
* writableStream.locked
* Transferring with postMessage()
* Class: WritableStreamDefaultWriter
* new WritableStreamDefaultWriter(stream)
* writableStreamDefaultWriter.abort([reason])
* writableStreamDefaultWriter.close()
* writableStreamDefaultWriter.closed
* writableStreamDefaultWriter.desiredSize
* writableStreamDefaultWriter.ready
* writableStreamDefaultWriter.releaseLock()
* writableStreamDefaultWriter.write([chunk])
* Class: WritableStreamDefaultController
* writableStreamDefaultController.error([error])
* writableStreamDefaultController.signal
* Class: TransformStream
* new TransformStream([transformer[, writableStrategy[, readableStrategy]]])
* transformStream.readable
* transformStream.writable
* Transferring with postMessage()
* Class: TransformStreamDefaultController
* transformStreamDefaultController.desiredSize
* transformStreamDefaultController.enqueue([chunk])
* transformStreamDefaultController.error([reason])
* transformStreamDefaultController.terminate()
* Class: ByteLengthQueuingStrategy
* new ByteLengthQueuingStrategy(init)
* byteLengthQueuingStrategy.highWaterMark
* byteLengthQueuingStrategy.size
* Class: CountQueuingStrategy
* new CountQueuingStrategy(init)
* countQueuingStrategy.highWaterMark
* countQueuingStrategy.size
* Class: TextEncoderStream
* new TextEncoderStream()
* textEncoderStream.encoding
* textEncoderStream.readable
* textEncoderStream.writable
* Class: TextDecoderStream
* new TextDecoderStream([encoding[, options]])
* textDecoderStream.encoding
* textDecoderStream.fatal
* textDecoderStream.ignoreBOM
* textDecoderStream.readable
* textDecoderStream.writable
* Class: CompressionStream
* new CompressionStream(format)
* compressionStream.readable
* compressionStream.writable
* Class: DecompressionStream
* new DecompressionStream(format)
* decompressionStream.readable
* decompressionStream.writable
* Utility Consumers
* streamConsumers.arrayBuffer(stream)
* streamConsumers.blob(stream)
* streamConsumers.buffer(stream)
* streamConsumers.bytes(stream)
* streamConsumers.json(stream)
* streamConsumers.text(stream)
* Index
* Index
* About this documentation
* Usage and example
* Assertion testing
* Asynchronous context tracking
* Async hooks
* Buffer
* C++ addons
* C/C++ addons with Node-API
* C++ embedder API
* Child processes
* Cluster
* Command-line options
* Console
* Crypto
* Debugger
* Deprecated APIs
* Diagnostics Channel
* DNS
* Domain
* Environment Variables
* Errors
* Events
* File system
* FFI
* Globals
* HTTP
* HTTP/2
* HTTPS
* Inspector
* Internationalization
* Iterable Streams API
* Modules: CommonJS modules
* Modules: ECMAScript modules
* Modules: node:module API
* Modules: Packages
* Modules: TypeScript
* Net
* OS
* Path
* Performance hooks
* Permissions
* Process
* Punycode
* Query strings
* Readline
* REPL
* Report
* Single executable applications
* SQLite
* Stream
* String decoder
* Test runner
* Timers
* TLS/SSL
* Trace events
* TTY
* UDP/datagram
* URL
* Utilities
* V8
* Virtual File System
* VM
* WASI
* Web Crypto API
* Web Streams API
* Worker threads
* Zlib
* Other versions
* 26.x
* 25.x
* 24.x LTS
* 23.x
* 22.x LTS
* 21.x
* 20.x
* 19.x
* 18.x
* 17.x
* 16.x
*
Options
*
View on single page
*
View as JSON
* Edit on GitHub
Table of contents
* Web Streams API
* Overview
* Example ReadableStream
* Node.js streams interoperability
* API
* ReadableStreamTee(stream[, cloneForBranch2])
* Class: ReadableStream
* new ReadableStream([underlyingSource [, strategy]])
* readableStream.locked
* readableStream.cancel([reason])
* readableStream.getReader([options])
* readableStream.pipeThrough(transform[, options])
* readableStream.pipeTo(destination[, options])
* readableStream.tee()
* readableStream.values([options])
* Async Iteration
* Transferring with postMessage()
* ReadableStream.from(iterable)
* Class: ReadableStreamDefaultReader
* new ReadableStreamDefaultReader(stream)
* readableStreamDefaultReader.cancel([reason])
* readableStreamDefaultReader.closed
* readableStreamDefaultReader.read()
* readableStreamDefaultReader.releaseLock()
* Class: ReadableStreamBYOBReader
* new ReadableStreamBYOBReader(stream)
* readableStreamBYOBReader.cancel([reason])
* readableStreamBYOBReader.closed
* readableStreamBYOBReader.read(view[, options])
* readableStreamBYOBReader.releaseLock()
* Class: ReadableStreamDefaultController
* readableStreamDefaultController.close()
* readableStreamDefaultController.desiredSize
* readableStreamDefaultController.enqueue([chunk])
* readableStreamDefaultController.error([error])
* Class: ReadableByteStreamController
* readableByteStreamController.byobRequest
* readableByteStreamController.close()
* readableByteStreamController.desiredSize
* readableByteStreamController.enqueue(chunk)
* readableByteStreamController.error([error])
* Class: ReadableStreamBYOBRequest
* readableStreamBYOBRequest.respond(bytesWritten)
* readableStreamBYOBRequest.respondWithNewView(view)
* readableStreamBYOBRequest.view
* Class: WritableStream
* new WritableStream([underlyingSink[, strategy]])
* writableStream.abort([reason])
* writableStream.close()
* writableStream.getWriter()
* writableStream.locked
* Transferring with postMessage()
* Class: WritableStreamDefaultWriter
* new WritableStreamDefaultWriter(stream)
* writableStreamDefaultWriter.abort([reason])
* writableStreamDefaultWriter.close()
* writableStreamDefaultWriter.closed
* writableStreamDefaultWriter.desiredSize
* writableStreamDefaultWriter.ready
* writableStreamDefaultWriter.releaseLock()
* writableStreamDefaultWriter.write([chunk])
* Class: WritableStreamDefaultController
* writableStreamDefaultController.error([error])
* writableStreamDefaultController.signal
* Class: TransformStream
* new TransformStream([transformer[, writableStrategy[, readableStrategy]]])
* transformStream.readable
* transformStream.writable
* Transferring with postMessage()
* Class: TransformStreamDefaultController
* transformStreamDefaultController.desiredSize
* transformStreamDefaultController.enqueue([chunk])
* transformStreamDefaultController.error([reason])
* transformStreamDefaultController.terminate()
* Class: ByteLengthQueuingStrategy
* new ByteLengthQueuingStrategy(init)
* byteLengthQueuingStrategy.highWaterMark
* byteLengthQueuingStrategy.size
* Class: CountQueuingStrategy
* new CountQueuingStrategy(init)
* countQueuingStrategy.highWaterMark
* countQueuingStrategy.size
* Class: TextEncoderStream
* new TextEncoderStream()
* textEncoderStream.encoding
* textEncoderStream.readable
* textEncoderStream.writable
* Class: TextDecoderStream
* new TextDecoderStream([encoding[, options]])
* textDecoderStream.encoding
* textDecoderStream.fatal
* textDecoderStream.ignoreBOM
* textDecoderStream.readable
* textDecoderStream.writable
* Class: CompressionStream
* new CompressionStream(format)
* compressionStream.readable
* compressionStream.writable
* Class: DecompressionStream
* new DecompressionStream(format)
* decompressionStream.readable
* decompressionStream.writable
* Utility Consumers
* streamConsumers.arrayBuffer(stream)
* streamConsumers.blob(stream)
* streamConsumers.buffer(stream)
* streamConsumers.bytes(stream)
* streamConsumers.json(stream)
* streamConsumers.text(stream)
Web Streams API #
Added in: v16.5.0 History Version Changes v21.0.0 No longer experimental. v18.0.0 Use of this API no longer emit a runtime warning.
Stability: 2 - Stable
An implementation of the WHATWG Streams Standard .
Overview #
The WHATWG Streams Standard (or "web streams") defines an API for handling
streaming data. It is similar to the Node.js Streams API but emerged later
and has become the "standard" API for streaming data across many JavaScript
environments. There are three primary types of objects:
* ReadableStream - Represents a source of streaming data.
* WritableStream - Represents a destination for streaming data.
* TransformStream - Represents an algorithm for transforming streaming data.
Example ReadableStream #
This example creates a simple ReadableStream that pushes the current
performance.now() timestamp once every second forever. An async iterable
is used to read the data from the stream. import {
ReadableStream ,
} from 'node:stream/web' ;
import {
setInterval as every ,
} from 'node:timers/promises' ;
import {
performance ,
} from 'node:perf_hooks' ;
const SECOND = 1000 ;
const stream = new ReadableStream ( {
async start ( controller ) {
for await ( const _ of every (SECOND))
controller . enqueue (performance . now ()) ;
},
} ) ;
for await ( const value of stream)
console . log (value) ;
const {
ReadableStream ,
} = require ( 'node:stream/web' ) ;
const {
setInterval : every ,
} = require ( 'node:timers/promises' ) ;
const {
performance ,
} = require ( 'node:perf_hooks' ) ;
const SECOND = 1000 ;
const stream = new ReadableStream ( {
async start ( controller ) {
for await ( const _ of every (SECOND))
controller . enqueue (performance . now ()) ;
},
} ) ;
( async () => {
for await ( const value of stream)
console . log (value) ;
} )() ;
javascript copy
Node.js streams interoperability #
Node.js streams can be converted to web streams and vice versa via the toWeb and fromWeb methods present on stream.Readable , stream.Writable and stream.Duplex objects. For more details refer to the relevant documentation:
* stream.Readable.toWeb
* stream.Readable.fromWeb
* stream.Writable.toWeb
* stream.Writable.fromWeb
* stream.Duplex.toWeb
* stream.Duplex.fromWeb
API #
ReadableStreamTee(stream[, cloneForBranch2]) #
Added in: v26.5.0
Stability: 1 - Experimental
* stream <ReadableStream>
* cloneForBranch2 <boolean> When true , chunks enqueued into the second
branch are cloned from chunks enqueued into the first branch. Default:
false .
* Returns: <ReadableStream> [] Two <ReadableStream> branches.
Runs the WHATWG ReadableStreamTee abstract operation on stream . This differs from readableStream.tee() only when cloneForBranch2 is
true . The tee() method always passes false , while other web platform
specifications, such as Fetch body cloning, pass true so that the second
branch receives cloned chunks and consumption of one branch cannot mutate chunks
seen by the other.
Class: ReadableStream #
Added in: v16.5.0 History Version Changes v18.0.0 This class is now exposed on the global object.
new ReadableStream([underlyingSource [, strategy]]) #
Added in: v16.5.0
* underlyingSource <Object>
* start <Function> A user-defined function that is invoked immediately when
the ReadableStream is created.
* controller <ReadableStreamDefaultController> | <ReadableByteStreamController>
* Returns: undefined or a promise fulfilled with undefined .
* pull <Function> A user-defined function that is called repeatedly when the ReadableStream internal queue is not full. The operation may be sync or
async. If async, the function will not be called again until the previously
returned promise is fulfilled.
* controller <ReadableStreamDefaultController> | <ReadableByteStreamController>
* Returns: A promise fulfilled with undefined .
* cancel <Function> A user-defined function that is called when the ReadableStream is canceled.
* reason <any>
* Returns: A promise fulfilled with undefined .
* type <string> Must be 'bytes' or undefined .
* autoAllocateChunkSize <number> Used only when type is equal to
'bytes' . When set to a non-zero value a view buffer is automatically
allocated to ReadableByteStreamController.byobRequest . When not set
one must use stream's internal queues to transfer data via the default
reader ReadableStreamDefaultReader .
* strategy <Object>
* highWaterMark <number> The maximum internal queue size before backpressure
is applied.
* size <Function> A user-defined function used to identify the size of each
chunk of data.
* chunk <any>
* Returns: <number>
readableStream.locked #
Added in: v16.5.0
* Type: <boolean> Set to true if there is an active reader for this
<ReadableStream> .
The readableStream.locked property is false by default, and is
switched to true while there is an active reader consuming the
stream's data.
readableStream.cancel([reason]) #
Added in: v16.5.0
* reason <any>
* Returns: A promise fulfilled with undefined once cancelation has
been completed.
readableStream.getReader([options]) #
Added in: v16.5.0
* options <Object>
* mode <string> 'byob' or undefined
* Returns: <ReadableStreamDefaultReader> | <ReadableStreamBYOBReader>
import { ReadableStream } from 'node:stream/web' ;
const stream = new ReadableStream () ;
const reader = stream . getReader () ;
console . log ( await reader . read ()) ;
const { ReadableStream } = require ( 'node:stream/web' ) ;
const stream = new ReadableStream () ;
const reader = stream . getReader () ;
reader . read () . then (console . log) ;
javascript copy
Causes the readableStream.locked to be true .
readableStream.pipeThrough(transform[, options]) #
Added in: v16.5.0
* transform <Object>
* readable <ReadableStream> The ReadableStream to which
transform.writable will push the potentially modified data
it receives from this ReadableStream .
* writable <WritableStream> The WritableStream to which this
ReadableStream 's data will be written.
* options <Object>
* preventAbort <boolean> When true , errors in this ReadableStream
will not cause transform.writable to be aborted.
* preventCancel <boolean> When true , errors in the destination
transform.writable do not cause this ReadableStream to be
canceled.
* preventClose <boolean> When true , closing this ReadableStream
does not cause transform.writable to be closed.
* signal <AbortSignal> Allows the transfer of data to be canceled
using an <AbortController> .
* Returns: <ReadableStream> From transform.readable .
Connects this <ReadableStream> to the pair of <ReadableStream> and
<WritableStream> provided in the transform argument such that the
data from this <ReadableStream> is written in to transform.writable ,
possibly transformed, then pushed to transform.readable . Once the
pipeline is configured, transform.readable is returned. Causes the readableStream.locked to be true while the pipe operation
is active. import {
ReadableStream ,
TransformStream ,
} from 'node:stream/web' ;
const stream = new ReadableStream ( {
start ( controller ) {
controller . enqueue ( 'a' ) ;
},
} ) ;
const transform = new TransformStream ( {
transform ( chunk , controller ) {
controller . enqueue (chunk . toUpperCase ()) ;
},
} ) ;
const transformedStream = stream . pipeThrough (transform) ;
for await ( const chunk of transformedStream)
console . log (chunk) ;
// Prints: A
const {
ReadableStream
Links found on this page
- Skip to content [direct]
- Node.js [direct]
- About this documentation [direct]
- Usage and example [direct]
- Assertion testing [direct]
- Asynchronous context tracking [direct]
- Async hooks [direct]
- Buffer [direct]
- C++ addons [direct]
- C/C++ addons with Node-API [direct]
- C++ embedder API [direct]
- Child processes [direct]
- Cluster [direct]
- Command-line options [direct]
- Console [direct]
- Crypto [direct]
- Debugger [direct]
- Deprecated APIs [direct]
- Diagnostics Channel [direct]
- DNS [direct]
- Domain [direct]
- Environment Variables [direct]
- Errors [direct]
- Events [direct]
- File system [direct]
- FFI [direct]
- Globals [direct]
- HTTP [direct]
- HTTP/2 [direct]
- HTTPS [direct]
- Inspector [direct]
- Internationalization [direct]
- Iterable Streams API [direct]
- Modules: CommonJS modules [direct]
- Modules: ECMAScript modules [direct]
- Modules: node:module API [direct]
- Modules: Packages [direct]
- Modules: TypeScript [direct]
- Net [direct]
- OS [direct]
- Path [direct]
- Performance hooks [direct]
- Permissions [direct]
- Process [direct]
- Punycode [direct]
- Query strings [direct]
- Readline [direct]
- REPL [direct]
- Report [direct]
- Single executable applications [direct]
- SQLite [direct]
- Stream [direct]
- String decoder [direct]
- Test runner [direct]
- Timers [direct]
- TLS/SSL [direct]
- Trace events [direct]
- TTY [direct]
- UDP/datagram [direct]
- URL [direct]
- Utilities [direct]
- V8 [direct]
- Virtual File System [direct]
- VM [direct]
- WASI [direct]
- Web Crypto API [direct]
- Worker threads [direct]
- Zlib [direct]
- Code repository and issue tracker [direct]
- Index [direct]
- 26.x [direct]
- 25.x [direct]
- 24.x LTS [direct]
- 23.x [direct]
- 22.x LTS [direct]
- 21.x [direct]
- 20.x [direct]
- 19.x [direct]
- 18.x [direct]
- 17.x [direct]