Specter is a powerful Clojure (and ClojureScript) library that revolutionizes navigation and manipulation of deeply nested and recursive data structures through a flexible, high-performance API beyond what vanilla Clojure offers. Specter has an extremely simple core, just a single abstraction called "navigator". Queries and transforms are done by composing navigators into a "path" precisely targeting what you want to retrieve or change. Navigators can be composed with any other navigators, allowing sophisticated manipulations to be expressed very concisely. In addition, Specter has performance rivaling hand-optimized code (see this benchmark). Clojure's only comparable built-in operations are get-in and update-in, and the Specter equivalents are 30% and 85% faster, respectively (while being just as concise). Under the hood, Specter uses advanced dynamic techniques to strip away the overhead of composition.
Features
- Advanced path-based navigation to deeply nested data
- Supports querying, transformation, and extraction of nested/recursive structures
- Elegant API allowing complex edits—e.g., filter, sort, reverse in nested containers—concise and expressive
- Works with both Clojure and ClojureScript data structures
- Significant performance advantages over manual nested manipulation
- Has tutorials and motivational guides that showcase its concepts and usage