circe / circe

Yet another JSON library for Scala
https://circe.github.io/circe/
Apache License 2.0
2.49k stars 541 forks source link

Planning for upcoming releases #1754

Open travisbrown opened 3 years ago

travisbrown commented 3 years ago

It's been 15 months since the last (non-milestone) breaking Circe release, and now that Scala 3 is out it seems like it's probably time to break stuff again.

My current plan is for 0.14.0 to be published soon (probably this week). It will be almost entirely binary-compatible with 0.13.x, with the main exception being some deprecated methods that have been removed. Its Scala 3 support will explicitly still be partial and experimental, since we're not currently publishing the string interpolator modules for Scala 3, and we're not currently running most tests on Scala 3, for various reasons that I'm not going to be able to work on this week. There are also some known issues with its use of Scala 3's new generic derivation mechanism, specifically related to code size.

At some point over the next few months, we'll publish 0.15.0, which should have four major improvements:

It's likely that 0.15.0 will keep Scala 2.12 support, although we'll probably drop it from that point forward (and there's some chance we'll drop it before).

If anyone has questions or concerns about this plan (especially if you've noticed issues in the recent 0.14.0 milestones), please comment here.

adpi2 commented 3 years ago

Thanks @travisbrown for sharing the planning. I noticed that 0.14.0-M7 has not been released for Scala.js with Scala 3. Is there any specific reason why?

travisbrown commented 3 years ago

@adpi2 Which modules are you missing in 0.14.0-M7? They all should be there except for the four that are specifically mentioned in the release notes as not being published for Scala 3 on Scala.js (circe-extras, circe-generic, circe-refined, and circe-scodec).

The issue was that I didn't want to wait for a Scala 3.0.0 release for scala-java-time, since it only blocked these four modules on Scala.js, and since I was planning an 0.14.0 follow-up soon anyway. I could go ahead and publish an 0.14.0-M8 now that scala-java-time 2.3.0 is out, but I'm not sure I want to add modules to 0.14.0-M7 with differing minor versions for a dependency (even a test dependency).

adpi2 commented 3 years ago

Thanks for the quick reply. I was indeed looking for circe-generic.

catchergeese commented 3 years ago

Thank you @travisbrown for the plan!

I have a question regarding circe-optics (I hope it's fine to post it here).

Circe-optic's latest version is 0.13.0 - with support up to Scala 2.13. Are there any plans of migrating/publishing 0.14.x version with Scala 3 support anytime soon?

travisbrown commented 3 years ago

@catchergeese Yes, there will be 0.14.0 releases of all Circe projects once 0.14.0 is out for this repo, although the process is likely to happen lazily.

In the meantime it should be safe to use circe-optics 0.13.0 with any 0.14.0 milestone, since the points of binary incompatibility are limited to some previously deprecated methods, etc. (I have confirmed that all circe-optics tests pass with the circe-core dependency updated to 0.14.0-M7).

travisbrown commented 3 years ago

@catchergeese About the question of Scala 3 support for circe-optics: I don't have any idea what the plan is for the timing of Monocle 3.0.0, and it depends largely on that. I think it's most likely that we'll need to publish 0.14.0 for Monocle 2.x and then as soon as someone wants to open a PR with Monocle 3.0.0-Mx support we can start publishing 0.15.0 milestones.

etspaceman commented 3 years ago

@travisbrown please consider supporting Scala 2.12 for a longer period of time. Both Spark and Flink are currently only offered in Scala 2.12, and removing support for this version means all Spark and Flink users would be unable to update Circe.

travisbrown commented 3 years ago

@etspaceman 0.15.0 probably won't drop 2.12 (I'd only consider it if it turns out to make the macro situation in circe-generic and the literal modules much easier). Even if it does, that probably won't happen for a few months, so getting close to five years after 2.12.0 was released. The 0.15.0 release is also unlikely to add many significant new features or changes, apart from the error representation, and any bug fixes will be backported to 0.14.x.

etspaceman commented 3 years ago

I'm glad to hear you are keeping 2.12 around for 0.15.0 😄 .

We're just heavy users of Circe at our company as well as Spark/Flink, so being unable to upgrade Circe (and thus most of the Typelevel ecosystem) is a pretty big issue for us 😅 . We just got AWS support for 2.12 Flink, no more than 5 months ago.

javierarrieta commented 3 years ago

Sorry if this has been discussed elsewhere. What are the plans for generic-extras and Scala 3? We are starting to support Scala 3 in our projects but a core component is circe-generic-extras as we use snake case attribute names in json.

marko-asplund commented 3 years ago

Any news on Circe Scala 3 support?

travisbrown commented 3 years ago

@marko-asplund @javierarrieta There's currently work on supporting a subset of the configuration options provided by circe-generic-extras in #1800 by @Lasering. I'm hoping to publish an 0.15.0 milestone including those changes in the next week.

It's unlikely there will ever be a single 2 / 3 source-compatible version of circe-generic-extras unless someone contributes it or funds it.

javierarrieta commented 3 years ago

Hi @travisbrown thanks for the reference, I hadn't seen that PR, I will take a look to plan how to support that internally and if possible contribute how we are supporting it for 2/3 (maybe providing the source compatibility but cannot say I will because I need to figure that out)

AL333Z commented 3 years ago

Hi @travisbrown, any chance to have a v0.15.0-M2 with #1617 ? Would love to start using it :) Thanks