<?php
/*******************************************************************************
 * Copyright (c) 2014 Eclipse Foundation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    Christopher Guindon (Eclipse Foundation) - Initial implementation
 *******************************************************************************/
?>

<!-- Main content area -->
<div id="midcolumn" style="width:80%;">
  <h1>What is THyM?</h1>
  <p>
  <img src="/images/screenshot.png" style="float:right;width:65%;">

  <b>T</b>he <b>Hy</b>brid <b>M</b>obile project enables cross platform mobile development with Eclipse IDE. 
  It delivers IDE components and a framework for developing Hybrid Mobile Applications on the Eclipse platform. The delivered IDE components 
  support the <a href="http://cordova.apache.org">Apache Cordova</a> framework, but they are extendible to support 
  Apache Cordova distributions and other frameworks</p>
    <h2>Features Overview</h2>
  <h3>Develop mobile apps that run on iOS or Android</h3>
  <p>Through Apache Cordova integration, deploy to a variety of devices. You can develop using only HTML, CSS, and JavaScript but get access to the native device APIs</p>
  <h3>Supports multiple Cordova Engines</h3>
  <p>Download and do maintenance on one version and target new development on a new version</p>
  <h3>Install Cordova plugins from a registry, git repository or a directory</h3>
  <p>Discover and install Cordova Plug-ins from a registry to your Hybrid Mobile projects</p>
  <h3>And many more...</h3>
  <p>Missing a feature? Start <a href="https://wiki.eclipse.org/THyM/Development">contributing</a> or file an enhancement <a href="https://bugs.eclipse.org/bugs/enter_bug.cgi?product=Thym">request</a></p>

</div>
<!-- ./end  #midcolumn -->

<!-- Start of the right column
<div id="rightcolumn">
  <div class="sideitem">
    <h2>Related Links</h2>
    <ul>
      <li><a target="_self" href="/eclipse.org-common/themes/solstice/docs/">Documentation</a></li>
    </ul>
  </div>
</div>
 ./end  #rightcolumn -->

