Title: Get Involved
Notice:    Licensed to the Apache Software Foundation (ASF) under one
           or more contributor license agreements.  See the NOTICE file
           distributed with this work for additional information
           regarding copyright ownership.  The ASF licenses this file
           to you under the Apache License, Version 2.0 (the
           "License"); you may not use this file except in compliance
           with the License.  You may obtain a copy of the License at
           .
             http://www.apache.org/licenses/LICENSE-2.0
           .
           Unless required by applicable law or agreed to in writing,
           software distributed under the License is distributed on an
           "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
           KIND, either express or implied.  See the License for the
           specific language governing permissions and limitations
           under the License.

If you are new to Apache and open source and would like to learn more about how to work in open source, check this [page](http://apache.org/foundation/getinvolved.html).

Allura is very welcoming of contributions in all areas - documentation, source code, bug fixes, UI enhancements, or general feedback. Some of the ways you can get involved are:

* Subscribe to the [mailing lists](/allura/mailinglists.html). If you are interested in getting involved at the user level, subscribe to the user mailing list. If you are interested in the development of Allura, then subscribe to the developer list.
* Help answer questions posted to the user mailing list for areas that you are familiar with. Your user experience can be very valuable to other users as well as developers on the project.
* Contribute to feature development. Just let the community know what you would like to work on. It is as easy as that.
* Identify tickets in the area that you are interested and provide patches.
The source is maintained in Apache's Git repo. Information to the project source code is available [here](/allura/sources.html).
* Provide Feedback: What is working well? What is not? Any help is good. Be part of the community.

