<!--
 ▄▄▄       ██▓███   ▄▄▄       ▄████▄   ██░ ██ ▓█████     ██▓  ▄████  ███▄    █  ██▓▄▄▄█████▓▓█████
▒████▄    ▓██░  ██▒▒████▄    ▒██▀ ▀█  ▓██░ ██▒▓█   ▀    ▓██▒ ██▒ ▀█▒ ██ ▀█   █ ▓██▒▓  ██▒ ▓▒▓█   ▀
▒██  ▀█▄  ▓██░ ██▓▒▒██  ▀█▄  ▒▓█    ▄ ▒██▀▀██░▒███      ▒██▒▒██░▄▄▄░▓██  ▀█ ██▒▒██▒▒ ▓██░ ▒░▒███
░██▄▄▄▄██ ▒██▄█▓▒ ▒░██▄▄▄▄██ ▒▓▓▄ ▄██▒░▓█ ░██ ▒▓█  ▄    ░██░░▓█  ██▓▓██▒  ▐▌██▒░██░░ ▓██▓ ░ ▒▓█  ▄
 ▓█   ▓██▒▒██▒ ░  ░ ▓█   ▓██▒▒ ▓███▀ ░░▓█▒░██▓░▒████▒   ░██░░▒▓███▀▒▒██░   ▓██░░██░  ▒██▒ ░ ░▒████▒
 ▒▒   ▓▒█░▒▓▒░ ░  ░ ▒▒   ▓▒█░░ ░▒ ▒  ░ ▒ ░░▒░▒░░ ▒░ ░   ░▓   ░▒   ▒ ░ ▒░   ▒ ▒ ░▓    ▒ ░░   ░░ ▒░ ░
  ▒   ▒▒ ░░▒ ░       ▒   ▒▒ ░  ░  ▒    ▒ ░▒░ ░ ░ ░  ░    ▒ ░  ░   ░ ░ ░░   ░ ▒░ ▒ ░    ░     ░ ░  ░
  ░   ▒   ░░         ░   ▒   ░         ░  ░░ ░   ░       ▒ ░░ ░   ░    ░   ░ ░  ▒ ░  ░         ░
      ░  ░               ░  ░░ ░       ░  ░  ░   ░  ░    ░        ░          ░  ░              ░  ░
-->

<!--
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
"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.
-->

<!DOCTYPE html>
<html lang="en">
<head>

<link rel="canonical" href="https://ignite.apache.org/community/contribute.html" />
    <!--#include virtual="/includes/scriptshead.html" -->
<meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
    <meta http-equiv="Pragma" content="no-cache" />
    <meta http-equiv="Expires" content="0" />
    <title>Contribute - Apache Ignite</title>
    <!--#include virtual="/includes/styles.html" -->

    
</head>
<body>
    <!--#include virtual="/includes/header.html" -->
<article>
    <header>
        <div class="container">
            <h1 >Contribute to <strong>Apache Ignite</strong></h1>
        </div>
    </header>
    <div class="container">
			
			<p>
                This guide discusses various types of contribution to Apache Ignite extending generic ideas
                of the <a href="https://community.apache.org/gettingStarted/101.html" target="_blank">ASF Getting
                Started</a>. Contributing to Ignite doesn’t just mean writing code. Helping new users on the mailing
                list and improving documentation are also important. In fact, proposing significant code changes
                usually requires first gaining experience and credibility within the community by helping in other ways.
            </p>
            <p>
                The guide organizes contributions in an order that should be considered by new contributors
                who intend to get involved long-term. Build some track record of helping others, become more
                experienced with Ignite rather than solely focusing on code pull-requests.
            </p>
            <p>
                Also, our communication and collaboration are based on
                <a href="http://www.apache.org/theapacheway/index.html" target="_blank">The Apache Way</a> that helps
                us, as a group of professionals, drive the project forward in a respectful and inclusive way.
            </p>
			
				<h2>Getting Started</h2>
            	<p>
                The first thing to do is to join our <a href="mailto:dev@ignite.apache.org">dev mailing
                list</a> and say "Hello" to everyone in the community. Tell us something about your areas of
                expertise mentioning how exactly you would like to contribute. We are a friendly and inclusive
                community and will try to simplify your "onboarding" considering your strengths and areas of interest.

                Also, make sure to share your JIRA ID in the same email
                (<a href="https://issues.apache.org/jira/projects/IGNITE"target="_blank">create a new one</a>
                if you don't have an ASF JIRA account yet). One of our community members will add you to
                the contributors' list.
            </p>
            <p>
                Next, check the <a href="https://cwiki.apache.org/confluence/display/IGNITE/How+to+Collaborate" target="_blank">
                How to Collaborate</a> page for more details on various communication channels used by the community
                members. Even though most of the discussions take place on the dev list, we hang out on Slack.
            </p>
		
			<h2>Contribute by Helping Others</h2>

            <p>
                A great way to contribute to Ignite and get more practical experience is by helping answer
                user questions on the user@ignite.apache.org mailing list or on StackOverflow. Ignite users ask dozens
                of questions daily; taking a few minutes to help answer a question or troubleshoot an issue is a very
                valuable contribution to the project and community success.
            </p>
            <p>
                Subscribe to the <a href="/community/resources.html">user list and set up StackOverflow notifications</a>
                to stay up to date on what’s happening in Ignite. Answering questions is an excellent and visible way
                to help the community, which also demonstrates your expertise.
            </p>

            <h2>Contribute Documentation Changes</h2>
            <p>
                Contributing to <a href="/docs/latest">technical documentation</a> and API references such as JavaDocs
                are as valuable as contributing to bug fixes or features. Ignite documentation is an integral part of
                the project, which educates Ignite users
                about Ignite capabilities, configuration techniques, optimization aspects and many other areas they need
                to understand to deploy Ignite successfully in production.
            </p>
            <p>
                Code changes contribution is not the only way to become an Ignite committer. Help the community to
                produce and maintain the documentation pages or API references, edit and correct existing content, stay
                active on the user and dev mailing lists, and you'll become a committer in due course.
            </p>
		
			<ul class="page-list">
                <li>
                    Get to know our <a href="https://cwiki.apache.org/confluence/display/IGNITE/How+to+Document" target="_blank">
                    documentation contribution process</a>.
                </li>
                <li>
                    Select any <a href="https://issues.apache.org/jira/issues/?jql=project%20%3D%20IGNITE%20AND%20resolution%20%3D%20Unresolved%20AND%20status%20not%20in%20(closed%2C%20resolved)%20and%20component%20%3D%20documentation%20%20ORDER%20BY%20priority%20DESC%2C%20updated%20DESC" target="_blank">
                    open documentation ticket</a> or fix an issue you came across.
                </li>
                <li>
                    <a href="https://issues.apache.org/jira/projects/IGNITE" target="_blank">Report</a> any documentation issue setting <i>documentation</i> as a ticket's
                    <i>component</i> type.
                </li>
            </ul>
            
    
        <h2>Code Contributions</h2>
            <p>
                Before you start with code contributions, get to know our
                <a href="https://cwiki.apache.org/confluence/display/IGNITE/How+to+Contribute" target="_blank">Contribution and
                    Development</a> process.
            </p>

            <div class="page-heading">Extensions and Integrations Contribution</div>
            <p>
                Ignite is used together with a huge selection of libraries and
                frameworks, and some of them are officially supported by the community. While some of the
                existing integrations such as with Spark, Spring Data, or Hibernate still reside in the primary Ignite
                repository, they all will eventually be moved to the Ignite Extensions repository. New integrations are
                accepted to the Extensions repository only.
            </p>
            <p>
                Feel free to contribute a new extension to Ignite or select an open ticket to help improve existing
                integrations:
            </p>
            <ul>
                <li>
                    <a href="https://issues.apache.org/jira/browse/IGNITE-8382?jql=project%20%3D%20Ignite%20and%20summary%20~%20%22spring%22%20and%20status%20not%20in%20(Resolved%2C%20Closed)" target="_blank">
                        Spring Framework</a> integrations.
                </li>
                <li>
                    <a href="https://issues.apache.org/jira/browse/IGNITE-12054?jql=project%20%3D%20Ignite%20and%20summary%20~%20%22spark%22%20and%20status%20not%20in%20(Resolved%2C%20Closed)" target="_blank">
                        Apache Spark</a> integration.
                </li>
                <li>
                    <a href="https://issues.apache.org/jira/issues/?jql=project%20%3D%20IGNITE%20AND%20component%20in%20(Integrations)%20and%20status%20%3D%20OPEN"
                       target="_blank">All other</a> integrations.
                </li>
            </ul>
            
            <h2>Contribute to Ignite core</h2>
            <p>
                If you want to contribute to the core components of Ignite, then consider one of the tickets
                below. These tickets are of easy and moderate complexity, which can simplify your start:
            </p>
            <ul class="page-list">
                <li>
                    All the current
                    <a href="https://issues.apache.org/jira/issues/?jql=project%20%3D%20IGNITE%20AND%20labels%20in%20(newbie)%20and%20status%20%3D%20OPEN" target="_blank">
                        easy and moderate tickets</a> suited for a quick start.
                </li>
                <li>
                    Machine Learning
                    <a href="https://issues.apache.org/jira/issues/?jql=project%20%3D%20IGNITE%20AND%20labels%20in%20(newbie)%20and%20component%20in%20(ML)%20and%20status%20%3D%20OPEN" target="_blank">
                        tickets for beginners</a>.
                </li>
                <li>
                    Or <a href="https://issues.apache.org/jira/issues/?jql=project%20%3D%20IGNITE%20AND%20labels%20in%20(newbie)%20and%20component%20in%20(sql)%20and%20status%20%3D%20OPEN" target="_blank">
                    SQL tasks</a> to start with.
                </li>
                <li>
                    If you are more interested in .NET, Python, Node.JS, or other programming languages different from
                    Java, then use <a
                        href="https://issues.apache.org/jira/issues/?jql=project%20%3D%20IGNITE%20AND%20labels%20in%20(newbie)%20and%20component%20in%20(platforms)%20and%20status%20%3D%20OPEN" target="_blank">
                    this filter</a> to select your first task.
                </li>
                <li>
                    Curious in distributed data structures?
                    <a
                            href="https://issues.apache.org/jira/issues/?jql=project%20%3D%20IGNITE%20AND%20component%20in%20(%22data%20structures%22)%20and%20status%20%3D%20OPEN" target="_blank">
                        Help to improve</a> the existing ones or contribute a brand new.
                </li>
            </ul>
            <p>
                Still haven't found anything gripping? Search through all the tickets in
                <a href="https://issues.apache.org/jira/browse/IGNITE/">Ignite Jira</a>, check the latest Ignite
                discussions on the dev list, or simply email us.
            </p>
            
            
			<h2>Become a Committer and PMC Member</h2>
            <p>
                We love contributions and gladly promote active contributors to committers and PMC members! If you
                are new to Apache Software Foundation then Ignite will be an excellent choice to start your journey.
            </p>
            <p>
                The most important point of becoming a committer for Apache projects is active participation
                within the community. Being an active community member means participating in mailing list
                discussions, helping to answer questions, being respectful towards others, and following the
                meritocratic principles of community management.
            </p>
            <p>
                Of course, code and documentation contributions are also important. Once you make a few of them,
                you will become eligible to join Ignite committers, and possibly Ignite PMC.
                Candidates for new committers or PMC members are suggested by the current committers, mentors, or
                PMC members, and then must be approved by the PMC voting process.
                <a href="https://cwiki.apache.org/confluence/display/IGNITE/Committership+Bar+Guidance" target="_blank">
                    This page</a> explains how and when Ignite community members decide to propose contributors to
                the roles of committers or PMC members.
            </p>
            
            
            <h2>Start Coding</h2>
            <p>
                Apache Ignite uses GIT for its VCS system. The "master" branch contains the last released version.
                The "ignite-{version}" branch contains the latest code for the latest or upcoming release.

                Refer to the <a href="https://cwiki.apache.org/confluence/display/IGNITE/How+to+Contribute" target="_blank">Contribution and
                Development</a> page which explains the process in detail including reviews, pull-requests, etc. --
                everything you need to know and do before a contribution can be accepted.
                While below you can find more detailed instructions, here is how you can checkout the Ignite repo and explore
                its code:
            </p>
            <h5>GIT checkout</h5>
            <pre class="line-numbers"><code class="language-bash">
                # Master branch.
                $ git clone https://github.com/apache/ignite.git
            </code></pre>
            <h5>Build Project</h5>
            <pre class="line-numbers"><code class="language-bash">
                # Build project.
                $ mvn clean install -Pall-java,all-scala,licenses -DskipTests
            </code></pre>
            <p>
                See more detailed build instructions in the
                <a href="https://github.com/apache/ignite/blob/master/DEVNOTES.txt" target="_blank" rel="noopener">DEVNOTES.txt</a> file.
            </p>
			
</div>
</article>
<!--#include virtual="/includes/footer.html" -->

<!--#include virtual="/includes/scripts.html" -->
</body>
</html>
