Streams
To enable built-in Node.js APIs and polyfills, add the nodejs_compat compatibility flag to your Wrangler configuration file. This also enables nodejs_compat_v2 as long as your compatibility date is 2024-09-23 or later. Learn more about the Node.js compatibility flag and v2.
The Node.js streams API ↗ is the original API for working with streaming data in JavaScript, predating the WHATWG ReadableStream standard ↗. A stream is an abstract interface for working with streaming data in Node.js. Streams can be readable, writable, or both. All streams are instances of EventEmitter.
Where possible, you should use the WHATWG standard "Web Streams" API ↗, which is supported in Workers ↗.
import { Readable, Transform,} from 'node:stream';
import { text,} from 'node:stream/consumers';
import { pipeline,} from 'node:stream/promises';
// A Node.js-style Transform that converts data to uppercase// and appends a newline to the end of the output.class MyTransform extends Transform { constructor() { super({ encoding: 'utf8' }); } _transform(chunk, _, cb) { this.push(chunk.toString().toUpperCase()); cb(); } _flush(cb) { this.push('\n'); cb(); }}
export default { async fetch() { const chunks = [ "hello ", "from ", "the ", "wonderful ", "world ", "of ", "node.js ", "streams!" ];
function nextChunk(readable) { readable.push(chunks.shift()); if (chunks.length === 0) readable.push(null); else queueMicrotask(() => nextChunk(readable)); }
// A Node.js-style Readable that emits chunks from the // array... const readable = new Readable({ encoding: 'utf8', read() { nextChunk(readable); } });
const transform = new MyTransform(); await pipeline(readable, transform); return new Response(await text(transform)); }};
Refer to the Node.js documentation for stream
↗ for more information.
Was this helpful?
- Resources
- API
- New to Cloudflare?
- Products
- Sponsorships
- Open Source
- Support
- Help Center
- System Status
- Compliance
- GDPR
- Company
- cloudflare.com
- Our team
- Careers
- © 2025 Cloudflare, Inc.
- Privacy Policy
- Terms of Use
- Report Security Issues
- Trademark