When support is added for a new type in Nippy version X, it necessarily means that data containing that new type and frozen with Nippy version X is unthawable with Nippy versions < X. Earlier versions of Nippy will throw an exception on thawing affected data: \"Unrecognized type id (<n>). Data frozen with newer Nippy version?\" This can present a challenge when updating to new versions of Nippy, e.g.: - Rolling updates could lead to old and new versions of Nippy temporarily co-existing. - Data written with new types could limit your ability to revert a Nippy update. There's no easy solution to this in GENERAL, but we CAN at least help reduce the burden related to CHANGES in core data types by introducing changes over 2 phases: 1. Nippy vX reads new (changed) type, writes old type 2. Nippy vX+1 writes new (changed) type When relevant, we can then warn users in the CHANGELOG to not leapfrog (e.g. Nippy vX -> Nippy vX+2) when doing rolling updates. This commit bootstraps the new compatibility feature by initially targeting core type compatibility with Nippy v3.2.0 (2022-07-18). A future Nippy version (e.g. v3.5.0) will then target v3.4.0, with an appropriate CHANGELOG instruction to update in phases for environments that involve rolling updates. |
||
|---|---|---|
| .github/workflows | ||
| bb | ||
| doc | ||
| resources/META-INF/native-image/com.taoensso/nippy | ||
| src/taoensso | ||
| test/taoensso | ||
| wiki | ||
| .gitignore | ||
| bb.edn | ||
| benchmarks.png | ||
| CHANGELOG.md | ||
| FUNDING.yml | ||
| LICENSE.txt | ||
| project.clj | ||
| README.md | ||
| SECURITY.md | ||

Documentation | Latest releases | Get support
Nippy
The fastest serialization library for Clojure
Clojure's rich data types are awesome. And its reader allows you to take your data just about anywhere. But the reader can be painfully slow when you've got a lot of data to crunch (like when you're serializing to a database).
Nippy is an attempt to provide a reliable, high-performance drop-in alternative to the reader.
Used by Carmine, Faraday, PigPen, Onyx, XTDB, Datalevin, and others.
Latest release/s
2024-04-30v3.4.0: release info
See here for earlier releases.
Why Nippy?
- Small, simple all-Clojure library
- Terrific performance: the best for Clojure that I'm aware of
- Comprehensive support for all standard data types
- Easily extendable to custom data types
- Robust test suite, incl. full coverage for every supported type
- Auto fallback to Java Serializable when available
- Auto fallback to Clojure Reader for all other types (including tagged literals)
- Pluggable compression with built-in LZ4, Zstandard, etc.
- Pluggable encryption with built-in AES128
- Tools for easy + robust integration into 3rd-party libraries, etc.
- Powerful thaw transducer for flexible data inspection and transformation
Performance
Since its earliest versions, Nippy has consistently been the fastest serialization library for Clojure that I'm aware of. Latest benchmark results:
Documentation
Funding
You can help support continued work on this project, thank you!! 🙏
License
Copyright © 2012-2024 Peter Taoussanis.
Licensed under EPL 1.0 (same as Clojure).
