# Matter Example Applications

> **Note:** The applications in this directory are reference implementations
> intended for development and testing. They are not production-ready and are
> not intended to be shipped as-is in a commercial product.
