npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

duplex-stream-onecom

v0.2.1

Published

Composable streams. Present a distinct readable stream and a distinct writable stream as a single Stream for reading/writing.

Readme

build status

Duplex Stream

Composes two distinct readable and writable streams into one cohesive Stream. Why would you want to do this? I honestly have no idea. You'd have to be really stupid or something.

Installation

npm install duplex-stream

Usage

var DuplexStream = require("duplex-stream");

var myDuplexStream = new DuplexStream(aReadableStream, aWritableStream);

The DuplexStream should behave exactly how you'd expect.

// Probably because of this:
console.log((new DuplexStream()) instanceof Stream);	// -> true

That is, when events occur on the underlying streams, they occur on the DuplexStream.

  • When data is on the line from the underlying readable stream, the data event is emitted on DuplexStream
  • Writing to DuplexStream will write to the underlying writable stream.
  • Pausing/Resuming the DuplexStream will pause/resume the underlying readable stream.
  • Ending the DuplexStream will end the underlying writable, readable will still be available.
  • Setting encoding on DuplexStream will set encoding on underlying readable.
  • When end event occurs on underlying readable, DuplexStream marks itself as unreadable but can still be written to (if it's not already been ended).
  • Destroying the duplex stream will destroy both underlying streams.
  • Calling destroySoon() on the duplex stream will destroy readable stream immediately and tell writable stream to destroy as soon as it can.

One little "gotcha" though, close won't be emitted on the DuplexStream until both underlying streams are closed.

Derp?

DuplexStream is just a silly little convenience. An (unnecessary) abstraction. I use it for composing automated tests that deal with Streams, along with my node-stream-buffer project.