<!--#include virtual="includes/_header.htm" -->
<body class="page-contributing ">
<!--#include virtual="includes/_top.htm" -->
<div class="content">
	<!--#include virtual="includes/_nav.htm" -->
	<div class="right">
		<h1 class="content-title">How to contribute</h1>
		<p>We are always very happy to have contributions, whether for trivial cleanups or big new features.</p>
		<p>
		If you don't know Java or Scala you can still contribute to the project. An important area is the <a href="https://cwiki.apache.org/confluence/display/KAFKA/Clients">clients</a>. We want to have high quality, well documented clients for each programming language. These, as well as the surrounding <a href="https://cwiki.apache.org/confluence/display/KAFKA/Ecosystem">ecosystem</a> of integration tools that people use with Kafka&reg;, are critical aspects of the project.
		<p>
		Nor is code the only way to contribute to the project. We strongly value documentation and gladly accept improvements to the documentation.

		<h2>Reporting An Issue</h2>

		Reporting potential issues as <a href="https://issues.apache.org/jira/browse/KAFKA">JIRA tickets</a> is more than welcome as a significant contribution to the project. But please be aware that JIRA tickets should not be used for FAQs:
		if you have a question or are simply not sure if it is really an issue or not, please <a href="/contact.html">contact us</a> first before you create a new JIRA ticket.

		To create a new JIRA ticket, please follow the instructions in <a href="https://cwiki.apache.org/confluence/display/KAFKA/Reporting+Issues+in+Apache+Kafka">this page</a>.

		<h2>Contributing A Code Change</h2>

		To submit a change for inclusion, please do the following:

		<ul>
			<li>If the change is non-trivial please include some unit tests that cover the new functionality.</li>
			<li>If you are introducing a completely new feature or API it is a good idea to start a wiki and get consensus on the basic design first.</li>
			<li>Make sure you have observed the recommendations in the <a href="coding-guide.html">style guide</a>.</li>
			<li>Follow the detailed instructions in <a href="https://cwiki.apache.org/confluence/display/KAFKA/Contributing+Code+Changes">Contributing Code Changes</a>.</li>
			<li>Note that if the change is related to user-facing protocols / interface / configs, etc, you need to make the corresponding change on the documentation as well. For wiki page changes feel free to edit the page content directly (you may need to contact us to get the permission first if it is your first time to edit on wiki);  website docs live in the code repo under `docs` so that changes to that can be done in the same PR as changes to the code. Website doc change instructions are given below.
			<li>It is our job to follow up on patches in a timely fashion. <a href="mailto:dev@kafka.apache.org">Nag us</a> if we aren't doing our job (sometimes we drop things).</li>
		</ul>

		<h2>Contributing A Change To The Website</h2>

		To submit a change for inclusion please do the following:

		<ul>
		       <li>Follow the instructions in <a href="https://cwiki.apache.org/confluence/display/KAFKA/Contributing+Website+Documentation+Changes">Contributing Website Changes</a>.</li>
		       <li>It is our job to follow up on patches in a timely fashion. <a href="mailto:dev@kafka.apache.org">Nag us</a> if we aren't doing our job (sometimes we drop things). If the patch needs improvement, the reviewer will mark the jira back to "In Progress" after reviewing.</li>
		</ul>

		<h2>Finding A Project To Work On</h2>

		The easiest way to get started working with the code base is to pick up a really easy JIRA and work on that. This will help you get familiar with the code base, build system, review process, etc. We flag these kind of starter bugs <a href="https://issues.apache.org/jira/issues/?jql=project%20%3D%20KAFKA%20AND%20labels%20%3D%20newbie%20AND%20status%20%3D%20Open">here</a>.
		<p>
		Please contact us to be added to the contributor list with your JIRA account username provided in the email. After that you can assign yourself to the JIRA ticket you have started working on so others will notice.
		</p>
                <p>
                If your work is considered a "major change" then you would need to initiate a Kafka Improvement Proposal (KIP) along with the JIRA ticket (more details can be found <a href="https://cwiki.apache.org/confluence/display/KAFKA/Kafka+Improvement+Proposals">here</a>). Please ask us to grant you the permission on wiki space in order to create a KIP wiki page.
                </p>
		<p>
		Once you have gotten through the basic process of checking in code, you may want to move on to a more substantial project. We try to curate this kind of project as well, and you can find these <a href="https://issues.apache.org/jira/issues/?jql=project%20%3D%20KAFKA%20AND%20labels%20%3D%20project%20AND%20status%20%3D%20Open">here</a>.
		</p>

		<h2>Becoming a Committer</h2>

		We are always interested in adding new contributors. What we look for is a series of contributions, good taste, and an ongoing interest in the project.
		Kafka PMC looks at the following guidelines for promoting new committers:

		<ul>
			<li>Made significant contributions in areas such as design, code and/or documentation. The following are some examples (list not exclusive):
				<ul>
					<li>Submitted and completed non-trivial KIPs.</li>
					<li>Fixed critical bugs (including performance improvements).</li>
					<li>Made major tech-debt cleanup.</li>
					<li>Made major documentation (web docs and java docs) improvements.</li>
				</ul>
			</li>
			<li>Consistently helped the community in at least one of the following areas since more than 6 months back (list not exclusive):
				<ul>
					<li>Mailing list participation.</li>
					<li>Code reviews and KIP reviews.</li>
					<li>Release validations including testing and benchmarking, etc.</li>
					<li>Evangelism events: technical talks, blog posts, etc.</li>
				</ul>
			</li>
			<li>Demonstrated good understanding and exercised good technical judgement on at least one component of the codebase (e.g. core, clients, connect, streams, tests) from contribution activities in the above mentioned areas.</li>
		</ul>

	<script>
	// Show selected style on nav item
	$(function() { $('.b-nav__project').addClass('selected'); });
	</script>

<!--#include virtual="includes/_footer.htm" -->
