# Contributing to Jakarta Expression Language

Thanks for your interest in this project.

## Project description

Jakarta Expression Language provides an important mechanism
for enabling the presentation layer (web pages) to communicate with the
application logic (managed beans). Jakarta Expression Language is used by several Jakarta EE
technologies, such as Jakarta Faces, Jakarta Server Pages, Jakarta Security and Contexts and
Dependency Injection for Jakarta EE (CDI). 

Jakarta Expression Language can also be used in stand-alone environments.

* https://projects.eclipse.org/projects/ee4j.el

## Developer resources

Information regarding source code management, builds, coding standards, and
more.

* https://projects.eclipse.org/projects/ee4j.el/developer

The project maintains the following source code repositories

* https://github.com/eclipse-ee4j/el-ri

## Eclipse Contributor Agreement

Before your contribution can be accepted by the project team contributors must
electronically sign the Eclipse Contributor Agreement (ECA).

* http://www.eclipse.org/legal/ECA.php

Commits that are provided by non-committers must have a Signed-off-by field in
the footer indicating that the author is aware of the terms by which the
contribution has been provided to the project. The non-committer must
additionally have an Eclipse Foundation account and must have a signed Eclipse
Contributor Agreement (ECA) on file.

For more information, please see the Eclipse Committer Handbook:
https://www.eclipse.org/projects/handbook/#resources-commit

## Contact

Contact the project developers via the project's "dev" list.

* 
