# rindle

> Collection of utilities for working with Streams

Latest version **3.0.1** (published 2026-02-19) · Apache-2.0 license · 0 weekly downloads

## Install

```sh
npm install rindle
pnpm add rindle
yarn add rindle
bun add rindle
```

## Health

**Score 50/100 (C)** — status: stable.

Positive: no vulnerabilities; has provenance.

Warnings: low downloads; no types; no esm support.

## Facts

| | |
|---|---|
| Version | 3.0.1 |
| Published | 2026-02-19 |
| First published | 2015-10-21 |
| Weekly downloads | 0 |
| License | Apache-2.0 |
| TypeScript types | none |
| Module format | CommonJS |
| Node | >=20.0 |
| Dependencies | 0 |
| Unpacked size | 52.1 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Provenance | attested (GitHub Actions) |
| GitHub stars | 4 |
| Author | Balena Ltd. |
| Maintainers | jviotti, balena.io |
| Keywords | rindle, stream, utils, toolbelt, util |

## Links

- npm: https://www.npmjs.com/package/rindle
- Repository: https://github.com/balena-io-modules/rindle
- Issues: https://github.com/balena-io-modules/rindle/issues
- npm.io page: https://npm.io/package/rindle

## Alternatives

- [byte-size](https://npm.io/package/byte-size.md) — 2.1M weekly downloads
- [speed-limiter](https://npm.io/package/speed-limiter.md) — 16.0K weekly downloads
- [@powersync/node](https://npm.io/package/@powersync/node.md) — 10.9K weekly downloads
- [@ledgerhq/coin-cardano](https://npm.io/package/@ledgerhq/coin-cardano.md) — 1.0K weekly downloads
- [@jayesol/jayeson.lib.streamfinder](https://npm.io/package/@jayesol/jayeson.lib.streamfinder.md) — 1.0K weekly downloads

## Recent versions

- 3.0.1 (latest) — 2026-02-19
- 3.0.1-build-add-npm-oidc-permissions-77b28b7aa1dc7b76a8c54da41e4cae011a4d5036-1 (build-add-npm-oidc-permissions) — 2026-02-18
- 3.0.0-build-drop-getStreamFromString-47845a8b2fade087250929d666eff897db95efcd-1 (build-drop-getStreamFromString) — 2025-09-23
- 2.0.0-build-drop-bluebird-712ccc5fd3afdb3494ad52c8db09e1a2b31b4bbd-1 (build-drop-bluebird) — 2025-09-22
- 1.3.2-fix-ci-tests-93b92ce6e550a953df0e57f553a0250f4baf9669 (fix-ci-tests-93b92ce6e550a953df0e57f553a0250f4baf9669) — 2019-01-29
- 1.3.2-fix-ci-tests-61f1bebe88643054b82747b4ce7d684678ee7dd0 (fix-ci-tests-61f1bebe88643054b82747b4ce7d684678ee7dd0) — 2019-01-28
- 3.0.0 — 2025-09-23
- 2.0.0 — 2025-09-22
- 2.0.0-build-drop-bluebird-0e73eb3eabd215de31bffa320ae3ea76c8f79152-1 — 2025-09-22
- 2.0.0-build-drop-bluebird-59898e8297d9478ae7370b8408bb7521f82a647d-1 — 2025-09-19
- 1.3.6 — 2020-04-21
- 1.3.6-remove-lodash-3f6178f6b63654743eb9fef081212d6d8fad2653 — 2020-04-20
- 1.3.5 — 2020-04-20
- 1.3.5-modernize-674444150f259a29f6fb362c64d610d80c0df084 — 2020-04-20
- 1.3.5-modernize-d764291960965b7290b6bdf99668ab708971faeb — 2020-04-20
- … 11 more at https://npm.io/package/rindle/versions

## README

rindle
======

[![npm version](https://badge.fury.io/js/rindle.svg)](http://badge.fury.io/js/rindle)
[![dependencies](https://david-dm.org/jviotti/rindle.png)](https://david-dm.org/jviotti/rindle.png)
[![Build Status](https://travis-ci.org/jviotti/rindle.svg?branch=master)](https://travis-ci.org/jviotti/rindle)
[![Build status](https://ci.appveyor.com/api/projects/status/cjyj0u68pq3x7031?svg=true)](https://ci.appveyor.com/project/resin-io/rindle)

Collection of utilities for working with Streams.

Description
-----------

This is a collection of functions that operate on streams to encapsulate some of the tasks I usually have to do in my project. I'll be adding more as I encounter more patterns.

Installation
------------

Install `rindle` by running:

```sh
$ npm install --save rindle
```

Documentation
-------------


* [rindle](#module_rindle)
    * [.wait(stream)](#module_rindle.wait)
    * [.extract(stream)](#module_rindle.extract)
    * [.bifurcate(stream, output1, output2)](#module_rindle.bifurcate)
    * [.pipeWithEvents(stream, output, events)](#module_rindle.pipeWithEvents) ⇒ <code>StreamReadable</code>
    * [.onEvent(stream, event)](#module_rindle.onEvent)

<a name="module_rindle.wait"></a>

### rindle.wait(stream)
This functions listens for the following events:

- `close`.
- `end`.
- `done`.

If those events pass any argument when being emitted, you'll be able to access them as arguments to the callback.

**Kind**: static method of [<code>rindle</code>](#module_rindle)  
**Summary**: Wait for a stream to close  
**Access**: public  

| Param | Type | Description |
| --- | --- | --- |
| stream | <code>Stream</code> | stream |

**Example**  
```js
var fs = require('fs');
var rindle = require('rindle');

var input = fs.createReadStream('foo/bar');
var output = fs.createWriteStream('foo/baz');

input.pipe(output);

try {
  await rindle.wait(output);
  console.log('The output stream was closed!');
}(error) {
  if (error) throw error;
}
```
<a name="module_rindle.extract"></a>

### rindle.extract(stream)
Notice this function only extracts the *remaining data* from the stream.

**Kind**: static method of [<code>rindle</code>](#module_rindle)  
**Summary**: Extract data from readable stream  
**Access**: public  

| Param | Type | Description |
| --- | --- | --- |
| stream | <code>StreamReadable</code> | stream |

**Example**  
```js
var fs = require('fs');
var rindle = require('rindle');

var input = fs.createReadStream('foo/bar');

try {
  const data = await rindle.extract(input);
  console.log('The file contains: ' + data);
} catch (error) {
  if (error) throw error;
}
```
<a name="module_rindle.bifurcate"></a>

### rindle.bifurcate(stream, output1, output2)
The returned promised gets resolved when both output streams close.

**Kind**: static method of [<code>rindle</code>](#module_rindle)  
**Summary**: Bifurcate readable stream to two writable streams  
**Access**: public  

| Param | Type | Description |
| --- | --- | --- |
| stream | <code>StreamReadable</code> | input stream |
| output1 | <code>StreamWritable</code> | first output stream |
| output2 | <code>StreamWritable</code> | second output stream |

**Example**  
```js
var fs = require('fs');
var rindle = require('rindle');

var input = fs.createReadStream('foo/bar');
var output1 = fs.createWriteStream('foo/baz');
var output2 = fs.createWriteStream('foo/qux');

try {
  await rindle.bifurcate(input, output1, output2,
  console.log('All files written!');
} (error) {
  if (error) throw error;
}
```
<a name="module_rindle.pipeWithEvents"></a>

### rindle.pipeWithEvents(stream, output, events) ⇒ <code>StreamReadable</code>
**Kind**: static method of [<code>rindle</code>](#module_rindle)  
**Summary**: Pipe a stream along with certain events  
**Returns**: <code>StreamReadable</code> - resulting stream  
**Access**: public  

| Param | Type | Description |
| --- | --- | --- |
| stream | <code>StreamReadable</code> | input stream |
| output | <code>StreamWritable</code> | output stream |
| events | <code>Array.&lt;String&gt;</code> | events to pipe |

**Example**  
```js
var rindle = require('rindle');

rindle.pipeWithEvents(input, output, [
  'response',
  'request'
]);
```
<a name="module_rindle.onEvent"></a>

### rindle.onEvent(stream, event)
**Kind**: static method of [<code>rindle</code>](#module_rindle)  
**Summary**: Wait for a stream to emit a certain event  
**Access**: public  

| Param | Type | Description |
| --- | --- | --- |
| stream | <code>Stream</code> | stream |
| event | <code>String</code> | event name |

**Example**  
```js
var rindle = require('rindle');
var fs = require('fs');

try {
  const fd = await rindle.onEvent(fs.createReadStream('foo/bar'), 'open');
  console.log('The "open" event was emitted');
  console.log(fd);
} (error) {
  if (error) throw error;
}
```

Support
-------

If you're having any problem, please [raise an issue](https://github.com/jviotti/rindle/issues/new) on GitHub and I'll be happy to help.

Tests
-----

Run the test suite by doing:

```sh
$ gulp test
```

Contribute
----------

- Issue Tracker: [github.com/jviotti/rindle/issues](https://github.com/jviotti/rindle/issues)
- Source Code: [github.com/jviotti/rindle](https://github.com/jviotti/rindle)

Before submitting a PR, please make sure that you include tests, and that [jshint](http://jshint.com) runs without any warning:

```sh
$ gulp lint
```

License
-------

The project is licensed under the MIT license.

---
_Source: https://npm.io/package/rindle · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
