Plumbing is a general-purpose Clojure utility belt and data transformation library endorsed for its pragmatic approach to everyday tasks. It offers a toolkit of macros and functions that simplify common data manipulation patterns, and includes a “Graph” abstraction for structured computation flows. Most of it is also compatible with ClojureScript. Graph is a simple and declarative way to specify a structured computation, which is easy to analyze, change, compose, and monitor. Here's a simple example of an ordinary function definition, and its Graph equivalent. A Graph encodes the structure of a computation, but not how it happens, allowing for many execution strategies. For example, we can compile a Graph lazily so that step values are computed as needed. Or, we can parallel-compile the Graph so that independent step functions are run in separate threads.
Features
- fnk and defnk macros for keyword-based function definitions with schema metadata
- A rich set of map utilities: dissoc-in, distinct-by, assoc-when, update-in-when, and more
- Graph abstraction to declare and execute workflows as composable computational graphs
- Async versions of graph execution via graph-async namespace
- Core utility functions such as safe-get, lazy-get, grouped-map, swap-pair! for everyday tasks
- Compatibility with ClojureScript for most of the library functions