taoensso / nippy

The fastest serialization library for Clojure
https://www.taoensso.com/nippy
Eclipse Public License 1.0
1.05k stars 60 forks source link
clojure compression edn encryption epl serialization taoensso

Taoensso open source
API | Wiki | 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 a mature, high-performance drop-in alternative to the reader.

It is used at scale by Carmine, Faraday, PigPen, Onyx, XTDB, Datalevin, and others.

Latest release/s

Main tests Graal tests

See here for earlier releases.

Why Nippy?

Quick example

Nippy's super easy to use:

(require '[taoensso.nippy :as nippy])

;; Freeze any Clojure value
(nippy/freeze <my-value>) ; => Serialized byte[]

;; Thaw the byte[] to get back the original value:
(nippy/thaw (nippy/freeze <my-value>)) ; => <my-value>

See the wiki for more.

Operational considerations

Data longevity

Nippy is widely used to store long-lived data and promises (as always) that data serialized today should be readable by all future versions of Nippy.

But please note that the converse is not generally true:

Rolling updates and rollback

From time to time, Nippy may introduce:

To help ease rolling updates and to better support rollback, Nippy (since version v3.4) will always introduce such changes over two version releases:

Starting from v3.4, Nippy's release notes will always clearly indicate if a particular update sequence is recommended.

Stability of byte output

It has never been an objective of Nippy to offer predictable byte output, and I'd generally recommend against depending on specific byte output.

However, I know that a small minority of users do have specialized needs in this area.

So starting with Nippy v3.4, Nippy's release notes will always clearly indicate if any changes to byte output are expected.

Performance

Since its earliest versions, Nippy has consistently been the fastest serialization library for Clojure that I'm aware of. Latest results:

benchmarks-png

PRs welcome to include other alternatives in the benchmark suite!

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).