circe v0.12.0 Release Notes

Release Date: 2019-07-02 // almost 3 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.


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