Future Releases of Velocity Will Require Java 11 or Higher

On the heels of Paper moving to Java 11 as the minimum supported version of Java, I am going to announce that Velocity will also be making the same move. This was something that we had consensus on a long time ago but there was no impetus to announce it until Paper announced their move.

Just to be clear, the current Velocity 1.1.x series will continue to support Java 8 as the minimum version. Nothing will change for most users today. However, starting with Velocity 2.0.0 (and potentially a 1.2.0 should we decide to release it) will require Java 11 as the minimum.

Why are you doing this?

I’m going to quote the Paper project’s explanation here, as it sums it up better than I can:

We don’t want to find ourselves stuck with legacy software or systems. Java has a consistent update cadence now that we can take advantage of. Newer versions of the JVM are always backwards compatible with older code and almost always have performance improvements over older versions. Newer version of Java also have language and JDK advancements that we’d like to be able to use as well.

In addition, we have several reasons to make this move:

  • We implement optimizations around packet compression that only work on Java 11 or above for platforms where we don’t provide highly efficient libdeflate-based compression (notably, Windows and macOS).
  • We want to have the opportunity to enforce a stricter separation between plugins and the proxy, and Project Jigsaw provides a great answer, but we have to move to Java 9 or higher to use it.
  • Finally, there are many productivity-oriented features that will make it easier for us to add new features to Velocity.

What Java version does the Velocity team recommend?

Either the latest or an LTS release.

What should I do now?

Start upgrading to Java 11 or later as soon as possible.

How about my plugins?

Java has very strong backwards compatibility guarantees. Unless your plugins are doing something bad, they won’t be affected.