v0.14.0-M1June 12, 2020
v0.13.0February 08, 2020
🚀 This release candidate differs from the two 0.13.0 milestones in that it maintains binary compatibility with Circe 0.12.x (verified with MiMa) for all of the modules that don't depend on Jawn. We've updated Jawn to the new 1.0.0, which means that circe-jawn, circe-literal, and circe-parser (on the JVM) are not binary-compatible with 0.12.x.
⚡️ We've chosen to use 0.13 only for introducing Jawn 1.0.0, and wanted to make the update easy for people who have dependencies that may still be on circe-core or circe-generic 0.12.x.
🚀 This release is cross-published for Scala.js 1.0.0-RC2 for the same modules as the last two milestones.
I'll publish 0.13.0 in the next day or two if no issues come up before then.
🚀 This is an early pre-release that's designed to let people try out Circe with two specific pre-release dependencies: Jawn 1.0.0-RC2 and Scala.js 1.0.0-RC2. Note that not all of our dependencies are available for Scala.js 1.0.0-RC2, so not all of the modules in this repository are published for it, and the ones that are are largely untested. The following modules currently support Scala.js 1.0.0-RC2:
- ✅ circe-numbers-testing
- 📜 circe-parser
- ✅ circe-testing
🚀 Scala.js 1.0.0 is currently scheduled to be published at the end of this month (January 2020), and once it's available Circe will immediately drop Scala.js 0.6, so this may be the only Circe release that's cross-published for 0.6 and 1.0.
🚀 This release also updates the Cats dependency from 2.0.0 to 2.1.0, and includes a couple of minor changes (post-0.12 deprecation clean-up and the reinstatement of one
HCursormethod). Apart from the Jawn update and the removal of previously deprecated methods, this release should be fully binary-compatible and source-compatible with 0.12.x, although that's not guaranteed in any way. There are also no guarantees that future 0.13 releases will be compatible with this one.
🚀 This releases undoes a change in some
java.timeencodings between 0.12.1 and 0.12.2 (reported by @Bunyod in #1292). Before this change in 0.12.2, the
*DateTimeencoders included seconds, even when the value was zero:
scala\> import java.time.LocalDateTime, io.circe.syntax.\_import java.time.LocalDateTimeimport io.circe.syntax.\_scala\> val t = LocalDateTime.parse("2018-08-13T14:20:00") t: java.time.LocalDateTime = 2018-08-13T14:20scala\> t.asJson res0: io.circe.Json = "2018-08-13T14:20:00"
In 0.12.2 this changed:
scala\> t.asJson res0: io.circe.Json = "2018-08-13T14:20"
🚀 This release also includes a few new deprecations (#1302). Georgy Davityan noted that since we no longer support Scala 2.10, we can make our implicit value class fields private (#1291). While there's no reason these fields should ever be used outside the implicit class definition, I've provided deprecated methods replacing them to maintain binary compatibility until the next breaking release.
🚀 This release maintains binary compatibility with 0.12.1 but includes two bug fixes, a couple new methods, some optimizations, and several patch version updates for dependencies.
- ✅ Leif Warner reported and fixed a bug that affected custom
Decoder[Option[X]]instances defined using
handleErrorWith. I also added regression tests for this bug. Note that the bug shouldn't affect most users, and that in general we discourage defining custom decoders for
- 🗄 I fixed a bug reported by Alexandru Nedelcu that had resulted in deprecation warnings for users of the macro annotations in circe-generic-extras. I had previously fixed this issue in circe-generic-extras with a temporary workaround; the fix here makes the workaround unnecessary for both circe-generic-extras and other libraries built on circe-generic.
- Ben Stewart added a
JsonObjectand made the
Jsona little more efficient.
- 🚚 I added a new
Decoderthat's shorthand for
downField, which are often used together to move to a specific field before decoding.
- Andriy Plokhotnyuk contributed an optimization for
- ⚡️ Scala Steward updated the Scala.js version from 0.6.28 to 0.6.29.
⚡️ Other patch dependency updates include ScalaCheck and Discipline (for circe-testing) and Refined. None of these updates should affect users (except for possibly bumping their versions).
- ✅ Leif Warner reported and fixed a bug that affected custom
🚀 I wasn't planning for there to be a fourth 0.12.0 milestone, but a few significant things have happened since M3, and the timeline for Cats 2.0.0-RC1 is up in the air (thanks to ScalaTest), so I figured I'd go ahead and publish this for anyone who wants to try out the new stuff or check out what migration will look like for them.
🆕 New circe-generic-simple module
This release introduces a new 2.13-only circe-generic-simple module (#1180) that is a reimplementation of circe-generic for Scala 2.13. It doesn't use Shapeless's
Lazyand only contains a couple of custom macros (for the export mechanics). It passes the same tests as circe-generic, and should work as a drop-in replacement (but with much faster compilation and a much less complicated implementation). In future versions of circe this implementation will likely become circe-generic for 2.13, but first I want to give people a chance to try it out.
No more Scala 2.11
🚀 This is the first circe release that drops Scala 2.11 support (#1176). If you're still on 2.11, sorry, you need to fix that.
Instances for literal types
👍 Encoder and decoder instances for literal types are now available in circe-core on Scala 2.13 (#1191). Previously these instances were available via circe-literal, but now they can be implemented without macros, and now SIP-23 syntax is available to everyone, so I think it makes sense to support them without extra modules or imports.
Cursor API clean-up
🚚 A bunch of cursor operations have been removed or deprecated (#1186). These changes should affect very few users, but if they break your code, please open an issue or let us know in the Gitter channel.
- 🐎 There are a few runtime performance improvements (#1190); in particular map decoding should be faster.
- 🚀 This release reinstates a companion object in circe-jawn that was removed in 0.12.0-M3 (#1167).
PSA for Scala.js users
Starting with 0.12.0-M3, anyone using circe on Scala.js needs to bring their own
java.timeimplementation. Since publishing the last milestone, I put together a minimal
java.time"implementation" that eliminates the compile-time linking errors. The advantage over a real
java.timeimplementation for Scala.js is that you avoid a few megabytes of dependencies; the disadvantage is that if you try to do anything with
java.timetypes, your program might compile but fail at runtime.
🚀 This release updates the Cats version to 2.0.0-RC2. It also includes a few minor consistency-related changes, including new
Also, circe-generic-simple is back for 2.13 (I accidentally omitted it in 0.12.0-RC3), with a few minor changes (#1231).