We are all familiar with writing JS using callbacks, events, 'lifecycle' methods, and maybe even Promises and Streams. These are useful and familiar patterns, but they can be difficult to translate between, and it can be difficult to manually manage the state introduced by having multiple asynchronous data sources, such as DOM events, AJAX requests, and the events exposed by components elsewhere on the page (not to mention JS in a server environment). In this talk I introduce a style of functional reactive programming made possible by RxJS, and which I am trying to make more approachable in my library called Pipeline.js. I introduce the concept of a "Pipe", which is a generalized representation of an asynchronous data source which comes with a rich set of transformation and composition methods that handle common async patterns and help insulate you from the state you don't want to deal with manually.