Title: Community

<h1>Apache Wink Community<a name="Apache_Community"></a></h1>

<hr>

<div class="row">
    <div class="span10">
        <p>Every volunteer project obtains its strength from the people involved in it. We invite you to participate as much or as little as you choose.</p>
    	<p>You can:</p>
    	<ul>
        	<li>Use our project and provide a feedback.</li>
        	<li>Provide us with the use-cases.</li>
        	<li>Report bugs and submit patches.</li>
        	<li>Contribute code, javadocs, documentation.</li>
        </ul>
        <p>Visit the <a href="http://cwiki.apache.org/confluence/display/WINK/Project+Guidelines">Project Guidelines</a> for more information.</p>
    </div>
</div>

<hr>


<h3>Communication<a name="Communication"></a></h3>
<div class="row">
    <div class="span10">

    	<h4>Mailing Lists<a name="mailing_list"></a></h4>

        <p>The Apache Wink project uses mailing lists primarily to communicate with its members.</p>
        <p>These are the mailing lists that have been established for this project. For each list, there is a subscribe, unsubscribe, and an archive link.</p>

		<table class="table table-hover">
	    	<tr class="a">
	        	<th>Name</th>
	        	<th>Subscribe</th>
	        	<th>Unsubscribe</th>
	        	<th>Post</th>
	        	<th>Archive</th>
	        	<th>Other Archives</th>
	    	</tr>
	    	<tr>
	        	<td>Users</td>
	        	<td><a href="mailto:user-subscribe@wink.apache.org">Subscribe</a></td>
	        	<td><a href="mailto:user-unsubscribe@wink.apache.org">Unsubscribe</a></td>
	        	<td><a href="mailto:user@wink.apache.org">Post</a></td>
	        	<td><a href="http://mail-archives.apache.org/mod_mbox/wink-user/">mail-archives.apache.org</a></td>
	        	<td><a href="http://apache-wink-users.3471013.n2.nabble.com/">n2.nabble.com</a></td>
	    	</tr>
	    	<tr>
	        	<td>Development</td>
	        	<td><a href="mailto:dev-subscribe@wink.apache.org">Subscribe</a></td>
	        	<td><a href="mailto:dev-unsubscribe@wink.apache.org">Unsubscribe</a></td>
	        	<td><a href="mailto:dev@wink.apache.org">Post</a></td>
	        	<td><a href="http://mail-archives.apache.org/mod_mbox/wink-dev/">mail-archives.apache.org</a></td>
	        	<td><a href="http://apache-wink-dev.3470905.n2.nabble.com/">n2.nabble.com</a></td>
	    	</tr>
		    <tr>
		        <td>Commits</td>
		        <td><a href="mailto:commits-subscribe@wink.apache.org">Subscribe</a></td>
		        <td><a href="mailto:commits-unsubscribe@wink.apache.org">Unsubscribe</a></td>
		        <td><a href="mailto:commits@wink.apache.org">Post</a></td>
		        <td><a href="http://mail-archives.apache.org/mod_mbox/wink-commits/">mail-archives.apache.org</a></td>
		        <td>-</td>
		    </tr>
		</table>

		<h4>IRC<a name="IRC"></a></h4>

        <p>IRC is also used for a real-time discussions. </p>
        <p>Log into #apache-wink on Freenode or use a <a class="externalLink" href="http://webchat.freenode.net/?channels=apache-wink">Web Client</a></p>
    </div>
</div>

<hr>

<h3>Issue Tracker<a name="Issue_Tracker"></a></h3>

<div class="row">
    <div class="span10">
        <h4>Bug Reports<a name="Bug_Reports"></a></h4>
        <p>Found bug? Enter an issue in the <a href="https://issues.apache.org/jira/browse/WINK">Issue Tracker</a>.</p>
        <p>Before submitting an issue, please:</p>
        <ul>
            <li>Verify that the bug does in fact exist.</li>
            <li>Search the issue tracker to verify there is no existing issue reporting the bug you've found.</li>
            <li>Consider tracking down the bug yourself in the Wink's source and submitting a patch along with your bug report. This is a great time saver for the Wink developers and helps ensure the bug will be fixed quickly. </li>
        </ul>

        <br/>

        <h4>Feature Request<a name="Feature_Request"></a></h4>
        <p>Enhancement requests for new features are also welcome. The more concrete and rationale the request is, the greater the chance it will incorporated into future releases.</p>
    </div>
</div>

<h3>Source Code<a name="Source_Code"></a></h3>

<div class="row">
    <div class="span10">
        <p>The project sources are accessible via the <a href="./source-repository.html">SVN</a>.</p>
    </div>
</div>
