# Welcome to Melange!

You've arrived at this page because you've expressed interest in contributing to Melange.  Here's some information to get you started!

  * Please read our GettingStarted page for instructions on setting up your development environment.
  * MailingListsGuidelines talks about our mailing lists.  Most technical discussion happen on `melange-soc-dev`.
  * We use [Gerrit](Gerrit.md) for code reviews.  You should also read ContributionReviews.

A lot of people ask what they should work on.  Right now, we have over 350 open issues in the [issue tracker](https://code.google.com/p/soc/issues/list), but you shouldn't assume that because an issue is there it should be worked on. Issues marked with the `Bienvenue` label might be a good place to start, or you can look through the tracker yourself.  The best place to start is with something tiny -- that's a good way of learning our code and processes.  Once you've completed a few small tasks, it's time to take on something bigger.

Our focus right now isn't on adding large new features -- it's on maintainability, bugfixing, cleaning the code, improving usability and performance.

Looking forward to seeing patches from you!

- The Melange Developers