<?php
/**
 * Copyright (c) 2014, 2015, 2016, 2018 Eclipse Foundation.
 *
 * This program and the accompanying materials are made
 * available under the terms of the Eclipse Public License 2.0
 * which is available at https://www.eclipse.org/legal/epl-2.0/
 *
 * Contributors:
 *   Christopher Guindon (Eclipse Foundation) - Initial implementation
 *   Eric Poirier (Eclipse Foundation)
 *
 * SPDX-License-Identifier: EPL-2.0
 */
?>

<!-- Main content area -->
<div id="midcolumn">
    <h1>The Eclipse Jetty Project</h1>
    <p>Jetty provides a web server and servlet container, additionally providing support for HTTP/2, WebSocket,
        OSGi, JMX, JNDI, JAAS and many other integrations.
        These components are open source and are freely available for commercial use and distribution.</p>

    <p>Jetty is used in a wide variety of projects and products, both in development and production.
        Jetty has long been loved by developers due to its long history of being easily embedded in devices, tools,
        frameworks, application servers, and modern cloud services.</p>


    <table class="frame-none grid-all stretch">
        <colgroup>
            <col style="width: 50%;">
            <col style="width: 50%;">
        </colgroup>
        <thead>
        <tr>
            <th class="halign-center valign-top">Features</th>
            <th class="halign-center valign-top">Jetty Powered</th>
        </tr>
        </thead>
        <tbody>
        <tr>
            <td class="halign-left valign-top">
                <div class="content">
                    <div class="ulist">
                        <ul>
                            <li>
                                <p>Full-featured and standards-based</p>
                            </li>
                            <li>
                                <p>Open source and commercially usable</p>
                            </li>
                            <li>
                                <p>Flexible and extensible</p>
                            </li>
                            <li>
                                <p>Small footprint</p>
                            </li>
                            <li>
                                <p>Embeddable</p>
                            </li>
                            <li>
                                <p>Asynchronous</p>
                            </li>
                            <li>
                                <p>Enterprise scalable</p>
                            </li>
                            <li>
                                <p>Dual licensed under Apache and Eclipse</p>
                            </li>
                        </ul>
                    </div>
                </div>
            </td>
            <td class="halign-left valign-top">
                <div class="content">
                    <div class="ulist">
                        <ul>
                            <li>
                                <p>Large clusters, such as Facebook Presto</p>
                            </li>
                            <li>
                                <p>Cloud computing, such as Google AppEngine</p>
                            </li>
                            <li>
                                <p>SaaS, such as Yahoo! and Zimbra</p>
                            </li>
                            <li>
                                <p>Application Servers, such as Apache Geronimo</p>
                            </li>
                            <li>
                                <p>Frameworks, such as GWT</p>
                            </li>
                            <li>
                                <p>Tools, such as the Eclipse IDE</p>
                            </li>
                            <li>
                                <p>Devices, such as Android</p>
                            </li>
                            <li>
                                <p>More&#8230;&#8203;</p>
                            </li>
                        </ul>
                    </div>
                </div>
            </td>
        </tr>
        </tbody>
    </table>

    <br/>
    <br/>

    <p>With the direction of Java and the JakartaEE project (formerly JavaEE) in 2020, the current
        recommended version of Jetty for use depends upon the servlet api version, desired licensing, and package
        namespace as well as the intended Java version.</p>

    <br/>

    <table class="frame-none grid-all stretch">
        <colgroup>
            <col style="width: 25%;">
            <col style="width: 20%;">
            <col style="width: 35%;">
            <col style="width: 20%;">
        </colgroup>
        <thead>
        <tr>
            <th class="halign-left valign-top">Jetty Version</th>
            <th class="halign-left valign-top">Servlet</th>
            <th class="halign-left valign-top">License</th>
            <th class="halign-left valign-top">Java</th>
        </tr>
        </thead>
        <tbody>
        <tr>
            <td class="halign-left valign-top">
                <div class="content"><p>Jetty 9.4.x</p></div>
            </td>
            <td class="halign-left valign-top">
                <div class="content">3.1</div>
            </td>
            <td class="halign-left valign-top">
                <div class="content">JavaEE 8/javax.servlet.*</div>
            </td>
            <td class="halign-left valign-top">
                <div class="content">Java 8</div>
            </td>
        </tr>
        <tr>
            <td class="halign-left valign-top">
                <div class="content"><p>Jetty 10.0.x</p></div>
            </td>
            <td class="halign-left valign-top">
                <div class="content">4.0</div>
            </td>
            <td class="halign-left valign-top">
                <div class="content">JakartaEE 8/javax.servlet.*</div>
            </td>
            <td class="halign-left valign-top">
                <div class="content">Java 11+</div>
            </td>
        </tr>
        <tr>
            <td class="halign-left valign-top">
                <div class="content"><p>Jetty 11.0.x</p></div>
            </td>
            <td class="halign-left valign-top">
                <div class="content">5.0</div>
            </td>
            <td class="halign-left valign-top">
                <div class="content">JakartaEE 9/jakartaee.servlet.*&nbsp;&nbsp;&nbsp;</div>
            </td>
            <td class="halign-left valign-top">
                <div class="content">Java 11+</div>
            </td>
        </tr>
        </tbody>
    </table>

    <br/>

    <p>The Jetty project has been hosted at the Eclipse Foundation since 2009. See the
        <a href="/jetty/about.php">About</a> page for more information about the history of Jetty.</p>

    <p><b><i>You can benefit from committer knowledge and get training, consulting services, professional support and
                even production SLAs directly from the developers, <a href="/jetty/support.php"> just ask us about it!</a></i></b></p>
    <p></p>
    <p></p>
</div>
<!-- ./end  #midcolumn -->
