A lot of people mentioned other immutable JS libraries after reading my post. I thought it would be good to make a list of available ones.
There are two types of immutable libraries: simple helpers for copying JavaScript objects, and actual persistent data structure implementations. My post generally analyzed the tradeoffs between both kinds of libraries and everything applies to the below libraries in either category.
Libraries are sorted by github popularity.
- immutable.js - Facebook's implementation with a JS-like API
- mori - ClojureScript's persistent data structures exported to JS
- ancient-oak - Not sure about this one. It doesn't seem to fully implement efficient structural sharing (tries, etc) like the above libraries, but it claims to implement parts of it and I see some implementation of a data structure in there. It also copies object props onto the data structure so you can access them like
obj.property
, which is neat but might have a perf cost.
Other libraries built on top of immutable.js: typed-immutable and immstruct
- React's immutability helpers
- baobab
- react-cursor (cursors)
- seamless-immutable
- cortex (cursors)
- tcomb (typed data)
- freezer
- updeep
- icepick
- sprout
- mutatis
If you need to manipulate complex data structures in JavaScript in an immutable manner, you might also want to check out my partial.lenses library, which is a comprehensive, high-performance optics library for JavaScript. Here is the preface:
The library also comes with comprehensive documentation.