Regarding:> We also plan to sunset the 3.x line in the near future, and strongly encourage users to upgrade to the 4.x series.
My expectation as a community is that we will need to maintain 3.x support indefinitely.
The API breakages are substantial enough that the amount of effort required to retrofit and qualify large applications on the 4.x series would be a huge effort for the project to externalize upon its users.
It is reasonable to expect new adopters to begin projects with the 4.x driver series, but I know that I personally cannot reasonably push all applications using the 3.x series to migrate absent a transparent API shim or similar.
- Scott there's no substantive disagreement with the plan Jane outlined for 4.x? I think there's some general interest in starting to work on a 5.0.0 release so if nobody objects we'll probably start down that path.
Yeah, great call out. I don't want to derail us or lose that other important context; I think the 4.x and 5.0.0 release work outlined is all really solid + moving JDK forward (could even push to 21 at this point), and it doesn't sound like that stuff is controversial.
How long would we continue to maintain such a shim for the 3.x API against current drivers? Is there some condition where we would agree that it would be no longer necessary or are we saying we'll maintain such a thing indefinitely?
Hm. Good question. My gut reaction is "indefinitely unless and until we formalize a deprecation plan for client APIs which we could then retroactively apply here". And I don't like indefinitely, so we should have a plan. :)
I think it'd be valuable to have a life cycle expectation for both major driver release branches and APIs separately. We've conflated version with API in the past and that's part of how we got to where we are. For example, if we had: - Major driver release branches will be supported for 3 years (CVEs, bugfixes on case-by-case basis)
- We release a major driver version yearly, dropping the oldest yearly
- New features will to into the new driver release version only
- We reserve the right to rev the driver API yearly along with major driver releases and reserve the right to make breaking changes (though we'll try not to)
That'd leave us with something like: - 3.x driver w/3.x API
- 4.x driver w/4.x API (gap: should still support 3.x API)
- 5.x driver w/5.x API (would need to support 3.x and 4.x API)
- 6.x driver w/6.x API (supports 5.x and 4.x; 3.x API is formally dropped here)
So effectively an application would get 3 years of binary support and 5 years of API support (since we'd forward-carry that API compatibility 2 versions past where introduced, i.e. 3.x API introduced with 3.0 and dies when 5.0 goes EoL).
Just a naive first cut at it. Might not make sense, we might not have enough contributors active on it or active interest to get 3.x API compatibility working on the 4.x line or 5.x line, etc. But generally speaking, having some kind of predictable cadence for how long something will be supported (both binaries w/security and bugfixes and APIs) would be valuable for the projects I think.
On Tue, Jun 30, 2026, at 9:52 PM, Bret McGuire wrote: I generally want to hear from the community on the points raised by Josh so this message isn't intended to argue for or against any of his points (I'll save that for later ;) ). I do have some additional bits of information that might not be widely known which could provide some additional guidance to the debate... so I'm aiming to provide that here.
Let's start with the current state of the 3.x branch. It's very much already in the condition Josh described (and has been for a bit). We're not adding new features to 3.x; when we added vector support to 4.x we explicitly did _not_ add it to 3.x. We're also really only doing security updates and other absolutely necessary fixes. So that is the current state of the world now.
Second: it seems to me like most of the conversation so far is focused on what to do with the 3.x line of Java driver releases. Am I correct in saying, then, that there's no substantive disagreement with the plan Jane outlined for 4.x? I think there's some general interest in starting to work on a 5.0.0 release so if nobody objects we'll probably start down that path.
As to Ekaterina's question about how many users are on 3.x: we recently put a poll [1] in the field asking Java driver users what they were doing with the driver. We were primarily concerned with the version of Java our users were using the driver with (since that very much informs what we do with 5.0) but we did also ask what version of the driver folks were using. We only got a little over 20 responses so there's something of a small sample size here but of those responses 4 indicated that they were using some 3.x version. That's 4 out of 23 which is... approximately 17% (if my math can be trusted). Very much a minority but not zero either.
Finally, a question on the scope of the shim idea... I guess this one prolly is mostly for Josh. How long would we continue to maintain such a shim for the 3.x API against current drivers? Is there some condition where we would agree that it would be no longer necessary or are we saying we'll maintain such a thing indefinitely? Again, I'm not arguing for or against here... just trying to continue to refine the discussion.
Interested to hear the opinions of others!
- Bret -
we should balance how much we can do with the amount of people involved on the project.
100%.
I could definitely see a world where we took a minimal path for now and did some kind of long-term EoL for the 3.x line with CVE fixes only but otherwise the release line is frozen. Naively that seems like it shouldn't be too big a maintenance burden for folks who predominantly want to focus on 4.x+ and 5.x+. So that means no bugfix backporting (unless maybe we discussed data loss / correctness bugs as being the one exception (assuming they're as infrequent or less than CVEs)), no feature backporting, etc.
Then if someone really wants to keep their 3.x client applications they have at least a security compliant release they can work with. If we wanted to kill that branch line entirely, my argument here is that the price of entry would be some kind of 3.x API compatible solution for 4.x or 5.x. Either a native impl of that older API, a shim project that translated A to B, or some other idea someone else can come up with.
My big reservation with the idea of polling people is why we'd believe we can get a representative sample of the entire C* community. Given we're open source and so widely used I don't really know how we could do that.
So a question for the thread / community: are we in agreement on carrying forward 3.x API compatibility into the future? We don't have to hold that same standard in our driver ecosystem that we do in core C*. I think the burden of justification will be on us as to why we want to diverge from that posture on the core DB since the same pressures should hold for the ecosystem APIs as for the core DB, but there's different context here (API surface area, burden of maintenance, # of maintainers, etc).
On Sat, Jun 27, 2026, at 11:04 AM, Ekaterina Dimitrova wrote: “ It'd probably be helpful to at least gather data on the side of this coupling where we can to help ground the discussion in data instead of trauma and vibes. :) ”
Maybe we can create a poll how many people are still on 3? Same as it was done with Java usage, same as sometimes we ask about Cassandra versions? Also, ask what are their migrations plans are.
That would also raise awareness and users can join even this discussion or someone can decide to help work on the migration path?
But also, we should balance how much we can do with the amount of people involved on the project. Thank you all for this valuable discussion. I learned a thing or two about the drivers’ history.
Best regards, Ekaterina
it turned out to be a lot more complicated than it looks on first blush.
The story of our lives. :)
the first release from the 4.x line was in... spring of 2019 I believe. It's now summer of 2026. I'd argue that's _more_ than enough time for upgrades to have happened
I'm of two minds on this. From an application revision perspective: 100% agree. From a infrastructure software perspective, I think most people would prefer it if infra worked on day 1 and then literally never changed. We don't really have any way of knowing how many applications are out there on the 3.x line still relying on that API; unless we collectively believe the API in 4.x was so compelling the vast majority of users would have elected to proactively migrate (which... I don't have that impression but it's not grounded in data - I'm receptive to other perspectives here), people are having to triage a horizontal upgrade to move to a newer API w/out delivering business value vs. other features that do. So I would strongly suspect there's a lot more people still actively depending on 3.x than we'd like.
a shim like what you're describing is explicitly saying that we want the 3.x _API_ to stick around. There's no active development on the 3.x line. There are no new features going into that line (the only changes it sees are security updates). I don't want to support the 3.x API indefinitely; the reality is we've moved on.
I don't think it explicitly communicates we want the API to stick around any more than, say, continuing to support thrift with security updates but a frozen API would communicate a positive desire for thrift to still be in use. I think it's more an acknowledgement that there's a strong disconnect between what we know as developers in an ecosystem and the consumers and dependents upon the APIs we draft. This is part of why we landed on the "Consider all APIs to live forever and never be removed" perspective with core C*. I think the perfect example of the shape of user I'm thinking of is someone who has an application that's 5 years old, built on the 3.x line, has had no augmentation or feature addition in 5 years (if it ain't broke...), and have zero incentive to refactor an application to use a new API that for their purposes is feature-neutral to their old use-case. Moving to a new version is strictly a net negative for people like that as that change will introduce instability and bugs.
I think the argument I'm making here (and I don't like it) is that, on balance, we should consider the 3.x API something we have to support indefinitely. At least when it comes to security updates - certainly not back-porting new functionality or anything. I'm 100% with you that anyone working on any new application should use the latest stable API, but we're an old project with a lot (and I mean a lot) of legacy use-cases. So that would mean that, if the 4.x driver itself doesn't have 3.x API support, we'd need to add that there before EOL'ing the 3.x line.
Which really is a shim by any other name; if we implement 3.x API support in the 4.x line and on it's really just that.
I dunno. I'm very curious / hopeful to hear other perspectives that aren't my conclusion (please ;) ), but my personal experience in the last decade on this project is that retiring APIs that require application side changes is a recipe for disaster.
Has anybody taken a day or two to get a handle on how much of a lift it'd be to add a 3.x API compatibility layer to the 4.x driver? It'd probably be helpful to at least gather data on the side of this coupling where we can to help ground the discussion in data instead of trauma and vibes. :)
On Fri, Jun 26, 2026, at 4:27 PM, Bret McGuire wrote: I think there was a pretty decent argument for something along the lines of what you're describing Josh, but I guess I'd argue the argument was strongest when the first release of the 4.x line came out. In fact I believe there _was_ some work done on something like what you're describing but (if I'm remembering correctly) it never saw the light of day, in no small measure because it turned out to be a lot more complicated than it looks on first blush. I can think of a couple different areas where that would be fairly problematic but I'll defer to some of the folks who were more involved in that effort if they have more details and/or clarification on that point.
Either way, the first release from the 4.x line was in... spring of 2019 I believe. It's now summer of 2026. I'd argue that's _more_ than enough time for upgrades to have happened. I'm struggling to think of other libraries which would go to these lengths to keep older APIs around for so long after new development has moved on. And that's really what we're talking about here; a shim like what you're describing is explicitly saying that we want the 3.x _API_ to stick around. There's no active development on the 3.x line. There are no new features going into that line (the only changes it sees are security updates). I don't want to support the 3.x API indefinitely; the reality is we've moved on.
The parallel with six is interesting. I've gone back and forth on this point but there's certainly an argument that a shim layer for a _programming language_ is probably more necessary than one for a library API, but like I say I haven't thought that one through enough to say for sure.
Speaking only for myself I'm not opposed to _the idea_ of a shim at all; if somebody wants to put in the work it's something we can talk about. I just don't want the Java driver team to be responsible for creating (and maintaining) such a shim indefinitely. For me a solid parallel is what we're doing with the Python driver; we've deprecated (and will be removing) three of the less-used executors but we're not suggesting they can't be forked and maintained by somebody else. We're just saying we have limited resources and we can't maintain everything indefinitely. I hear you about past experience with breaking updates (and no clear update path) but DataStax also went to great lengths to try and remove as little as possible between versions... and I guess I'd argue that hamstrung development somewhat.
To that point (and indirectly related to the topic at hand): part of _my_ rationale for wanting to go to a 5.x is to get us back in the habit of regarding major version bumps as a normal part of software development. 4.x was _so_ disruptive that we got a bit nervous about considering another major bump even when it made sense. I'd rather move us towards a more familiar model of software development: major version bumps are a fact of life, use them when they're appropriate but also do your best not to change the world when you do. No one (and I mean _no one_) is interested in repeating the experience of the 4.x conversion. But we can't be afraid to do a major version bump when it makes sense.
Okay, that's enough from me, somebody else should talk now. :)
- Bret -
Unlike the transition from 3.x to 4.x, this release will not introduce significant API breakage.
We also plan to sunset the 3.x line in the near future, and strongly encourage users to upgrade to the 4.x series.
I remember talking with Adam Holmberg and some other driver devs back in the day about the possibility of an API shim bridging the 3.x and 4.x line. Something similar to how the python community ended up introducing six to try and bridge their pretty painful gap in their extensive API breakages between those majors. I think we should revisit that idea now that we have some tooling that could make the process of designing and implementing a "nuts and bolts plumbing" bridge layer like that much lower effort.
We have a long history on this project ecosystem (not drivers; cassandra :) ) of introducing API breakages without a paved-path for app devs and operators to transition the pre -> post world; avoiding the community fracture and long-term forks that arise from this would be very much worth the effort IMO.
On Thu, Jun 25, 2026, at 5:07 PM, Jane H wrote: Hi all,
We’re pleased to share the release plan for the Apache Cassandra Java Driver.
The next release will be a major version, 5.0. Unlike the transition from 3.x to 4.x, this release will not introduce significant API breakage. However, we do plan to drop support for Java 8 and Java 11, making Java 17 the minimum supported version.
Our rationale is as follows: - End-of-life status. Both Java 8 and Java 11 have reached end of life (Oracle Premier Support)—Java 8 in March 2022 and Java 11 in September 2023.
- User adoption trends. Based on our recent Java Driver user survey (22 responses):
In addition, the next 3.x release will be 3.13.0, which will support JDK 8+ (instead of JDK 6). We also plan to sunset the 3.x line in the near future, and strongly encourage users to upgrade to the 4.x series.
Cheers, The Apache Cassandra Java Driver Developers
|