Latest Stable
11.0.0
Released 29 May 2025
(1 year ago)
Software
Jakarta EE Platform
IntroductionJakarta EE is an open-source, Java-based framework designed for developing scalable, enterprise-level applications. It offers a collection of specifications for building cloud-native solutions, microservices, and web services, ensuring portability, flexibility, and ease of integration across diverse platforms.
DeveloperEclipse Foundation
Written inJava
Repositoryhttps://github.com/jakartaee/platform
Websitehttps://jakarta.ee
Security policyhttps://www.eclipse.org/security/policy
LicenseEclipse Public License 2.0
LATEST RELEASES:
11.0.0 29 May 2025 (1 year ago)
11.0.0-RC1 28 Feb 2025 (1 year ago)
11.0.0-M5 18 Feb 2025 (1 year ago)
11.0.0-M4 12 Jun 2024 (1 year ago)
11.0.0-M3 30 Apr 2024 (2 years ago)

All Releases

VersionSupported
Java versions
Initial releaseLatest releaseNamespace
11Java SE 17+11.0.0
29 May 2025
(1 year ago)
11.0.0
29 May 2025
(1 year ago)
jakarta.*
10Java SE 11+10.0.0
09 Aug 2022
(3 years ago)
10.0.0
09 Aug 2022
(3 years ago)
jakarta.*
9.1Java SE 8+9.1.0
27 Apr 2021
(5 years ago)
9.1.0
27 Apr 2021
(5 years ago)
jakarta.*
9Java SE 8+9.0.0
06 Nov 2020
(5 years ago)
9.0.0
06 Nov 2020
(5 years ago)
jakarta.*
8Java SE 8+8.0.0
03 Sep 2019
(6 years ago)
8.0.0
03 Sep 2019
(6 years ago)
javax.*

How Does Jakarta EE Handle Version Support?

Jakarta EE does not define end-of-life dates for its specification versions. Unlike runtimes such as Node.js or Python, Jakarta EE is a set of specifications maintained by the Eclipse Foundation -- and the specification itself never officially "expires." What expires is the support from the application server vendors who implement it.

Once the Jakarta EE Working Group releases a new major version, the previous specification receives no further updates. It is not deprecated with a formal EOL date; it simply stops evolving. Whether you can keep running it in production depends entirely on how long your chosen implementation -- GlassFish, WildFly, Payara, TomEE, WebLogic, JBoss EAP, or others -- continues to ship security patches for that version.

The table below reflects the general status pattern across Jakarta EE major versions:

Version Series Specification Status Implementation Support
Java EE 8 / Jakarta EE 8 Superseded -- no further updates Vendor-dependent; some vendors still ship patches
Jakarta EE 9 / 9.1 Superseded -- namespace migration release only Transitional; most vendors moved past this quickly
Jakarta EE 10 Superseded -- stable, widely adopted Broad vendor support; production-ready for most teams
Jakarta EE 11 Current -- active development Latest; aligned with Java 21 LTS features

The release cadence follows Java LTS releases roughly every two years. This means each major Jakarta EE version targets a specific Java SE baseline, and upgrading usually requires upgrading your JDK alongside your application server.

References: Jakarta EE Specifications -- Eclipse Foundation | Jakarta EE Specification Process (JESP)

What Are the Real Risks of Running an Older Jakarta EE Version?

The most immediate risk is not a missing security patch in the spec itself -- it is the cascade of incompatibilities that builds up as the rest of the ecosystem moves on. Jakarta EE applications do not run in isolation; they depend on the intersection of your spec version, your app server, your JDK, and your third-party libraries.

Namespace lock-in (javax.* vs jakarta.*)

Jakarta EE 9 introduced a hard namespace break. Code written for Java EE 8 or Jakarta EE 8 uses the javax.* package namespace. Everything from Jakarta EE 9 onwards uses jakarta.*. Libraries, frameworks (Spring, Hibernate, Quarkus), and tooling have progressively dropped javax.* support. If you stay on Jakarta EE 8, you are increasingly cut off from current library versions.

App server vendor dropping your version

The specification itself is frozen -- but your runtime is not. Vendors like Red Hat (JBoss EAP), Payara, IBM (Open Liberty), and Oracle (WebLogic) each publish their own support timelines. Once a vendor drops a Jakarta EE version, you stop receiving CVE patches for the server, even if your application code is untouched. Check the lifecycle page of your specific app server, not just the Jakarta EE spec page.

Missing specifications your dependencies now require

Each Jakarta EE major version adds and updates component specs -- CDI, JPA, Servlet, Jakarta Data, Jakarta Concurrency. If a library you use requires CDI 4.x or Jakarta Data 1.0, those are only available in the current Jakarta EE version, as shown in the release table above. Staying on an older profile version forces you to vendor-patch or shadow these APIs, which is fragile at best.

What Actually Happens When a Newer Jakarta EE Version Supersedes Yours?

Nothing dramatic happens on day one. Your application keeps running, your app server keeps booting. The specification does not have a kill switch. What changes is slower and more cumulative -- and that is exactly what makes it easy to ignore until it becomes a migration crisis.

First, the specification project stops accepting changes. Bug reports against the old version are closed or redirected to the current one. If a flaw exists in how a spec was written, it will not be fixed retroactively.

Second, your application server vendor starts its own countdown. Vendors typically announce a support window when a new Jakarta EE version ships. JBoss EAP, Payara Platform, and Open Liberty all have published lifecycle pages that map which Jakarta EE version each product release supports and for how long. Once your app server version hits end-of-vendor-support, you lose access to security patches regardless of the spec status.

Third, the broader Java ecosystem stops testing against your version. CI pipelines in popular projects drop older Jakarta EE compatibility test profiles. Hibernate, Weld, and other spec implementations prioritize the current spec. In practice, you end up inheriting bugs that were fixed upstream but never backported.

Most teams running a superseded Jakarta EE version are not blocked immediately -- they are paying an accumulating tax of workarounds, pinned dependency versions, and skipped upgrades that eventually forces a larger migration than an incremental one would have required.

How Do You Check Which Jakarta EE Version Your Application Is Targeting?

There are three places to look: your build descriptor, your runtime, and your application server.

Check your Maven pom.xml

The Jakarta EE API dependency in your pom.xml is the authoritative source for which spec version your application is compiled against:

<!-- Jakarta EE 10 full platform -->
<dependency>
  <groupId>jakarta.platform</groupId>
  <artifactId>jakarta.jakartaee-api</artifactId>
  <version>10.0.0</version>
  <scope>provided</scope>
</dependency>

<!-- Or for Jakarta EE 11 -->
<dependency>
  <groupId>jakarta.platform</groupId>
  <artifactId>jakarta.jakartaee-api</artifactId>
  <version>11.0.0</version>
  <scope>provided</scope>
</dependency>

Check at runtime via the Servlet API

You can query the Servlet spec version at runtime, which reflects the Jakarta EE version your app server implements:

// Inside a Servlet or CDI bean
int major = servletContext.getMajorVersion();
int minor = servletContext.getMinorVersion();
System.out.println("Servlet " + major + "." + minor);
// Servlet 6.0 = Jakarta EE 10
// Servlet 6.1 = Jakarta EE 11

Check your application server version

Each application server maps its version to a Jakarta EE spec version. For GlassFish:

asadmin version

For WildFly:

$WILDFLY_HOME/bin/standalone.sh --version

Then cross-reference the server version against the vendor's compatibility matrix -- GlassFish 7.x implements Jakarta EE 10, GlassFish 8.x targets Jakarta EE 11, as shown in the release table above.

FAQ

Q1: Is Jakarta EE the same as Java EE?
Jakarta EE is the direct successor to Java EE. Oracle transferred Java EE to the Eclipse Foundation in 2017, and the platform was renamed Jakarta EE. The core architecture and most APIs are the same, but starting from Jakarta EE 9, the package namespace changed from javax.* to jakarta.*. Code written for Java EE 8 is binary-compatible with Jakarta EE 8 but requires source-level changes to run on Jakarta EE 9 and above.

Q2: Does Jakarta EE have LTS versions?
No. Jakarta EE does not designate Long-Term Support versions at the specification level. The concept of LTS applies to the implementations, not the spec itself. If you need LTS-style support, choose an application server that offers it -- Payara Enterprise, IBM Open Liberty, and Red Hat JBoss EAP all publish multi-year support windows for specific Jakarta EE-compatible releases.

Q3: Is an older Jakarta EE version still supported?
The specification is frozen but not officially retired -- it simply receives no further updates. Whether your deployment is "supported" depends on your application server vendor's policy. Check your specific server's lifecycle page: the spec being old does not mean your runtime is still receiving CVE patches. As shown in the release table above, older versions are superseded, meaning only the current version sees active development.

Q4: Is Jakarta EE backward compatible across major versions?
Partially. Within the jakarta.* namespace (Jakarta EE 9 and later), the working group strives for API-level compatibility -- existing code that compiled against an older version should mostly work against the newer one. However, each major release removes deprecated APIs and adjusts component spec versions, so full compatibility is not guaranteed. The javax.* to jakarta.* namespace change between Jakarta EE 8 and 9 is a hard break and requires a source migration -- it is not backward compatible at the binary level.

Q5: Which Jakarta EE version should I use for a new project?
Use the latest version, as shown in the release table above. It targets a current Java LTS release, includes the newest specs (including Jakarta Data for simplified data access and Virtual Threads support via Jakarta Concurrency), and will have the longest runway before it is superseded. If your team is locked to an older JDK, check which Jakarta EE version aligns with that JDK baseline -- each major version has a minimum Java SE requirement that you cannot work around at the runtime level.