# Get involved with Fuchsia

This document describes the different ways you can get involved
and stay informed about Fuchsia.

## Review the Fuchsia roadmap

The Fuchsia project prioritizes features and enhancements that support our
development community. Read the [Fuchsia roadmap](/docs/contribute/roadmap/index.md)
to get a high-level understanding of the various projects being considered
within Fuchsia.

## Understand the Request for Comments (RFC) process

The Requests for Comments (RFC) process is intended to provide a consistent and
transparent path for making project-wide technical decisions.

RFCs are documents that inform and build on the technical direction of the
Fuchsia project. RFCs can be proposed by anyone in the community. Using an RFC,
a Fuchsia community member can submit an idea or technical concept for broader
review or consideration. For more information, see [Fuchsia RFCs](/docs/contribute/governance/rfcs).

### Review completed RFCs

To see a complete list of accepted and rejected RFC proposals, see [Accepted proposals](/docs/contribute/governance/rfcs#accepted)
and [Rejected proposals](/docs/contribute/governance/rfcs#rejected).

### Track ongoing RFCs

To stay up-to-date with RFCs that are still in progress, you can bookmark this [saved search](https://fuchsia-review.googlesource.com/q/dir:docs/contribute/governance/rfcs+is:open)
that lists any open Gerrit change in the `rfcs` directory.

### Create an RFC

If you want to create a proposal that you want the Fuchsia Eng Council to
review, see [Creating an RFC.](/docs/contribute/governance/rfcs/create_rfc.md)

## Join a mailing list

Stay informed about the Fuchsia project by joining an email list through
Google Groups.

For more information,
see [Mailing lists](/docs/contribute/community/mailing-lists.md).

## Join our Discord server

Connect and chat with Fuchsia contributors in the Fuchsia Discord community.

Join the [Fuchsia Discord server](https://discord.com/invite/pjfYkmbq69){: .external}.

## Contribute code

The Fuchsia project encourages well-tested, high-quality contributions from
anyone who wants to contribute to Fuchsia, not just from Googlers.

To learn more about how to contribute a code change to Fuchsia,
see [Contribute changes](/docs/development/source_code/contribute_changes.md).

In Issue Tracker, the `GoodFirstBug` hotlist exists. This hotlist signals to potential
contributors that a particular bug could be a great entry point in terms of
contributions, since that particular bug does not require extensive
experience/knowledge with the Fuchsia project.

To view the current list of bugs with the `GoodFirstBug` hotlist, go to the
[Good First Bug List](https://issues.fuchsia.dev/issues?q=hotlistid:5515392%20status:open).

## Report an issue

Did you see a line of documentation or code that you think needs to be improved?
You can help get these kinds of concerns resolved by filing an issue in Issue Tracker.
For more information, see [Report an Issue](/docs/contribute/report-issue.md).

All participation in groups, bugs, and forums must adhere to the
[Fuchsia Code of Conduct](/CODE_OF_CONDUCT.md).
Report Code of Conduct issues directly to the Community Management team via:

 * [Email](mailto:community-managers@fuchsia.dev)
 * Discord, via the `@Community Managers` role,
   or to any individual Community Manager (identified by that role) via direct message.
 * [An Issue Tracker ticket](https://issues.fuchsia.dev/issues/new?component=1477828&template=1911473).
   Note that such tickets are only visible to Community Managers.