`out.write` isn't quite the same as `pipe`ing the stream.  `pipe` handles buffering and end events, etc.  It might be better to consider providing a definition of `write`, eg , `es.through(function writer (data) {...})` so that you can rely on the `pipe` interface handling things.