nippy/CHANGELOG.md

795 lines
30 KiB
Markdown
Raw Normal View History

2014-08-15 09:17:09 +00:00
> This project uses [Break Versioning](https://github.com/ptaoussanis/encore/blob/master/BREAK-VERSIONING.md) as of **Aug 16, 2014**.
2022-07-18 07:21:55 +00:00
## v3.2.0 / 2022 Jul 18
> Identical to v3.2.0-RC3 (2022 Jun 27)
```clojure
[com.taoensso/nippy "3.2.0"]
```
> This is a non-breaking maintenance release.
> See [here](https://github.com/ptaoussanis/encore#recommended-steps-after-any-significant-dependency-update) for recommended steps when updating any Clojure/Script dependencies.
#### New since `v3.1.3`
* [#144] [New] Add `org.joda.time.DateTime` to `default-thaw-serializable-allowlist` (@slipset)
* [#146] [New] Add Graal native configurations (@FieryCod)
#### Changes since `v3.1.3`
* Bump dependencies, incl. minimum Encore version
#### Fixes since `v3.1.1`
* [#89 #150] [Fix] Boxed Booleans incorrectly freezing to primitive `true` (@RolT)
* [#148] [Fix] `tools/freeze` should use `*freeze-opts*` even for unwrapped vals
* [#145] [Fix] Freezing custom types with munged field names
The boxed Boolean bug has been around since the first version of Nippy and is mostly
relevant to users doing Java interop. For more info see: https://github.com/ptaoussanis/nippy/commit/8909a32bdd654a136da385e0e09c9cc44416f964
2022-06-27 08:50:00 +00:00
## v3.2.0-RC3 / 2022 Jun 27
```clojure
[com.taoensso/nippy "3.2.0-RC3"]
```
> This is a non-breaking maintenance release.
> See [here](https://github.com/ptaoussanis/encore#recommended-steps-after-any-significant-dependency-update) for recommended steps when updating any Clojure/Script dependencies.
#### New since `v3.1.3`
* [#144] [New] Add `org.joda.time.DateTime` to `default-thaw-serializable-allowlist` (@slipset)
* [#146] [New] Add Graal native configurations (@FieryCod)
#### Changes since `v3.1.3`
* Bump dependencies, incl. minimum Encore version
#### Fixes since `v3.1.1`
* [#89 #150] [Fix] Boxed Booleans incorrectly freezing to primitive `true` (@RolT)
* [#148] [Fix] `tools/freeze` should use `*freeze-opts*` even for unwrapped vals
* [#145] [Fix] Freezing custom types with munged field names
The boxed Boolean bug has been around since the first version of Nippy and is mostly
relevant to users doing Java interop. For more info see: https://github.com/ptaoussanis/nippy/commit/8909a32bdd654a136da385e0e09c9cc44416f964
2022-06-23 11:18:10 +00:00
## v3.2.0-RC2 / 2022 Jun 23
2022-06-23 10:38:11 +00:00
```clojure
2022-06-23 11:18:10 +00:00
[com.taoensso/nippy "3.2.0-RC2"]
2022-06-23 10:38:11 +00:00
```
> This is a non-breaking maintenance release.
> See [here](https://github.com/ptaoussanis/encore#recommended-steps-after-any-significant-dependency-update) for recommended steps when updating any Clojure/Script dependencies.
2022-06-23 11:18:10 +00:00
#### New since `v3.1.3`
2022-06-23 10:38:11 +00:00
* [#144] [New] Add `org.joda.time.DateTime` to `default-thaw-serializable-allowlist` (@slipset)
* [#146] [New] Add Graal native configurations (@FieryCod)
2022-06-23 11:18:10 +00:00
#### Changes since `v3.1.3`
2022-06-23 10:38:11 +00:00
* Bump dependencies, incl. minimum Encore version
#### Fixes since `v3.1.1`
2022-06-23 11:18:10 +00:00
* [#148] [Fix] `tools/freeze` should use `*freeze-opts*` even for unwrapped vals
2022-06-23 10:38:11 +00:00
* [#89 #150] [Fix] Boxed Booleans incorrectly freezing to primitive `true` (@RolT)
2022-06-23 11:18:10 +00:00
The boxed Boolean bug has been around since the first version of Nippy and is mostly
relevant to users doing Java interop. For more info see: https://github.com/ptaoussanis/nippy/commit/8909a32bdd654a136da385e0e09c9cc44416f964
2022-06-23 10:38:11 +00:00
2022-06-23 11:18:10 +00:00
## v3.1.3 / 2022 Jun 23
2022-06-23 09:12:35 +00:00
```clojure
2022-06-23 11:18:10 +00:00
[com.taoensso/nippy "3.1.3"]
2022-06-23 09:12:35 +00:00
```
2022-06-23 10:38:11 +00:00
> This is a non-breaking, bugfix release.
> See [here](https://github.com/ptaoussanis/encore#recommended-steps-after-any-significant-dependency-update) for recommended steps when updating any Clojure/Script dependencies.
#### Fixes since `v3.1.1`
2022-06-23 09:12:35 +00:00
2022-06-23 11:18:10 +00:00
* [#148] [Fix] `tools/freeze` should use `*freeze-opts*` even for unwrapped vals
2022-06-23 09:12:35 +00:00
* [#89 #150] [Fix] Boxed Booleans incorrectly freezing to primitive `true` (@RolT)
2022-06-23 11:18:10 +00:00
The boxed Boolean bug has been around since the first version of Nippy and is mostly
relevant to users doing Java interop. For more info see: https://github.com/ptaoussanis/nippy/commit/8909a32bdd654a136da385e0e09c9cc44416f964
2022-06-23 09:12:35 +00:00
2022-06-23 10:38:11 +00:00
2020-11-18 10:55:36 +00:00
## v3.1.1 / 2020 Nov 18
```clojure
[com.taoensso/nippy "3.1.1"]
```
> This is a non-breaking, bugfix release. But please note that large keywords or symbols (with >127 characters) frozen with >=`v3.1.1` will need >=`v3.1.1` to thaw.
#### Fixes since `v3.1.0`
* Large keywords and symbols (with >127 characters) can now thaw without throwing (@danmason).
[1] Keywords or symbols with >127 characters in their name
2020-11-06 14:45:36 +00:00
## v3.1.0 / 2020 Nov 6
```clojure
[com.taoensso/nippy "3.1.0"]
```
> This is a non-breaking, minor feature release.
#### New since `v3.0.0`
* [#135 #128] Added native `freeze/thaw` support for `java.time` classes on JVM 8+: `Instant`, `Duration`, `Period`.
* [#137] Add `thaw-from-resource` convenience util.
* Add (DEPRECATED) `swap-serializable-whitelist!` for backwards compatibility.
#### Changes since `v3.0.0`
* Add several standard `java.time` classes to default `*thaw-serializable-whitelist*`.
2020-10-24 12:31:37 +00:00
## v3.1.0-RC1 / 2020 Oct 24
```clojure
[com.taoensso/nippy "3.1.0-RC1"]
```
> This is a non-breaking, minor feature release.
#### New since `v3.0.0`
* [#135 #128] Added native `freeze/thaw` support for `java.time.Instant` on JVM 8+ (@cnuernber).
2020-10-24 12:31:37 +00:00
2020-09-20 10:08:16 +00:00
## v3.0.0 / 2020 Sep 20
```clojure
[com.taoensso/nippy "3.0.0"]
```
> This release is focused on smoothing out rough edges left by `CVE-2020-24164` [#130], and to **ease transition** from versions of Nippy < `v2.15.0 final`.
> See [here](https://github.com/ptaoussanis/encore#recommended-steps-after-any-significant-dependency-update) for recommended steps when updating any Clojure/Script dependencies.
Note that there's **separate details** below for upgrading from `v2.15` vs `v2.14`:
2020-09-20 11:37:09 +00:00
### Upgrading from `v2.15` (usually non-breaking)
2020-09-20 10:08:16 +00:00
Usually a non-breaking drop-in replacement, but there's some changes you might like to take advantage of. See [#130] for **detailed upgrade instructions**.
#### Changes
- **[BREAKING]** Bumped minimum Clojure version from `v1.5` to `v1.7`.
- **[BREAKING]** `:nippy/unthawable` responses now have a standardized form: `{:nippy/unthawable {:type _ :cause _ ...}`. Most folks won't care about this change unless they have code specifically to deal with `:nippy/unthawable` responses.
- [Deprecated] `*serializable-whitelist*` has been split into two separate vars: `*freeze-serializable-allowlist*`, `*thaw-serializable-allowlist`*. See [#130] for details.
- By default, `freeze` now **allows** the use of Java's Serializable for **any** class. `thaw` continues to be restrictive by default, and will quarantine any objects not on the class allowlist. See [#130] for details.
#### New
- [#122] Option to disable freezing and/or thawing of metadata.
- `freeze` and `thaw` now support opts: `:serializable-allowlist`, `:incl-metadata?`.
- New `read-quarantined-serializable-object-unsafe!` util to read quarantined Serializable objects. See [API docs](http://ptaoussanis.github.io/nippy/taoensso.nippy.html#var-read-quarantined-serializable-object-unsafe.21) and/or [#130] for details.
- Add `allow-and-record-any-serializable-class-unsafe` util. See [API docs](http://ptaoussanis.github.io/nippy/taoensso.nippy.html#var-allow-and-record-any-serializable-class-unsafe) and/or [#130] for details.
2020-09-20 11:37:09 +00:00
### Upgrading from `v2.14` (may be BREAKING)
2020-09-20 10:08:16 +00:00
Likely breaking. Please see [#130] for **detailed upgrade instructions**.
#### Changes
- **[BREAKING]** Bumped minimum Clojure version from `v1.5` to `v1.7`.
- **[BREAKING]** [#130] `thaw` will now quarantine Serializable objects whose class is not allowed by `*thaw-serializable-allowlist*`. See [#130] for details.
- **[BREAKING]** `:nippy/unthawable` responses now have a standardized form: `{:nippy/unthawable {:type _ :cause _ ...}`. Most folks won't care about this change unless you have code specifically to deal with `:nippy/unthawable` responses.
- [#101] Switch default encryptor from `AES-CBC` to `AES-GCM` (faster, includes integrity check)
#### New
- [#127] Add utils: `freeze-to-string`, `thaw-from-string` (@piotr-yuxuan)
- [#113 #114] Add support for object arrays (@isaksky)
- [#83 #112] Add support for deftype (@isaksky)
- [#83 #113] Add support for URIs (@isaksky)
- [#126] `extend-freeze`: include id collision odds in docstring
#### Fixes
- [#120] Update `freezable?` to cover `nil`
2020-09-12 10:26:55 +00:00
## v3.0.0-RC3 / 2020 Sep 12
2020-09-12 10:16:01 +00:00
```clojure
2020-09-12 10:26:55 +00:00
[com.taoensso/nippy "3.0.0-RC3"]
2020-09-12 10:16:01 +00:00
```
#### New since `v3.0.0-RC1`
- Serializable: add `allow-and-record-any-serializable-class-unsafe` util.
2020-09-11 09:35:19 +00:00
## v3.0.0-RC1 / 2020 Sep 11
```clojure
[com.taoensso/nippy "3.0.0-RC1"]
```
> Major **BREAKING** feature + security release.
> See [here](https://github.com/ptaoussanis/encore#recommended-steps-after-any-significant-dependency-update) for recommended steps when updating any Clojure/Script dependencies.
> This release is focused on smoothing out rough edges left by `CVE-2020-24164` [#130], and to **ease transition** from version of Nippy < `v2.15.0` final.
> Apologies for the recent breaking changes!
Note that there's separate documentation below if upgrading from `v2.15` or `v2.14`:
2020-09-12 10:16:01 +00:00
### Since `v2.15.0` (incl. BREAKING changes)
2020-09-11 09:35:19 +00:00
See [#130] for **detailed upgrade instructions**.
2020-09-12 10:16:01 +00:00
#### Changes
2020-09-11 09:35:19 +00:00
- **[BREAKING]** Bumped minimum Clojure version from `v1.5` to `v1.7`.
- **[BREAKING]** `*serializable-whitelist*` has been split into two separate vars: `*freeze-serializable-allowlist*`, `*thaw-serializable-allowlist`*. See [#130] for details.
- **[BREAKING]** `:nippy/unthawable` responses now have a standardized form: `{:nippy/unthawable {:type _ :cause _ ...}`. Most folks won't care about this change unless you have code specifically to deal with `:nippy/unthawable` responses.
- By default, `freeze` now allows the use of Java's Serializable for any class. `thaw` continues to be restrictive by default, and will quarantine any objects not on the class allowlist. See [#130] for details.
2020-09-12 10:16:01 +00:00
#### New
2020-09-11 09:35:19 +00:00
- [#122] Option to disable freezing and/or thawing of metadata.
- `freeze` and `thaw` now support opts: `:serializable-allowlist`, `:incl-metadata?`.
- New `read-quarantined-serializable-object-unsafe!` util to read quarantined Serializable objects. See [#130] for details.
2020-09-12 10:16:01 +00:00
### Since `v2.14.0` (incl. BREAKING changes)
2020-09-11 09:35:19 +00:00
See [#130] for **detailed upgrade instructions**.
2020-09-12 10:16:01 +00:00
#### Changes
2020-09-11 09:35:19 +00:00
- **[BREAKING]** [#130] `thaw` will now quarantine Serializable objects whose class is not allowed by `*thaw-serializable-allowlist*`. See [#130] for details.
- **[BREAKING]** Bumped minimum Clojure version from `v1.5` to `v1.7`.
- **[BREAKING]** `:nippy/unthawable` responses now have a standardized form: `{:nippy/unthawable {:type _ :cause _ ...}`. Most folks won't care about this change unless you have code specifically to deal with `:nippy/unthawable` responses.
- [#101] Switch default encryptor from `AES-CBC` to `AES-GCM` (faster, includes integrity check)
2020-09-12 10:16:01 +00:00
#### New
2020-09-11 09:35:19 +00:00
- [#127] Add utils: `freeze-to-string`, `thaw-from-string` (@piotr-yuxuan)
- [#113 #114] Add support for object arrays (@isaksky)
- [#83 #112] Add support for deftype (@isaksky)
- [#83 #113] Add support for URIs (@isaksky)
- [#126] `extend-freeze`: include id collision odds in docstring
2020-09-12 10:16:01 +00:00
#### Fixes
2020-09-11 09:35:19 +00:00
- [#120] Update `freezable?` to cover `nil`
2020-09-10 09:44:47 +00:00
## v2.15.3 / 2020 Sep 10
```clojure
[com.taoensso/nippy "2.15.3"]
```
2020-09-11 09:35:19 +00:00
> Non-breaking release. See [here](https://github.com/ptaoussanis/encore#recommended-steps-after-any-significant-dependency-update) for recommended steps when updating any Clojure/Script dependencies.
2020-09-10 09:44:47 +00:00
#### Changes since `v2.15.2`
* `*serializable-whitelist*`: added a number of common classes to default value. See `default-serializable-whitelist` for details.
## v2.15.2 / 2020 Aug 31
```clojure
[com.taoensso/nippy "2.15.2"]
```
> This is a quick hotfix release, should be non-breaking.
Only change since `v2.15.0` is to bump Encore dependency (`v2.124.0`->`v2.126.2`).
Encore `v1.123.0` introduced an issue affecting Timbre.
Issue was addressed with Encore `v2.125.2`.
Updating Encore here doesn't affect Nippy, but may be helpful for users of
Nippy that also use Timbre and that haven't otherwise updated to a newer
version of Encore yet.
2020-08-27 08:30:50 +00:00
## v2.15.1 / 2020 Aug 27
```clojure
[com.taoensso/nippy "2.15.1"]
```
> This is a minor feature release. Should be non-breaking.
**New** since `v2.15.0`:
- `*serializable-whitelist*`: sets of approved class names may now contain "*" wildcards.
- `*serializable-whitelist*`: added JVM properties and env vars to override initial value. See updated docstring for details.
**Changes** since `v2.15.0`:
- [#126] `extend-freeze`: include id collision odds in docstring.
2020-07-24 16:27:34 +00:00
## v2.15.0 / 2020 Jul 24
2018-09-08 17:38:41 +00:00
```clojure
2020-07-24 16:27:34 +00:00
[com.taoensso/nippy "2.15.0"]
2018-09-08 17:38:41 +00:00
```
2020-07-24 16:27:34 +00:00
> This is a **major** feature release. It may be **BREAKING**!
2018-09-08 17:38:41 +00:00
2020-07-24 16:27:34 +00:00
**BREAKING CHANGES** since `v2.14.0`:
* [#130] Add `*serialization-whitelist*`, **ENABLED BY DEFAULT**.
See https://github.com/ptaoussanis/nippy/issues/130 for details, incl. upgrade instructions.
Big thanks to **Timo Mihaljov** (@solita-timo-mihaljov) for an excellent report identifying this vulnerability!
**New** since `v2.14.0`:
* [#127] Add utils: `freeze-to-string`, `thaw-from-string` (@piotr-yuxuan)
* [#113 #114] Add support for object arrays (@isaksky)
* [#83 #112] Add support for deftype (@isaksky)
* [#83 #113] Add support for URIs (@isaksky)
**Changes** since `v2.14.0`:
* [#101] Switch default encryptor from `AES-CBC` to `AES-GCM` (faster, includes integrity check)
* Refactor encryption utils for extra flexibility in future
* Latest dependencies
**Fixes** since `v2.14.0`:
* [#120] Update `freezable?` to cover `nil`
## v2.14.2 / 2020 Jul 24
```clojure
[com.taoensso/nippy "2.14.2"]
```
> This is a non-breaking **hotfix security release**. PLEASE READ CAREFULLY.
**New** since `v2.14.0`:
* [#130] Add `*serialization-whitelist*` feature, **DISABLED BY DEFAULT**.
### *** SECURITY ADVISORY ***
To prevent a possible **Remote Code Execution (RCE) vulnerability** (#130), you must **opt-in** to use the new `*serialization-whitelist*` feature.
See the `nippy/*serialization-whitelist*` docstring for usage instructions.
2018-09-08 17:38:41 +00:00
2017-12-21 10:02:39 +00:00
## v2.14.0 / 2017 Dec 21
```clojure
[com.taoensso/nippy "2.14.0"]
```
> This is a minor, non-breaking maintenance release.
* **Impl**: Update a number of dependencies
* [#104] **Impl**: Micro-optimization: remove unnecessary runtime 'if' in extend-freeze macro (@scramjet)
* [#93] **Impl**: Pickup record redefinitions at REPL, etc. (@smee)
2017-02-13 16:59:18 +00:00
## v2.13.0 / 2017 Feb 13
```clojure
[com.taoensso/nippy "2.13.0"]
```
> This is a minor, non-breaking maintenance release.
* [#91] **New**: Add `freeze-to-file` and `thaw-from-file` utils (@Engelberg)
2017-02-13 17:12:34 +00:00
* [#85] **Impl**: Lazily create LZ4 instance, fixes issue with Google App Engine
2017-02-13 16:59:18 +00:00
* **Impl**: Bump 1-byte cacheable types from 5->8
2016-12-17 11:10:26 +00:00
## v2.13.0-RC1 / 2016 Dec 17
```clojure
[com.taoensso/nippy "2.13.0-RC1"]
```
> This should be a minor, non-breaking release.
2017-02-13 16:59:18 +00:00
* [#85] **Impl**: Lazily create LZ4 instance, fixes issue with Google App Engine
* **Impl**: Bump 1-byte cacheable types from 5->8
2016-12-17 11:10:26 +00:00
2016-10-17 08:54:53 +00:00
## v2.12.2 / 2016 Aug 23
```clojure
[com.taoensso/nippy "2.12.2"]
```
* **Hotfix**: private API typo
2016-07-26 05:24:25 +00:00
## v2.12.1 / 2016 Jul 26
```clojure
[com.taoensso/nippy "2.12.1"]
```
* **Hotfix**: thaw was missing support for deprecated serializable, record types [@rwilson]
2016-07-24 08:56:01 +00:00
## v2.12.0 / 2016 Jul 24
```clojure
[com.taoensso/nippy "2.12.0"]
```
> This is a **major release** that **may** involve some **breaking API changes** in rare cases for users of some low-level or obscure features that have been made private or removed. If your code compiles with this new version of Nippy, you should be fine.
> As with all Nippy releases: this version can read data written by older versions but older versions may not be able to read data written by _this_ version.
> No changes since `2.12.0-RC2`
> Changes since `2.11.1`:
* **BREAKING**: dropped support for `*final-freeze-fallback*` (rarely used)
* **BREAKING**: dropped support for `*default-freeze-compressor-selector*` (rarely used)
* **BREAKING**: made several implementation details private, incl. most low-level `write-<x>` and `read-<x>` fns (rarely used)
* **Performance**: several significant speed + space efficiency improvements, including more variable-sized types
* **New built-in types** (these previously fell back to the reader): regex patterns, symbols
* **New experimental caching feature** (please see `cache` docstring for details)
* **New**: `fast-freeze`, `fast-thaw` utils (please see docstrings for details)
* **Change**: `freeze` return val is no longer auto type hinted as `^bytes` (had a performance cost, rarely used)
* **Hotfix**: `fn?`s were incorrectly reporting true for `serializable?`
* **Hotfix**: *final-freeze-fallback* back compatibility was broken
2016-07-17 08:34:35 +00:00
## v2.12.0-RC2 / 2016 Jul 17
```clojure
[com.taoensso/nippy "2.12.0-RC2"]
```
2016-07-24 08:56:01 +00:00
> Changes since `2.12.0-RC1`:
2016-07-17 08:34:35 +00:00
* **New**: Experimental `cache` feature now supports metadata
* **Impl**: Some additional minor performance improvements
2016-06-23 13:10:34 +00:00
## v2.12.0-RC1 / 2016 Jun 23
```clojure
[com.taoensso/nippy "2.12.0-RC1"]
```
> This is a **major release** that **may** involve some **breaking API changes** in rare cases for users of some low-level or obscure features that have been made private or removed. If your code compiles with this new version of Nippy, you should be fine.
> As with all Nippy releases: this version can read data written by older versions but older versions may not be able to read data written by _this_ version.
**PLEASE REPORT ANY PROBLEMS**, thank you!
- @ptaoussanis
> No changes since `2.12.0-beta3`.
> Changes since `2.11.1`:
* **BREAKING**: dropped support for `*final-freeze-fallback*` (rarely used)
* **BREAKING**: dropped support for `*default-freeze-compressor-selector*` (rarely used)
* **BREAKING**: made several implementation details private, incl. most low-level `write-<x>` and `read-<x>` fns (rarely used)
* **Performance**: several significant speed + space efficiency improvements, including more variable-sized types
* **New built-in types** (these previously fell back to the reader): regex patterns, symbols
* **New experimental caching feature** (please see `cache` docstring for details)
* **New**: `fast-freeze`, `fast-thaw` utils (please see docstrings for details)
* **Change**: `freeze` return val is no longer auto type hinted as `^bytes` (had a performance cost, rarely used)
* **Hotfix**: `fn?`s were incorrectly reporting true for `serializable?`
* **Hotfix**: *final-freeze-fallback* back compatibility was broken
2016-06-17 05:33:02 +00:00
## v2.12.0-beta3 / 2016 Jun 17
```clojure
[com.taoensso/nippy "2.12.0-beta3"]
```
> Changes since **2.12.0-beta2**:
* **Hotfix**: `fn?`s were incorrectly reporting true for `serializable?`
* **Hotfix**: *final-freeze-fallback* back compatibility was broken
2016-06-10 03:37:29 +00:00
## v2.12.0-beta2 / 2016 Jun 10
2016-04-13 12:25:33 +00:00
```clojure
2016-06-10 03:37:29 +00:00
[com.taoensso/nippy "2.12.0-beta2"]
2016-04-13 12:25:33 +00:00
```
> This is a **major release** that **may** involve some **breaking API changes** in rare cases for users of some low-level or obscure features that have been made private or removed. If your code compiles with this new version of Nippy, you should be fine.
> As with all Nippy releases: this version can read data written by older versions but older versions may not be able to read data written by _this_ version.
* **BREAKING**: dropped support for `*final-freeze-fallback*` (rarely used)
* **BREAKING**: dropped support for `*default-freeze-compressor-selector*` (rarely used)
* **BREAKING**: made several implementation details private, incl. most low-level `write-<x>` and `read-<x>` fns (rarely used)
* **Performance**: several significant speed + space efficiency improvements, including more variable-sized types
* **New built-in types** (these previously fell back to the reader): regex patterns, symbols
* **New experimental caching feature** (please see `cache` docstring for details)
* **New**: `fast-freeze`, `fast-thaw` utils (please see docstrings for details)
* **Change**: `freeze` return val is no longer auto type hinted as `^bytes` (had a performance cost, rarely used)
**PLEASE REPORT ANY PROBLEMS**, thank you!
2016-02-25 12:00:26 +00:00
## v2.11.1 / 2016 Feb 25
> **Hotfix** for broken Clojure 1.5 support
```clojure
[com.taoensso/nippy "2.11.1"]
```
2016-02-25 11:48:45 +00:00
## v2.11.0 / 2016 Feb 25
> Identical to v2.11.0-beta1 (published December 13 2015)
```clojure
[com.taoensso/nippy "2.11.0"]
```
2016-01-23 04:10:34 +00:00
## v2.11.0-RC1 / 2016 Jan 23
> Identical to v2.11.0-beta1 (published December 13 2015)
```clojure
[com.taoensso/nippy "2.11.0-RC1"]
```
2015-12-13 04:25:38 +00:00
## v2.11.0-beta1 / 2015 Dec 13
2015-12-01 08:33:00 +00:00
> This is a major performance release that **drops default support for thawing Nippy v1 archives** but is otherwise non-breaking
* **BREAKING**: `thaw` now has `:v1-compatibility?` opt set to false by default (was true before) [1]
* **Performance**: optimize serialized size of small maps, sets, vectors, bytes
* **Performance**: optimized (no copy) `freeze` when using no compression or encryption
* **Implementation**: swap most macros for fns (make low-level utils easier to use)
```clojure
2015-12-13 04:25:38 +00:00
[com.taoensso/nippy "2.11.0-beta1"]
2015-12-01 08:33:00 +00:00
```
#### Notes
**[1]** Use `(thaw <frozen-byte-array> {:v1-compatibility? true})` to support thawing of data frozen with Nippy v1 (before ~June 2013)
2015-09-30 05:11:32 +00:00
## v2.10.0 / 2015 Sep 30
2015-09-14 10:09:45 +00:00
2015-09-30 05:11:32 +00:00
> This is a major feature/performance release that **drops support for Clojure 1.4** but is otherwise non-breaking
2015-09-14 10:09:45 +00:00
2015-09-30 05:11:32 +00:00
* **BREAKING**: drop support for Clojure 1.4 (**now requires Clojure 1.5+**)
2015-09-14 10:09:45 +00:00
* **Performance**: various small performance improvements
* **New**: dynamic `*default-freeze-compressor-selector*`, `set-default-freeze-compressor-selector!` util
* **New**: dynamic `*custom-readers*`, `swap-custom-readers!` util
* **New**: edn writes now override dynamic `*print-level*`, `*print-length*` for safety
```clojure
2015-09-30 05:11:32 +00:00
[com.taoensso/nippy "2.10.0"]
2015-09-14 10:09:45 +00:00
```
2015-09-14 10:03:15 +00:00
## v2.9.1 / 2015 Sep 14
> This is a hotfix release with an **important fix** for Nippy encryption users
* **Fix**: broken encryption thread-safety [#68]
```clojure
[com.taoensso/nippy "2.9.1"]
```
## v2.9.0 / 2015 Jun 1
2015-05-29 07:25:33 +00:00
2015-09-14 10:09:45 +00:00
> This is a major **non-breaking** release that improves performance and makes thawing more resilient to certain failures. Identical to **v2.9.0-RC3**.
2015-05-29 07:25:33 +00:00
2015-06-01 03:45:28 +00:00
* **Robustness**: improve error handling for unthawable records
* **Performance**: switch `doseq` -> (faster) `run!` calls
* **Performance**: eliminate some unnecessary boxed math
* **New**: allow intelligent auto-selection of `freeze` compression scheme using `:auto` compressor (now the default). This can result in significant speed+space improvements for users serializing many small values.
2015-05-29 07:25:33 +00:00
```clojure
2015-06-01 03:45:28 +00:00
[com.taoensso/nippy "2.9.0"]
2015-04-17 12:35:07 +00:00
```
2015-02-18 10:33:22 +00:00
## v2.8.0 / 2015 Feb 18
> This is a **maintenance release** with some minor fixes and some dependency updates.
* **CHANGE**: Throw a clear error message on insufficient Encore dependency.
* **FIX** [#59]: `freezable?` should return true for clojure.lang.PersistentVector (@chairmanwow).
* **FIX** [#63]: Missing thaw exception cause (@cespare).
2014-11-27 10:31:14 +00:00
## v2.7.1 / 2014 Nov 27
> This is a **minor maintenance release** & should be a safe upgrade for users of v2.7.0/RC-1.
* **CHANGE**: Improve some error messages by exposing trapped throwables when possible (@kul).
* **FIX**: Nippy v1 thaw compatibility was broken in some cases.
* Bumped dependencies.
2014-10-06 07:56:47 +00:00
## v2.7.0 / 2014 Oct 6
No changes from `v2.7.0-RC1`.
2014-08-27 12:18:33 +00:00
## v2.7.0-RC1 / 2014 Aug 27
2014-04-05 11:14:24 +00:00
> **Major release** with significant performance improvements, a new default compression type ([LZ4](http://blog.jpountz.net/post/28092106032/wow-lz4-is-fast)), and better support for a variety of compression/encryption tools.
>
> The data format is fully **backwards-compatible**, the API is backwards compatible **unless** you are using the `:headerless-meta` thaw option.
### Changes
* A number of internal performance improvements.
* Added [LZ4](http://blog.jpountz.net/post/28092106032/wow-lz4-is-fast) compressor, **replacing Snappy as the default** (often ~10+% faster with similar compression ratios). **Thanks to [mpenet](https://github.com/mpenet) for his work on this**!
* **BREAKING**: the `thaw` `:headerless-meta` option has been dropped. Its purpose was to provide Nippy v1 compatibility, which is now done automatically. To prevent any surprises, `thaw` calls with this option will now **throw an assertion error**.
* **IMPORTANT**: the `thaw` API has been improved (simplified). The default `:encryptor` and `:compressor` values are now both `:auto`, which'll choose intelligently based on data now included with the Nippy header. Behaviour remains the same for data written without a header: you must specify the correct `:compressor` and `:encryptor` values manually.
* Promoted from Alpha status: `taoensso.nippy.compression` ns, `taoensso.nippy.encryption` ns, `taoensso.nippy.tools` ns, `extend-freeze`, `extend-thaw`.
* All Nippy exceptions are now `ex-info`s.
2014-08-27 12:18:33 +00:00
* `extend-thaw` now prints a warning when replacing a pre-existing type id.
2014-04-05 11:14:24 +00:00
### NEW
* #50: `extend-freeze`, `extend-thaw` can now take arbitrary keyword type ids (see docstrings for more info).
2014-04-29 15:55:21 +00:00
## v2.6.3 / 2014 Apr 29
* Fix #48: broken freeze/thaw identity for empty lazy seqs (@vgeshel).
2014-04-10 09:33:45 +00:00
## v2.6.2 / 2014 Apr 10
2014-04-29 15:55:21 +00:00
* Fix #46: broken support for Clojure <1.5.0 (@kul).
2014-04-10 09:33:45 +00:00
## v2.6.1 / 2014 Apr 8
2014-04-08 10:07:32 +00:00
**CRITICAL FIX** for v2.6.0 released 9 days ago. **Please upgrade ASAP!**
2014-04-08 10:07:32 +00:00
### Problem
Small strings weren't getting a proper UTF-8 encoding:
`(.getBytes <string>)` was being used here instead of
`(.getBytes <string> "UTF-8")` as is correct and done elsewhere.
This means that small UTF-8 _strings may have been incorrectly stored_
in environments where UTF-8 is not the default JVM character encoding.
Bug was introduced in Nippy v2.6.0, released 9 days ago (2014 Mar 30).
*********************************************************************
Please check for possible errors in Unicode text written using Nippy
v2.6.0 if your JVM uses an alternative character encoding by default
*********************************************************************
Really sorry about this! Thanks to @xkihzew for the bug report.
2014-03-30 12:28:51 +00:00
## v2.6.0 / 2014 Mar 30
2014-01-22 10:02:34 +00:00
2014-03-12 05:19:58 +00:00
> **Major release** with efficiency improvements, reliability improvements, and some new utils.
2014-02-22 17:58:37 +00:00
### New
2014-01-22 10:02:34 +00:00
* Low-level fns added: `freeze-to-out!`, `thaw-from-in!` for operating directly on DataOutputs/DataInputs.
2014-01-23 05:40:13 +00:00
* Data size optimizations for some common small data types (small strings/keywords, small integers).
2014-01-22 10:02:34 +00:00
* New test suite added to ensure a 1-to-1 value->binary representation mapping for all core data types. This will be a guarantee kept going forward.
2014-01-23 05:40:13 +00:00
* New `:skip-header?` `freeze` option to freeze data without standard Nippy headers (can be useful in very performance sensitive environments).
2014-01-22 10:02:34 +00:00
* New benchmarks added, notably a Fressian comparison.
2014-02-16 11:54:08 +00:00
* Added experimental `freezable?` util fn to main ns.
* Added some property-based [simple-check](https://github.com/reiddraper/simple-check) roundtrip tests.
2014-03-12 05:19:58 +00:00
* Public utils now available for custom type extension: `write-bytes`, `write-biginteger`, `write-utf8`, `write-compact-long`, and respective readers.
2014-02-16 11:54:08 +00:00
2014-01-22 10:02:34 +00:00
### Changes
2014-02-22 17:58:37 +00:00
2014-01-22 10:02:34 +00:00
* **BREAKING**: the experimental `Compressable-LZMA2` type has changed (less overhead).
* **DEPRECATED**: `freeze-to-stream!`, `thaw-from-stream!` are deprecated in favor of the more general `freeze-to-out!`, `thaw-from-in!`.
* **DEPRECATED**: `:legacy-mode` options. This was being used mainly for headerless freezing, so a new headerless mode is taking its place.
2014-02-16 11:54:08 +00:00
* Now distinguish between `BigInteger` and `BigInt` on thawing (previously both thawed to `BigInt`s). (mlacorte).
2014-02-23 18:42:25 +00:00
* Moved most utils to external `encore` dependency.
2014-02-16 11:54:08 +00:00
2014-01-22 10:02:34 +00:00
2014-02-22 17:58:37 +00:00
## v2.5.2 / 2013 Dec 7
2014-01-22 10:02:34 +00:00
2014-02-22 17:58:37 +00:00
### New
2014-01-22 10:02:34 +00:00
* Test Serializable objects at freeze time for better reliability.
2014-02-22 17:58:37 +00:00
* Thaw error messages now include failing type-id.
### Changes
* Don't cache `serializable?`/`readable?` for types with gensym-style names (e.g. as used for anonymous fns, etc.).
* Failed serialized/reader thaws will try return what they can (e.g. unreadable string) instead of just throwing.
2014-02-22 17:58:37 +00:00
## v2.5.1 / 2013 Dec 3
### New
* Added experimental `inspect-ba` fn for examining data possibly frozen by Nippy.
2014-02-22 17:58:37 +00:00
### Changes
* Now throw exception at freeze (rather than thaw) time when trying to serialize an unreadable object using the Clojure reader.
2013-11-18 07:09:03 +00:00
## v2.4.1 → v2.5.0
2013-10-24 07:01:35 +00:00
* Refactored standard Freezable protocol implementations to de-emphasise interfaces as a matter of hygiene, Ref. http://goo.gl/IFXzvh.
2013-10-24 11:53:02 +00:00
* BETA STATUS: Added an additional (pre-Reader) Serializable fallback. This should greatly extend the number of out-the-box-serializable types.
2013-10-31 06:33:21 +00:00
* ISeq is now used as a fallback for non-concrete seq types, giving better type matching pre/post freeze for things like LazySeqs, etc.
2013-11-06 06:12:41 +00:00
* Experimental: add `Compressable-LZMA2` type & (replaceable) de/serializer.
2013-10-24 07:01:35 +00:00
2013-10-19 11:18:31 +00:00
## v2.3.0 → v2.4.1
2013-10-19 08:37:10 +00:00
* Added (alpha) LZMA2 (high-ratio) compressor.
* Bump tools.reader dependency to 0.7.9.
2013-10-17 10:51:06 +00:00
## v2.2.0 → v2.3.0
* Huge (~30%) improvement to freeze time courtesy of Zach Tellman (ztellman).
2013-10-03 14:21:59 +00:00
## v2.1.0 → v2.2.0
2013-08-07 10:59:52 +00:00
* Dropped `:read-eval?`, `:print-dup?` options.
Thanks to James Reeves (weavejester) for these changes!:
* Switched to `tools.reader.edn` for safer reader fallback.
* Added fast binary serialization for Date and UUID types.
* Added fast binary serialization for record types.
2013-07-29 08:59:24 +00:00
## v2.0.0 → v2.1.0
* Exposed low-level fns: `freeze-to-stream!`, `thaw-from-stream!`.
* Added `extend-freeze` and `extend-thaw` for extending to custom types:
2013-08-05 06:36:52 +00:00
2013-07-29 08:59:24 +00:00
* Added support for easily extending Nippy de/serialization to custom types:
2013-08-05 06:36:52 +00:00
```clojure
(defrecord MyType [data])
(nippy/extend-freeze MyType 1 [x steam] (.writeUTF stream (:data x)))
(nippy/extend-thaw 1 [stream] (->MyType (.readUTF stream)))
(nippy/thaw (nippy/freeze (->MyType "Joe"))) => #taoensso.nippy.MyType{:data "Joe"}
```
2013-07-29 08:59:24 +00:00
2013-07-22 16:44:37 +00:00
## v1.2.1 → v2.0.0
2013-07-23 16:21:48 +00:00
* **MIGRATION NOTE**: Please be sure to use `lein clean` to clear old (v1) build artifacts!
2013-06-27 12:01:01 +00:00
* Refactored for huge performance improvements (~40% roundtrip time).
* New header format for better error messages.
* New `taoensso.nippy.tools` ns for easier integration with 3rd-party tools.
* **DEPRECATED**: `freeze-to-bytes` -> `freeze`, `thaw-from-bytes` -> `thaw`.
See the new fn docstrings for updated opts, etc.
* Added pluggable compression support:
```clojure
(freeze "Hello") ; defaults to:
(freeze "Hello" {:compressor taoensso.nippy.compression/snappy-compressor})
;; The :compressor value above can be replaced with nil (no compressor) or
;; an alternative Compressor implementing the appropriate protocol
```
* Added pluggable crypto support:
```clojure
(freeze "Hello") ; defaults to:
(freeze "Hello" {:encryptor taoensso.nippy.encryption/aes128-encryptor}
;; The :encryptor value above can be replaced with nil (no encryptor) or
;; an alternative Encryptor implementing the appropriate protocol
```
2014-02-23 18:42:25 +00:00
See the [README](https://github.com/ptaoussanis/nippy#encryption-currently-in-alpha) for an example using encryption.