From HaskellWiki
Jump to navigation Jump to search

The pipes library is a clean and powerful stream processing library that lets you build and connect reusable streaming components.


Pipes is the official Hackage category for the pipes ecosystem.


The pipes package is the core library which provides reusable primitives for stream programming. Use these as building blocks for more sophisticated streaming abstractions.

Read the official pipes tutorial to learn more.

Source code hosted on GitHub


The pipes-safe package adds resource management and exception safety to the pipes ecosystem. Use pipes-safe to safely acquire and release resources deterministically within a pipeline.

Source code hosted on GitHub


The pipes-concurrency package adds concurrency primitives to the pipes ecosystem with built-in deadlock safety. Use these primitives to:

  • Build reactive event-driven programs
  • Merge and broadcast streams
  • Communicate between multiple concurrent pipelines

Read the official pipes-concurrency tutorial to learn more.

Source code hosted on GitHub


The pipes-parse package defines the generic machinery necessary for common parsing tasks. Use pipes-parse to:

  • handle leftovers and end of input,
  • interrupt and resume streaming, and
  • sub-divide streams without collecting elements in memory.

Source code hosted on GitHub

Community-contributed libraries

Listed in alphabetical order.


The pipes-aeson library allows you to encode and decode JSON values flowing through streams, possibly interleaving other stream effects while doing it.

Source code is hosted on GitHub


The pipes-attoparsec library converts attoparsec parsers to pipes for high-performance incremental parsing.

Source code hosted on GitHub


The pipes-binary library allows streams of binary data to be encoded and decoded using the Binary instances from the binary package.

Source code is hosted on GitHub


The pipes-network library converts server and client sockets to pipes to seamlessly stream data over any network.

Source code hosted on GitHub


The pipes-network-tls allows streaming through TLS-secured network connections, exposing a similar API to the one exposed by pipes-network.

Source code hosted on GitHub


The pipes-zlib enables compression and decompression of strict ByteString streams using the zlib codec.

Source code hosted on GitHub


Besides the usual Haskell community channels such as the official mailing lists or the Haskell subreddit, you can ask for help, suggest improvements, or discuss about the Pipes ecosystem at the “haskell-pipes” mailing list at Google Groups.


In chronological order:

  • pipes-1.0.0: The original announcement, which first introduced the concept of unifying sources and sinks and transducers into a single Category.
  • pipes-2.0.0: The introduction of Frames, later deprecated in favor of pipes-safe.
  • pipes-2.1.0: Transition of Frames to indexed monads, later deprecated in favor of pipes-safe.
  • pipes-2.3.0: The introduction of bidirectional Proxies, which evolved into modern pipes.
  • pipes-2.4.0: The release of the proxy transformer extension system.
  • pipes-3.0.0: Major API simplification and consolidation.
  • pipes-3.2.0: ListT integration, Codensity proxy transformer, and ArrowChoice primitives.

Upcoming libraries

  • pipes-bytestring: ByteString support. Source code is hosted at GitHub
  • pipes-text: Text support


  • Pipes, by Oliver Charles. London Haskell user group, 18th September 2013.

See also