# Welcome to the Apache MyFaces Project

Apache MyFaces is a project of the Apache Software Foundation, and hosts several sub-projects relating to the JavaServer™ Faces (JSF) technology.

## Projects
* MyFaces Core | Implementation of the JSF specification
* Apache Tobago | A component library

## Inactive Projects (Maintenance Mode)
* MyFaces Commons | Utilities like components, converters, validators
* MyFaces Tomahawk | A component library
* MyFaces Trinidad | A component library (former Oracle ADF-Faces)
* MyFaces Orchestra | Utility library based on Spring
* MyFaces Extensions Validator | Validation framework based on annotations
* MyFaces Extensions CDI | Utility library based on CDI
* MyFaces Extensions Scripting | Adds scripting and rapid prototyping (hot deployment) to JSF
* MyFaces Portlet Bridge | Bridge between Portlets and JSF
