# How to contribute

We'd love to accept your patches and contributions to this project.

To get started with contributing, please take a look at the
[Contributing](https://iree.dev/developers/general/contributing/) guide.

## Getting in touch

*   [GitHub issues](https://github.com/iree-org/iree/issues): Feature requests,
    bugs, and other work tracking
*   [IREE Discord server](https://discord.gg/wEWh6Z9nMU): Daily development
    discussions with maintainers, contributors, and collaborators
*   [iree-technical-discussion email list](https://lists.lfaidata.foundation/g/iree-technical-discussion):
    General and low-priority discussion

## Project governance

IREE is a sandbox-stage project of the
[LF AI & Data Foundation](https://lfaidata.foundation/). Technical
oversight of the project is the responsibility of its Technical
Steering Committee (TSC), as set out in the
[IREE Technical Charter](https://github.com/lfai/foundation/blob/main/technical%20project%20charters/IREE%20Technical%20Charter%20Final%205-14-2024.docx.pdf).

As provided for in section 2.b of the charter, the voting members of
the TSC are:

*   Maximilian Bartel (@maxbartel), RooflineAI — Chairperson
*   Tobias Fuchs (@devtbi), RooflineAI
*   Artem Gindinson (@AGindinson), RooflineAI
*   Stella Laurenzo (@stellaraccident), AMD
*   Christopher McGirr (@chrsmcgrr), RooflineAI
*   Stefan Schuermans (@schuermans-roofline), RooflineAI
*   Jelle Schuhmacher (@jschuhmacher), RooflineAI
*   Ben Vanik (@benvanik), AMD

See [MAINTAINERS.md](MAINTAINERS.md) for how the TSC operates. TSC
meetings are open to everyone.

## Community guidelines

This project follows the
[LF Projects code of conduct](https://lfprojects.org/policies/code-of-conduct/).
