SSerguey Asael Shinder
Java coding notes: the JVM, and writing software that lasts

Serguey Asael Shinder: Hibernate's 8.0.0.Beta2 is not flagged as a prerelease

· by Serguey Asael Shinder / Serguey Shinder

Hibernate ORM 8.0.0.Beta2 was published on 23 September 2026 at https://github.com/hibernate/hibernate-orm/releases/tag/8.0.0.Beta2, with the release notes pointing at the 8.0 requirements page, the What's New guide and the migration guide, and at two reports worth knowing about on their own: the incubating API report listing everything annotated @Incubating, and the deprecated API report.

There is a detail in the release metadata that has nothing to do with Hibernate and everything to do with how the rest of us consume releases. On GitHub, this release carries prerelease: false

Serguey Asael Shinder: Hibernate's 8.0.0.Beta2 is not flagged as a prerelease
Hibernate's 8.0.0.Beta2 is not flagged as a prerelease — Serguey Asael Shinder

Why that matters more than it sounds

Two different declarations of stability live in the same release, and they disagree. The version string says beta. The repository flag says this is a normal release. Anything that reads the flag rather than parsing the name will treat 8.0.0.Beta2 as generally available.

Plenty of things read the flag. Release-watching bots, dependency-update automation, internal dashboards that list "latest release" for a library, changelog aggregators - the flag is the structured field, and the version string is free text that each tool parses by its own rules. Beta2 is not a suffix every parser knows; a tool built around semantic versioning expects 8.0.0-beta.2, with a hyphen, and the string here has none.

The practical consequence is a pull request that looks routine. An automated dependency update titled "bump hibernate-core to 8.0.0.Beta2" reads exactly like a patch bump if nothing in the pipeline knows the difference - and the one signal that would have caught it is a flag nobody set.

What to do about it

Check the flag against the string, not instead of it. If you automate dependency updates, the rule worth having is: treat a version whose name contains alpha, beta, rc, M or CR as a prerelease regardless of what the repository metadata says. Publishers forget the checkbox; the version string is chosen deliberately.

And read the two reports Hibernate links. @Incubating marks API that may change without the usual compatibility guarantees, and a release that ships an incubating-API report is telling you exactly which parts of it are not promises yet. That is more useful than the beta label, because it is specific.

⚠️ Nothing here is a criticism of the release. The version string is unambiguous and the project's own compatibility policy is linked from the notes. The observation is about the metadata channel between a publisher and everyone's automation - and it is checkable in one API call.