plugins/aai-stack-node/skills/node-streams/SKILL.md
February 1, 2026
Select agents to install to:
npx add-skill https://github.com/the-answerai/alphaagent-team/blob/main/plugins/aai-stack-node/skills/node-streams/SKILL.md -a claude-code --skill node-streamsInstallation paths:
.claude/skills/node-streams/# Node.js Streams Skill
Patterns for working with Node.js streams.
## Stream Types
### Readable Streams
```typescript
import { Readable } from 'stream'
import { createReadStream } from 'fs'
// File read stream
const fileStream = createReadStream('large-file.txt', {
encoding: 'utf8',
highWaterMark: 64 * 1024, // 64KB chunks
})
// Event-based reading
fileStream.on('data', (chunk) => {
console.log('Received chunk:', chunk.length)
})
fileStream.on('end', () => {
console.log('Stream ended')
})
fileStream.on('error', (err) => {
console.error('Error:', err)
})
// Async iteration (preferred)
async function readFile() {
for await (const chunk of fileStream) {
console.log('Chunk:', chunk)
}
}
```
### Writable Streams
```typescript
import { Writable } from 'stream'
import { createWriteStream } from 'fs'
// File write stream
const writeStream = createWriteStream('output.txt', {
encoding: 'utf8',
highWaterMark: 64 * 1024,
})
writeStream.write('Hello ')
writeStream.write('World\n')
writeStream.end()
// Handle backpressure
const ok = writeStream.write(data)
if (!ok) {
// Wait for drain before writing more
await new Promise(resolve => writeStream.once('drain', resolve))
}
// With pipeline
import { pipeline } from 'stream/promises'
await pipeline(
readStream,
writeStream
)
```
### Transform Streams
```typescript
import { Transform } from 'stream'
// Custom transform
const upperCase = new Transform({
transform(chunk, encoding, callback) {
this.push(chunk.toString().toUpperCase())
callback()
},
})
// Usage
createReadStream('input.txt')
.pipe(upperCase)
.pipe(createWriteStream('output.txt'))
```
### Duplex Streams
```typescript
import { Duplex } from 'stream'
const duplex = new Duplex({
read(size) {
// Generate data to read
this.push('data')
this.push(null) // End
},
write(chunk, encoding, callback) {
// Handle written data
console.log('Received:', chunk.toString())
callback()
},
})
``