Skip to content
This repository

event-driven workflows for clojure

Fetching latest commit…


Cannot retrieve the latest commit at this time

Octocat-spinner-32 src Merge pull request #87 from zoerb/master April 20, 2014
Octocat-spinner-32 test Fix typo causing atom-sink to raise ClassCastException September 29, 2013
Octocat-spinner-32 .gitignore back to SNAPSHOT September 16, 2012
Octocat-spinner-32 .travis.yml Update .travis.yml file for lein2 November 17, 2012
Octocat-spinner-32 README.markdown Merge branch 'perf' January 02, 2014
Octocat-spinner-32 project.clj back to snapshot January 27, 2014


Lamina is for describing and analyzing streams of data. It provides a rich set of operators for dealing with these unrealized values, both individually and collectively. If you're new to Lamina, you should start by reading about how it deals with individual events.


Add the following to the :dependencies section of your project.clj file:

[lamina "0.5.2"]


Streams of events are represented by channels, which are used in Aleph to model network communication over a variety of protocols. Much like Clojure's sequences, we can apply transforms to all events that pass through the channel:

> (use 'lamina.core)
> (def ch (channel 1 2 3))
> ch
<== [1 2 3 ...]
> (map* inc ch)
<== [2 3 4 ...]

Underneath the covers, channels are implemented as a directed graph representing the propagation and transformation of events. Each new transform we apply adds a node to the graph, and the resulting topology can be rendered with GraphViz.

> (use 'lamina.core 'lamina.viz)
> (def ch (channel))
> (map* inc ch)
<== [...]
> (map* dec ch)
<== [...]
> (enqueue ch 1 2 3)
<< ... >>
> (view-graph ch)

Since we can have multiple consumers for any stream of data, we can easily analyze a stream without affecting other code. Lamina provides a variety of operators for analyzing the data flowing through channels.

Lamina also provides mechanisms to instrument code, allowing the execution of data to throw off a stream of events that can be aggregated, analyzed, and used to better understand your software.

To learn more, read the wiki or the complete documentation. If you have questions, visit the Aleph mailing list.


Distributed under the Eclipse Public License, which is also used by Clojure.

Something went wrong with that request. Please try again.