# Documentation

## Building and Developing

-   A quick start guide to building a demo application and controller is
    available in the [Getting started](./getting_started/) guide
-   A guide to new cluster and device type development is available in the
    [New Cluster and Device Type Developement Guide](./cluster_and_device_type_dev/)
-   Documentation about building from the command line can be found in
    [the build guide](guides/BUILDING.md)
-   Documentation about running [cirque](https://github.com/openweave/cirque)
    tests can be found in
    [the cirque test guide](../src/test_driver/linux-cirque/README.md)
-   Documentation about standard build & development flows using
    [Visual Studio Code](https://code.visualstudio.com/) can be found in
    [the development guide](./VSCODE_DEVELOPMENT.md)

## Issue triage

Project issues are triaged and maintained according to the
[issue triage](./issue_triage.md) guide.

## Platform Guides

-   Various guides are available [here](./guides/README.md) that cover platform
    bring up, testing, and various troubleshooting things.

## Project Flow

-   Documentation about general project usage of GitHub, and project tools is
    documented in [the project flow](./PROJECT_FLOW.md)

## Style Guide

-   Documentation about style is documented in
    [the style guide](./style/style_guide.md)
-   Additional documentation about more specific files are in the
    [style folder](./style/)

## Third Party Tools

Some tools and utilities are dependent on third party tools, such as Docker.

[Docker](https://www.docker.com) is an excellent way to have stable build
environments that don't pollute the host OS. It is also much easier to maintain
stability across multiple host environments. Install stable version of
[Docker Desktop](https://www.docker.com/products/docker-desktop) relevant to
your native OS (macOS or Windows). Once installed, you can run docker commands
from the shell/terminal.
