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
Lazy and 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.time implementation. 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.time implementation for Scala.js is that you avoid a few megabytes of dependencies; the disadvantage is that if you try to do anything with
java.time types, your program might compile but fail at runtime.