# \[ANN\] ChannelBuffers

**URL:** https://discourse.julialang.org/t/ann-channelbuffers/51323
**Category:** Internals & Design
**Tags:** announcement, distributed
**Created:** [December 5, 2020, 9:27pm UTC](https://discourse.julialang.org/t/ann-channelbuffers/51323 "2020-12-05T21:27:00Z")
**Posts on this page:** 2
**Page:** 1

<div class="post-metadata">

### Author: ![klacru](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/klacru/32/27890_2.png) [@klacru](https://discourse.julialang.org/u/klacru)
#### Post date: [December 5, 2020, 9:27pm UTC](https://discourse.julialang.org/t/ann-channelbuffers/51323/1 "2020-12-05T21:27:00Z")

</div>

This parallel Tasks/Threads package [ChannelBuffers](https://github.com/KlausC/ChannelBuffers.jl) implements piped streams in `Julia`.  
Typical usage:

```julia
curl("...file.tgz") | gunzip() | tarx("target-dir") |> run |> wait

```

Each job is performed in a separate task; tasks may be spawned in different threads.  
Each job is implemented by a function `f(cin::IO, cout::IO, args...)`, which is straight forward in the above examples.

---

<div class="post-metadata">

### Author: ![klacru](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/klacru/32/27890_2.png) [@klacru](https://discourse.julialang.org/u/klacru)
#### Post date: [December 19, 2020, 10:50am UTC](https://discourse.julialang.org/t/ann-channelbuffers/51323/2 "2020-12-19T10:50:51Z")

</div>

Released ChannelBuffers v0.2.0.  
It now integrates external commandline processes and internal Julia Tasks and Threads.

So now we can do for example

```julia
`ls -l` → transcoder(MyEncoder("key")) → "ls.gz"

```

If we have implemented `MyEncoder` in Julia.
