<?php
/**
 * Copyright (c) 2014, 2018 Eclipse Foundation and others.
 *
 * 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:
 *    Denis Roy (Eclipse Foundation) - initial API and implementation
 *    Christopher Guindon (Eclipse Foundation)
 *
 * SPDX-License-Identifier: EPL-2.0
 */
?>

<h2>Current releases</h2>
<ul class="fa-ul">
  <li><a href="http://help.eclipse.org/2019-09/index.jsp"><i class="fa fa-globe"></i> Eclipse IDE 2019-09 (4.13) Documentation</a> (HTML Help Center)</li>
</ul>
<h2>Older releases</h2>
<ul class="fa-ul">
  <li><a href="http://help.eclipse.org/2019-06/index.jsp"><i class="fa fa-globe"></i> Eclipse IDE 2019-06 (4.12) Documentation</a> (HTML Help Center)</li>
  <li><a href="http://help.eclipse.org/2019-03/index.jsp"><i class="fa fa-globe"></i> Eclipse IDE 2019-03 (4.11) Documentation</a> (HTML Help Center)</li>
  <li><a href="http://help.eclipse.org/2018-12/index.jsp"><i class="fa fa-globe"></i> Eclipse IDE 2018-12 (4.10) Documentation</a> (HTML Help Center)</li>
  <li><a href="http://help.eclipse.org/2018-09/index.jsp"><i class="fa fa-globe"></i> Eclipse IDE 2018-09 (4.9) Documentation</a> (HTML Help Center)</li>
  <li><a href="http://help.eclipse.org/photon/index.jsp"><i class="fa fa-globe"></i> Eclipse Photon (4.8) Documentation</a> (HTML Help Center)</li>
</ul>

For even older releases (Oxygen, Neon, Mars, etc), please download the corresponding Eclipse SDK or any EPP package and start the Information center locally as described here:
<ul class="fa-ul">
  <li><a href="https://help.eclipse.org/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Fguide%2Fua_help_setup_infocenter.htm">How to start or stop information center from command line</a></li>
</ul>


