..
    Zephyr Project documentation master file

.. _zephyr-home:

Zephyr Project Documentation
############################

.. only:: release

   Welcome to the Zephyr Project's documentation for version |version|.

   Documentation for the latest (master) development branch of Zephyr
   can be found at https://docs.zephyrproject.org/

.. only:: (development or daily)

   Welcome to the Zephyr Project's documentation
   for the master tree under development (version |version|).

Use the version selection menu on the left to view
documentation for a specific version of Zephyr.

For information about the changes and additions for releases, please
consult the published :ref:`zephyr_release_notes` documentation.

The Zephyr OS is provided under the `Apache 2.0 license`_ (as found in
the LICENSE file in the project's `GitHub repo`_).  The Zephyr OS also
imports or reuses packages, scripts, and other files that use other
licensing, as described in :ref:`Zephyr_Licensing`.

.. _Apache 2.0 license:
   https://github.com/zephyrproject-rtos/zephyr/blob/master/LICENSE

.. _GitHub repo: https://github.com/zephyrproject-rtos/zephyr


.. raw:: html

   <ul class="grid">
       <li class="grid-item">
	   <a href="introduction/index.html">
	       <img alt="" src="_static/images/kite.png"/>
	       <h2>Introduction</h2>
	   </a>
	   <p>Introducing the Zephyr Project: overview, architecture, features, and licensing</p>
       </li>
       <li class="grid-item">
	   <a href="getting_started/index.html">
               <span class="grid-icon fa fa-map-signs"></span>
	       <h2>Getting Started Guide</h2>
	   </a>
	   <p>Follow this guide to set up a Zephyr development environment on your
	       system, and then build and run a sample application.</p>
       </li>
       <li class="grid-item">
	   <a href="contribute/index.html">
               <span class="grid-icon fa fa-github"></span>
	       <h2>Contribution Guidelines</h2>
	   </a>
	   <p>As an open-source project, we welcome and encourage the community
           to submit patches directly to the project.</p>
       </li>
       <li class="grid-item">
	   <a href="samples/index.html">
               <span class="grid-icon fa fa-cogs"></span>
	       <h2>Samples and Demos</h2>
	   </a>
	   <p>A list of samples and demos that can run on a variety of boards supported
	       by Zephyr</p>
       </li>
       <li class="grid-item">
	   <a href="reference/index.html">
               <span class="grid-icon fa fa-sign-in"></span>
	       <h2>API Reference</h2>
	   </a>
	   <p>API Documentation, Zephyr configuration, and subsystem Reference</p>
       </li>
       <li class="grid-item">
	   <a href="security/index.html">
               <span class="grid-icon fa fa-lock"></span>
	       <h2>Security</h2>
	   </a>
	   <p>Requirements, processes, and developer guidelines for ensuring security is addressed within the Zephyr project.</p>
       </li>
       <li class="grid-item">
	   <a href="boards/index.html">
               <span class="grid-icon fa fa-object-group"></span>
	       <h2>Supported Boards</h2>
	   </a>
	   <p>List of supported boards and platforms.</p>
       </li>
       <li class="grid-item">
	   <a href="guides/index.html">
               <span class="grid-icon fa fa-puzzle-piece"></span>
	       <h2>User and Developer Guides</h2>
	   </a>
	   <p>User and Developer Guides, including tools and tips</p>
       </li>
   </ul>

.. only:: html

   Sections
   ********

.. toctree::
   :maxdepth: 1

   introduction/index.rst
   getting_started/index.rst
   contribute/index.rst
   development_process/index.rst
   application/index.rst
   reference/index.rst
   guides/index.rst
   security/index.rst
   samples/index.rst
   boards/index.rst
   releases/index.rst

.. only:: html

   Indices and Tables
   ******************

* :ref:`glossary`

* :ref:`genindex`
