---
license: Licensed to the Apache Software Foundation (ASF) under one
         or more contributor license agreements.  See the NOTICE file
         distributed with this work for additional information
         regarding copyright ownership.  The ASF licenses this file
         to you under the Apache License, Version 2.0 (the
         "License"); you may not use this file except in compliance
         with the License.  You may obtain a copy of the License at

           http://www.apache.org/licenses/LICENSE-2.0

         Unless required by applicable law or agreed to in writing,
         software distributed under the License is distributed on an
         "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
         KIND, either express or implied.  See the License for the
         specific language governing permissions and limitations
         under the License.
---

<div id="home">
    <h1>API Reference</h1>
    <ul>
        <li>
            <h2>Accelerometer</h2>
            <span>Tap into the device's motion sensor.</span>
        </li>
        <li>
            <h2>Camera</h2>
            <span>Capture a photo using the device's camera.</span>
        </li>
        <li>
            <h2>Capture</h2>
            <span>Capture media files using device's media capture applications.</span>
        </li>
        <li>
            <h2>Compass</h2>
            <span>Obtain the direction that the device is pointing.</span>
        </li>
        <li>
            <h2>Connection</h2>
            <span>Quickly check the network state, and cellular network information.</span>
        </li>
        <li>
            <h2>Contacts</h2>
            <span>Work with the devices contact database.</span>
        </li>
        <li>
            <h2>Device</h2>
            <span>Gather device specific information.</span>
        </li>
        <li>
            <h2>Events</h2>
            <span>Hook into native events through JavaScript.</span>
        </li>
        <li>
            <h2>File</h2>
            <span>Hook into native file system through JavaScript.</span>
        </li>
        <li>
            <h2>Geolocation</h2>
            <span>Make your application location aware.</span>
        </li>
        <li>
            <h2>Globalization</h2>
            <span>Enable representation of objects specific to a locale.</span>
        </li>
        <li>
            <h2>Media</h2>
            <span>Record and play back audio files.</span>
        </li>
        <li>
            <h2>Notification</h2>
            <span>Visual, audible, and tactile device notifications.</span>
        </li>
        <li>
            <h2>Storage</h2>
            <span>Hook into the devices native storage options.</span>
        </li>
    </ul>
    <h1>Guides</h1>
    <ul>
        <li>
            <h2>Getting Started Guides</h2>
            <span>Setup each SDK and create your first Cordova app.</span>
        </li>
        <li>
            <h2>Command-Line Usage</h2>
            <span>Create, build, deploy, and debug from the command-line.</span>
        </li>
        <li>
            <h2>Upgrading Guides</h2>
            <span>Upgrade an application to the latest Cordova release.</span>
        </li>
        <li>
            <h2>Project Settings</h2>
            <span>Customize the features of your app.</span>
        </li>
        <li>
            <h2>Plugin Development Guide</h2>
            <span>Develop your first Cordova plugin.</span>
        </li>
        <li>
            <h2>Domain Whitelist Guide</h2>
            <span>Grant an application access to external domains.</span>
        </li>
        <li>
            <h2>Embedding WebView</h2>
            <span>Implement the Cordova WebView in your project.</span>
        </li>
        <li>
            <h2><a href="_index.html">Keyword Index</a></h2>
            <span>Full index of the Cordova Documentation.</span>
        </li>
    </ul>
</div>
