# API Documentation   {#index}

## Introduction

The Zephyr OS is a small-footprint kernel designed for use on
resource-constrained and embedded systems: from simple embedded
environmental sensors and LED wearables to sophisticated embedded
controllers, smart watches, and IoT wireless applications.

See the [zephyrproject.org](https://zephyrproject.org) site for more
information about the project and becoming a member, and this [summary
of Zephyr resources](https://docs.zephyrproject.org/latest/introduction/index.html#resources)
to help you find your way around the project.

## Supported Boards

The Zephyr kernel supports multiple architectures, including ARM
Cortex-M, Intel x86, ARC, NIOS II, Tensilica Xtensa, and RISC-V 32.  For
details, see the [latest supported boards
documentation](https://docs.zephyrproject.org/latest/boards/index.html).

## Licensing

Zephyr is permissively licensed using the Apache 2.0 license (as found
in the [project's GitHub LICENSE
file](https://github.com/zephyrproject-rtos/zephyr/blob/master/LICENSE).
There are some imported or reused components of the Zephyr project that
use other licensing, as described in [Licensing of Zephyr Project
components](https://docs.zephyrproject.org/latest/LICENSING.html#zephyr-licensing).
