JDK 28 Early-Access Release Notes

Latest Update: 2026-06-26
This is a draft of the release notes that will accompany OpenJDK JDK 28. The contents are subject to change until release.

Build 3

Capture Named Group information in TLSHandshakeEvent (JDK-8301626)

security-libs/javax.net.ssl

The jdk.TLSHandshakeEvent JFR event now records the named group that is negotiated in a TLS handshake. A new field named namedGroup has been added to the event.

Build 2

ListFormat Single Quote Handling Fixed (JDK-8386200)

core-libs/java.text

The JDK reference implementation for java.text.ListFormat is no longer affected by java.text.MessageFormat single quote escaping semantics. For example, previously, a list pattern such as " '{0}', {1} " may have incorrectly formatted List.of("bar", "foo") as: " {0}, bar ". ListFormat is now updated to always treat single quotes as literal characters when read from a pattern.

This change is observable for ListFormat patterns that contain single quotes. As a result, it primarily affects application-supplied custom patterns that contain them.

Custom ListFormat Patterns Are Validated More Strictly (JDK-8385834)

core-libs/java.text

java.text.ListFormat.getInstance(String[]) now validates custom list format patterns more strictly. Only the exact placeholders "{0}", "{1}", and "{2}" are accepted, and "{2}" is accepted only in the three-element pattern. Patterns with duplicate placeholders or curly braces outside valid placeholders now cause an IllegalArgumentException to be thrown.

This change affects only application-supplied custom patterns passed to ListFormat.getInstance(String[]). Locale-derived ListFormat instances are not affected.