circe v0.12.0-M4 Release Notes

Release Date: 2019-07-02 // almost 5 years ago
  • ๐Ÿš€ 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.

    Highlights

    ๐Ÿ†• 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.

    Other stuff

    • ๐ŸŽ 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.