<!DOCTYPE html>
<html lang="en">
<!--[if lt IE 7 ]><html class="ie ie6" lang="en"> <![endif]-->
<!--[if IE 7 ]><html class="ie ie7" lang="en"> <![endif]-->
<!--[if IE 8 ]><html class="ie ie8" lang="en"> <![endif]-->
<!--[if (gte IE 9)|!(IE)]><!-->
<head>
<meta charset="utf-8">
<title>The Apache OFBiz&reg; Project - Getting Involved</title>
<meta name="Description" content="OFBiz is an open source enterprise automation software project licensed under the Apache License. It means you are not alone and can work with many others." />
<meta name="Robots" content="index,follow" />
<!-- Mobile Specific Metas
    ================================================== -->
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- CSS
    ================================================== -->
<!-- Bootstrap  -->
<link type="text/css" rel="stylesheet" href="/bootstrap/css/bootstrap.min.css">
<!-- web font  -->
<link href="//fonts.googleapis.com/css?family=Open+Sans:400,300,800" rel="stylesheet" type="text/css">
<!-- plugin css  -->
<link rel="stylesheet" type="text/css" href="/js/plugins/pretty-photo/css/prettyPhoto.css" />
<link rel="stylesheet" type="text/css" href="/js/plugins/rs-plugin/css/settings.css" media="screen" />
<link type="text/css" rel="stylesheet" href="/js/plugins/hoverdir/css/style.css">
<!-- icon fonts -->
<link type="text/css" rel="stylesheet" href="/font-icons/custom-icons/css/custom-icons.css">
<link type="text/css" rel="stylesheet" href="/font-icons/custom-icons/css/custom-icons-ie7.css">
<!-- Custom css -->
<link type="text/css" rel="stylesheet" href="/css/layout.css">
<link type="text/css" id="colors" rel="stylesheet" href="/css/colors.css">
<!--[if lt IE 9]><script src="//html5shim.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
<!--[if gte IE 9]><style type="text/css">.iconBig, .active, .hover a , .Shover a { filter: none !important; } </style> <![endif]-->
<script src="js/modernizr-2.6.1.min.js"></script>
<!-- Favicons
    ================================================== -->
<link rel="shortcut icon" href="/images/favicon.ico">
<link rel="apple-touch-icon" href="/images/apple-icon.png">
<link rel="apple-touch-icon" sizes="72x72" href="/images/apple-icon-72x72.png">
<link rel="apple-touch-icon" sizes="114x114" href="/images/apple-icon-114x114.png">
<link rel="apple-touch-icon" sizes="144x144" href="/images/apple-icon-144x144.png">
</head>
<body>
<!-- header -->
<header id="mainHeader" class="clearfix">
  <div class="navbar navbar-fixed-top">
    <div class="navbar-inner">
      <div class="container"> <a href="index.html" class="brand"><img src="images/ofbiz_logo.png" alt="Apache OFBiz Logo"/></a>
        <nav id="mainMenu" class="clearfix">
          <ul>
            <li><a href="index.html" class="firstLevel">Home</a></li>
            <li><a href="#" class="firstLevel">Getting Started</a>
              <ul>
                <li><a href="developers.html" class="">Developers</a></li>
                <li><a href="business-users.html" class="last">Business Users</a></li>
              </ul>
            </li>
            <li><a href="#" class="firstLevel">News</a>
              <ul>
                <li><a href="//twitter.com/apacheofbiz" target="external">Twitter</a></li>
                <li><a href="//blogs.apache.org/ofbiz/" target="external" class="last">Blog</a></li>
              </ul>
            </li>
            <li><a href="#" class="firstLevel">Documentation</a>
              <ul>
                <li><a href="//cwiki.apache.org/confluence/display/OFBIZ/Documentation#Documentation-End-UserDocumentation" target="external" class="">User Documentation</a></li>
                <li><a href="//cwiki.apache.org/confluence/display/OFBIZ/Technical+Documentation" target="external" class="">Technical Documentation</a></li>
                <li><a href="//cwiki.apache.org/confluence/display/OFBIZ/Home" target="external" class="">Wiki</a></li>
                <li><a href="//ci.apache.org/projects/ofbiz/site/javadocs/" target="external" class="last">API Reference</a></li>
              </ul>
            </li>
            <li><a href="#" class="firstLevel">Community</a>
              <ul>
                <li><a href="getting-involved.html">Getting Involved</a></li>                
                <li><a href="mailing-lists.html">Mailing Lists</a></li>
                <li><a href="source-repositories.html">Source Repository</a></li>
                <li><a href="download.html">Downloads</a></li>
                <li><a href="//issues.apache.org/jira/browse/OFBIZ/?selectedTab=com.atlassian.jira.jira-projects-plugin:summary-panel" target="external" >Issue Tracker</a></li>
                <li><a href="faqs.html" class="last">FAQ</a></li>
              </ul>
            </li>
            <li><a href="ofbiz-demos.html" class="firstLevel">Demos</a></li>
		  <li>
		    <a href="//twitter.com/ApacheOfbiz" class="icon-twitter-bird socialIcon tips"
		      target="external" title="follow us on Twitter"><span>twitter</span></a>
		  </li>
		  <li><a href="//www.youtube.com/user/ofbiz" class="icon-play socialIcon tips"  title="follow us on Youtube"><span>Youtube</span></a></li>
		  <li><a href="//www.facebook.com/Apache-OFBiz-1478219232210477/?ref=page_internal" class="icon-facebook socialIcon tips"  title="follow us on Facebook"><span>facebook</span></a></li>
		  <!--<li><a href="#" class="icon-rss socialIcon tips"  title="Our rss feed"><span>rss feed</span></a></li>         
		  <li><a href="#" class="icon-gplus socialIcon tips"  title="follow us on Google +"><span>google +</span></a></li>
		  <li><a href="#" class="icon-instagram socialIcon tips"  title="follow us on Instagram"><span>instagram</span></a></li>
		  <li><a href="#" class="icon-linkedin socialIcon tips"  title="follow us on Linkedin"><span>linkedin</span></a></li>
		  <li><a href="#" class="icon-pinterest-circled socialIcon tips"  title="follow us on Pinterest"><span>Pinterest</span></a></li>-->
          </ul>
        </nav>
      </div>
    </div>
  </div>
</header>
<!-- header -->
<!-- globalWrapper -->
<div id="globalWrapper">
   
  <!-- page content -->
 <section id="content" class="fullWidth">
    <header class="headerPage">
      <div class="container clearfix">
        <div class="row">
          <h1 class="span8">Getting Involved</h1>
      <div class="span4" id="navTrail"> <a href="index.html" class="homeLink">home</a><span>/</span><a href="#">Community</a><span>/</span><span class="current">Getting Involved</span> </div>
        </div>
      </div>
    </header>
  <section id="content" class="features" >
    <div class="slice clearfix">
      <div class="container">
        <div class="row ">
          <aside class="span2 PortfolioStickyMenu" id="sidebar">
            <ul  id="subnav" class="nav nav-stacked sidenav scrollspyNav">
              <li> <a href="#GInvIntro"> Introduction </a> </li>
           <li> <a href="#GInvWho"> Who Are We Looking For? </a> </li>
              <li> <a href="#GInvWhat"> Find Out What's Happening</a> </li>
         <li> <a href="#GInvFindBugs"> Reporting Bugs </a> </li>
              <li> <a href="#GInvCode"> Contibuting Code and Bug Fixes </a> </li>
         <li> <a href="#GInvDocs"> Contributing Documentation </a> </li>
          </ul>
          </aside>
          <div class="span10">
            <section  id="GInvIntro" class="slice row clearfix">
              <div class="span10">
                <h2>Introduction</h2>
                <div class="divider"><span></span></div>
    <p>Getting involved with the Apache OFBiz Community is <strong>easy!</strong></p>
    <p>Apache OFBiz is an open source community project governed by rules and <a href="//apache.org/foundation/policies/conduct.html" target="external">Code of Conduct</a> of <a href="//apache.org/" target="external">the Apache Software Foundation.</a> All Apache projects value key concepts such as community, consensus, openness and transparency.</p>
    <p>A popular Apache mantra is <strong>"Community over Code"</strong> meaning that being able to work and collaborate as a community is more important than producing code</p>
    <p>The Apache OFBiz source code is free, open source and provided under the <a href="//apache.org/licenses/">Apache Licence.</a> It is also easily accessible from the Apache source code repository. The project mailing lists contain all project releated discussions and decisions. </p>
    </div>
            </section> 

      <section  id="GInvWho" class="slice row clearfix">
              <div class="span10">
                <h2>Who Are We Looking For?</h2>
                <div class="divider"><span></span></div>
    <p><strong>We are looking for you!</strong></p>
     <p>We welcome participation from anyone willing to work with us <a href="//www.apache.org/foundation/how-it-works.html" target="external">the Apache Way</a> and make a contribution to the project.</p>
    <h3>We welcome non-developers!</h3>
      <p>Don't worry if you are not a developer. You don't have to be a developer to contribute to the project.In fact we are always looking for a range of contributors including anyone that wants to help out with documentation, translations, testing tasks and UX experience design. </p>
    <p><strong>Perhaps you are one of our OFBiz users? </strong> That's good too. You can help us by telling us about features you like (or don't like!) plus any new improvements that you'd like to see. So you see there are quite a few ways that non developers can help and contribute to improving OFBiz. </p>
    <h3>Developers welcome too!</h3>
      <p>Apache OFBiz is built on Java. If you are a developer or want to become one then you can help by  <a href="//cwiki.apache.org/confluence/display/OFBIZ/OFBiz+Tutorial+-+A+Beginners+Development+Guide" target="external">getting familiar with the OFBiz framework</a> and;
    <ul class="iconsList">
                  <li><i class="icon-pin"></i> providing patches for any bugs you find</li>
      <li><i class="icon-pin"></i> pick up and work on any of our <a href="//issues.apache.org/jira/projects/OFBIZ/issues/OFBIZ-6066?filter=allopenissues" target="external">open issues</a> </li>
    </ul>
    <p>If your company uses Apache OFBiz then please consider contributing back any functionality you think could help benefit our community. </p>

              </div> 
            </section>

       <section  id="GInvWhat" class="slice row clearfix">
              <div class="span10">
                <h2>Find Out What's Happening</h2>
                <div class="divider"><span></span></div>
                <p>To find out what is happening on the project, please subscribe to our mailing lists.</p>
    <p> Our <strong>dev@ofbiz.apache.org mailing list </strong> is where additions or changes to OFBiz are discussed. The list is open to everyone and all are encouraged to give their feedback and opinions of anything discussed.</p>
    <p>Our <strong>user@ofbiz.apache.org mailing list</strong> is for our users. Use this list to ask questions and get advice on setting up OFBiz and also if you are an end-user interested in helping other OFBiz users.</p>
    <p>Our <a href="mailing-lists.html">mailing lists </a> are also a great place for you to introduce yourself and join our community.</p>

        </div>
            </section>

     <section  id="GInvFindBugs" class="slice row clearfix">
              <div class="span10">
                <h2>Reporting Bugs</h2>
                <div class="divider"><span></span></div>
                <p>All the bugs that we know about are recorded in our JIRA issue tracking system. Before creating a new issue, please check that the same bug hasn't already been reported. If it hasn't been reported then please create a new Jira issue. It is very important that you include as much detail as possible so that someone else can reproduce the bug easily. Our Jira system will automatically email our notifications list where someone can take a look at it and investigate. </p>
        </div>
            </section>

      <section  id="GInvCode" class="slice row clearfix">
              <div class="span10">
                <h2>Contributing Code and Bug Fixes</h2>
                <div class="divider"><span></span></div>
                <p>As an Apache open source project, we take the legality of code seriously and we don't want people contributing code that they don't own or a 3rd party having a legal claim on our project. This is why we ask all <a href="//cwiki.apache.org/confluence/display/OFBIZ/Apache+OFBiz+Contributors" target="external">OFBiz contributors </a> to complete an Individual Contributor Licence Agreement (ICLA)</p>
     <h3>Code Changes</h3>
    <p>If you are interested in contributing new code then you can submit patches to the project via <a href="//issues.apache.org/jira/projects/OFBIZ/summary" target="external">our JIRA Issue Tracker</a>
    <ul class="iconsList">
                  <li><i class="icon-pin"></i> Create a new issue that describes what the code you are contributing does and;</li>
      <li><i class="icon-pin"></i> Upload a .patch file with your code changes  </li>
    </ul>

     <h3>Fixing Bugs</h3>
                <p>Bugs happen and you might see one and know how to fix it.
    <ul class="iconsList">
                  <li><i class="icon-pin"></i> Check our <a href="//issues.apache.org/jira/projects/OFBIZ/summary" target="external">our JIRA Issue Tracker</a> as the bug may have already been reported</li>
       <li><i class="icon-pin"></i> If it is a new bug then please create a new <a href="//issues.apache.org/jira/projects/OFBIZ/summary" target="external">our JIRA Issue</a> </li>
      <li><i class="icon-pin"></i> Upload your patch  </li>
    </ul>
     <p>All submitted patches will be reviewed by our volunteers and if it meets the project standard, will be integrated into our codebase.</p>
          </div>
            </section>
            
      <section  id="GInvDocs" class="slice row clearfix">
              <div class="span10">
                <h2>Contributing Documentation</h2>
                <div class="divider"><span></span></div>
                <p>If you are ready to help us document code, provide tips and trick or anything else that is not coding, then we have a WIKI that allows community contributions. Simply let us know on the <strong>user@ofbiz.apache.org</strong> mailing list that you want to become a contributor.</p>
     <p><strong>PLEASE NOTE:</strong> You will need to complete an Individual Contributor Licence Agreement (ICLA).</p>
              </div>
            </section>

           

          </div>
        </div>
      </div>
    </div>
   </section>
 </section>
  <!-- page content -->
 
<!-- footer -->
<footer class="footer1">
  <div class="container" id="footer">
    <div class="row">
      <div class="span6 timelineWidget">
        <h2>Latest tweets</h2>
        <!--
        <div class="divider"><span></span></div>
        <ul class="socialNetwork nav">
          <li>
            <a href="//twitter.com/ApacheOfbiz" class="icon-twitter-bird socialIcon tips"
              target="external" title="follow us on Twitter"><span>twitter</span></a>
          </li>
          <li><a href="//www.youtube.com/user/ofbiz" class="icon-play socialIcon tips"  title="follow us on Youtube"><span>Youtube</span></a></li>
          <li><a href="//www.facebook.com/Apache-OFBiz-1478219232210477/?ref=page_internal" class="icon-facebook socialIcon tips"  title="follow us on Facebook"><span>facebook</span></a></li>
          <li><a href="#" class="icon-rss socialIcon tips"  title="Our rss feed"><span>rss feed</span></a></li>
          <li><a href="#" class="icon-gplus socialIcon tips"  title="follow us on Google +"><span>google +</span></a></li>
          <li><a href="#" class="icon-instagram socialIcon tips"  title="follow us on Instagram"><span>instagram</span></a></li>
          <li><a href="#" class="icon-linkedin socialIcon tips"  title="follow us on Linkedin"><span>linkedin</span></a></li>
          <li><a href="#" class="icon-pinterest-circled socialIcon tips"  title="follow us on Pinterest"><span>Pinterest</span></a></li>
        </ul>
        -->
        <div id="twitterFrame"> <a class="twitter-timeline" href="//twitter.com/ApacheOfbiz?height=250" data-widget-id="588661945194192896"  data-tweet-limit="2" data-theme="dark" data-chrome="nofooter noheader transparent" >Tweets by @ApacheOfbiz</a>
          <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
        </div>
      </div>
      <div class="span3 contactWidget">
        <h2>Contact Community</h2>
        <div class="divider"><span></span></div>
        <ul>
          <li><a href="mailing-lists.html">Mailing Lists</a></li>
          <li><a href="source-repositories.html">Source Repository (Git)</a></li>
          <li><a href="//issues.apache.org/jira/browse/OFBIZ" target="external">Issue Tracker (Jira)</a></li>
          <li><a href="//www.youtube.com/user/ofbiz" target="external">OFBiz Youtube Channel</a></li>
          <li><a href="//vimeo.com/channels/apacheofbiz" target="external">OFBiz Vimeo Channel</a></li>
          <li>
            <a href="//s.apache.org/ofbiz-slack-channel" target="external">OFBiz Chat</a><br/>
            <span class="footer-note">
              Note: To chat with users and developers of Apache OFBiz.
              <br>Please create a Slack account using <a href="//s.apache.org/slack-invite" target="external">this invite link</a> and
              <a href="//s.apache.org/ofbiz-slack-channel" target="external">join the <b>#ofbiz channel</b>.</a>
              Please do <b>not</b> ask OFBiz questions in the #general channel.
            </span>
          </li>
        </ul>
      </div>
      <div class="span3 sociallWidget">
        <h2>ASF Information</h2>
        <div class="divider"><span></span></div>
        <ul>
          <li><a href="https://www.apache.org/foundation/" target="external">Apache Software Foundation</a></li>
          <li><a href="https://www.apache.org/events/current-event" target="external">Events</a></li>
          <li><a href="https://www.apache.org/foundation/sponsorship.html" target="external">Sponsorship</a>
          		and <a href="https://www.apache.org/foundation/contributing.html" target="external">Donations</a>
          </li>
          <li><a href="https://www.apache.org/foundation/thanks.html" target="external">Thanks</a></li>
          <li><a href="https://ofbiz.apache.org/security.html">Security</a></li>
          <li><a href="https://www.apache.org/licenses/" target="external">License</a></li>
        </ul>
      </div>
    </div>
  </div>
</footer>
<footer class="footer2" id="footerRights">
  <div class="container">
    <div class="row">
      <div class="span12">
        <p>
          Copyright © 2020 The Apache Software Foundation.
          <a href="https://www.apache.org/licenses/" target="external">Licensed under the  Apache License, Version 2.0</a>.<br/>
          Apache OFBiz, OFBiz, the project logo and the Apache feather logo are trademarks of <a href="https://www.apache.org/" target="external">The Apache Software Foundation.</a>
        </p>
      </div>
    </div>
  </div>
</footer>
<!-- footer -->
</div>
<!-- globalWrapper -->
<script type="text/javascript" src="js/plugins/respond/respond.min.js"></script>
<script type="text/javascript" src="js/jquery-1.8.2.min.js"></script>
<script type="text/javascript" src="js/plugins/jquery-ui/jquery-ui-1.8.23.custom.min.js"></script>
<!-- third party plugins  -->
<script type="text/javascript" src="bootstrap/js/bootstrap.js"></script>
<script type="text/javascript" src="bootstrap/js/bootstrap-carousel.js"></script>
<script type="text/javascript" src="js/plugins/easing/jquery.easing.1.3.js"></script>
<script type="text/javascript" src="js/plugins/pretty-photo/js/jquery.prettyPhoto.js"></script>
<script type="text/javascript" src="js/plugins/hoverdir/jquery.hoverdir.js"></script>
<!-- jQuery KenBurn Slider  -->
<script type="text/javascript" src="js/plugins/rs-plugin/js/jquery.themepunch.plugins.min.js"></script>
<script type="text/javascript" src="js/plugins/rs-plugin/js/jquery.themepunch.revolution.min.js"></script>
<!-- Custom  -->
<script type="text/javascript" src="js/custom.js"></script>
<script type="text/javascript">
    var _gaq = _gaq || [];
    _gaq.push(['_setAccount', UA]);
    _gaq.push(['_trackPageview']);

    (function() {
        var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
    })();
</script>
</body>
</html>
