# Eclipse GlassFish Downloads

## Eclipse GlasFish 6.1 RC1

Release Candidate build of Eclipse GlassFish is available for trial usage. This release will be certified compatible with
Jakarta EE 9.1. This release supports JDK 11.
You can find more details about the Platform changes at [Jakarta EE Platform 9.1](https://jakarta.ee/specifications/platform/9.1/) and [9.1 Platform Web Profile 9.1](https://jakarta.ee/specifications/webprofile/9.1/). Other than bug-fixes, the major change is support for JDK 11.
Anyone wishing to experiement and provide feedback
on this new release is encouraged to give it a try and let us know what your experience is.
If you encounter any problems, please let us know by e-mailing us on the [GlassFish Developer e-mail list](mailto:glassfish-dev@eclipse.org), or you may file an issue on the [Eclipse GlassFish issue tracker](https://github.com/eclipse-ee4j/glassfish/issues). 
Your feedback is very important and a crucial element of our release process.
We hope to hear from you!

* [Eclipse GlassFish 6.1](https://download.eclipse.org/ee4j/glassfish/glassfish-6.1.0-RC1.zip) -- compatible with forthcoming Jakarta EE 9.1 Platform
* [Eclispe GlassFish 6.1 Web Profile]((https://download.eclipse.org/ee4j/glassfish/web-6.1.0-RC1.zip) -- compatible with forthcoming Jakarta EE 9.1 Platform, Web Profile

## Eclipse GlassFish 6

The latest stable release for Eclipse GlassFish 6.0. It is functionally complete and meets the compatibility requirements of the approved final version of the Jakarta EE 9 Specification. Downloads are provided for both Jakarta EE Platform 9 and Jakarta EE Web Profile 9.
For more details on Jakarta EE 9, please see the [Jakarte EE Platform Specification Project](https://eclipse-ee4j.github.io/jakartaee-platform/). 

NOTE: Users upgrading from Jakarta EE 8 to Jakarta EE 9 may want to review the Spec. changes describing how to upgrade an EE 8 application to EE 9 (for example, you might start by watching [this video](https://youtu.be/3ClvncBrKJw?t=405)).

* [Eclipse GlassFish 6.0.0, Jakarta EE Platform, 9](https://download.eclipse.org/ee4j/glassfish/glassfish-6.0.0.zip), - [info](https://download.eclipse.org/ee4j/glassfish/glassfish-6.0.0.info)
* [Eclipse Glassfish 6.0.0, Jakarta EE Web Profile, 9](https://download.eclipse.org/ee4j/glassfish/web-6.0.0.zip), - [info](https://download.eclipse.org/ee4j/glassfish/web-6.0.0.info)

We welcome your feedback! Please include the details provided in the **info** link when reporting any [issues](https://github.com/eclipse-ee4j/glassfish/issues).


## Eclipse GlassFish 5.1 Downloads

The latest stable releases of Eclipse GlassFish 5.1. This version is compatible with Jakarta EE 8 Specification.

* [Eclipse GlassFish 5.1.0 - Jakarta EE Platform, 8](https://www.eclipse.org/downloads/download.php?file=/glassfish/glassfish-5.1.0.zip)
* [Eclipse GlassFish 5.1.0 - Jakarta EE Web Profile, 8](https://www.eclipse.org/downloads/download.php?file=/glassfish/web-5.1.0.zip)

----

# Legacy

The downloads below are for legacy use only. Most users will want to use the stable releases listed above.

### Eclipse GlassFish 6, Release Candidate 2

This is the first release candidate for GlassFish 6.0 and is functionally complete and has passed an in-progress version of the Jakarta EE 9 TCK for both Web Profile and Full Profile.
For more details on Jakarta EE 9, please see the [Jakarte EE Platform Specification Project](https://eclipse-ee4j.github.io/jakartaee-platform/). We welcome your feedback! Please include the details provided in the **info** link when reporting any [issues](https://github.com/eclipse-ee4j/glassfish/issues).

* [Eclipse GlassFish 6.0.0-RC2, Jakarta EE Platform 9](https://download.eclipse.org/ee4j/glassfish/glassfish-6.0.0-RC2.zip), - [info](https://download.eclipse.org/ee4j/glassfish/glassfish-6.0.0-RC2.info)
* [Eclipse Glassfish Web Profile 6.0.0-RC2 Jakarta EE Web Profile 9](https://download.eclipse.org/ee4j/glassfish/web-6.0.0-RC2.zip), - [info](https://download.eclipse.org/ee4j/glassfish/web-6.0.0-RC2.info)


### Eclipse GlassFish 6, Release Candidate 1

This is the first release candidate for GlassFish 6.0 and is functionally complete and has passed an in-progress version of the Jakarta EE 9 TCK for both Web Profile and Full Profile.
For more details on Jakarta EE 9, please see the [Jakarte EE Platform Specification Project](https://eclipse-ee4j.github.io/jakartaee-platform/). We welcome your feedback! Please include the details provided in the **info** link when reporting any [issues](https://github.com/eclipse-ee4j/glassfish/issues).

* [Eclipse GlassFish 6.0.0-RC1, Jakarta EE Platform 9](https://download.eclipse.org/ee4j/glassfish/glassfish-6.0.0-RC1.zip), - [info](https://download.eclipse.org/ee4j/glassfish/glassfish-6.0.0-RC1.info)
* [Eclipse Glassfish Web Profile 6.0.0-RC1, Jakarta EE Web Profile 9](https://download.eclipse.org/ee4j/glassfish/web-6.0.0-RC1.zip), - [info](https://download.eclipse.org/ee4j/glassfish/web-6.0.0-RC1.info)

### Eclipse GlassFish 6, Prerelease, milestone

This is a pre-release to allow users, vendors, and all community members a glimpse into the changes forthcoming with Jakarta EE 9. This is not a stable release and is intended to allow users to begin evaluation of the proposed name-space and pruning changes included in this new EE 9 specification release. For more details on Jakarta EE 9, please see the [Jakarte EE Platform Specification Project](https://eclipse-ee4j.github.io/jakartaee-platform/). We welcome your feedback! Please include the details provided in the **info** link when reporting any [issues](https://github.com/eclipse-ee4j/glassfish/issues).

* [Eclipse GlassFish 6.0.0-M1, Jakarta EE Platform 9](http://download.eclipse.org/ee4j/glassfish/glassfish-6.0.0-M1.zip), - [info](http://download.eclipse.org/ee4j/glassfish/glassfish-6.0.0-M1.info)
* [Eclipse Glassfish Web Profile 6.0.0-M1, Jakarta EE Web Profile 9](http://download.eclipse.org/ee4j/glassfish/web-6.0.0-M1.zip), - [info](http://download.eclipse.org/ee4j/glassfish/web-6.0.0-M1.info)

----

## Looking for Java EE 8?

Java EE has been contributed to the Eclipse Foundation.
The Jakarta EE community is responsible for all evolution of the
project formerly known as Java EE.
If you are looking for details of the archived Java EE GlassFish project, you are welcome to
[browse here](https://javaee.github.io/glassfish). 
