---
title: Community
---
<!-- 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. -->

<!-- <div id="map-canvas" style="width: 100%;"></div> -->

<section class="bf-tagline">
    <div class="container">
    	<div class="row">
        <br/>
	    	<h2>Join Our Community of Contributors!</h2>
        <p>The Apache Geode team welcomes contributors who want to support the Geode technology. Our community builds everything from this website, from the Geode code to documentation and best practices information.</p>

        <p>We especially welcome additions and corrections to the documentation, wiki, and website to improve the user experience. Bug reports and fixes and additions to the Apache Geode code are welcome. Helping users learn best practices also earns good karma in our community.</p>
		</div>
	</div>
</section>

<section class="bf-community">
    <div class="container">
    	<div class="row">
    	    <div class="col-md-12">
    	    	<h2 class="icns-envelope" id="mailing-lists"><span>Mailing-lists</span></h2>
			</div>
		</div>
		<div class="row">
	    	<div class="col-md-4">
	    		<h3>Users</h3>
	    		<p><em>Perfect if you build apps against Apache Geode or deploy Apache Geode, and a great place to start if you have a question.</em></p>
	    		<p>To subscribe, send a blank email to<br/><a href="mailto:user-subscribe@geode.apache.org">user-subscribe@geode.apache.org</a>.</p>
	    		<p>You can also <a href="http://markmail.org/search/?q=list%3Aorg.apache.geode.user+order%3Adate-backward">read the archives</a>.</p>
			</div>
	    	<div class="col-md-4">
	    		<h3>Dev</h3>
	    		<p><em>If you are building contributions and modifications to Apache Geode, this is the list for you.</em><p>
	    		<p>To subscribe, send a blank email to<br/><a href="mailto:dev-subscribe@geode.apache.org">dev-subscribe@geode.apache.org</a>.</p>
	    		<p>You can also <a href="http://markmail.org/search/?q=list%3Aorg.apache.geode.dev+order%3Adate-backward">read the archives</a>.</p>
			</div>
	    	<div class="col-md-4">
	    		<h3>Commits</h3>
	    		<p><em>This list receives an email whenever new code is contributed to Apache Geode.</em><p>
	    		<p>To subscribe, send a blank email to<br/><a href="mailto:commits-subscribe@geode.apache.org">commits-subscribe@geode.apache.org</a>.</p>
	    		<p>You can also <a href="http://markmail.org/search/?q=list%3Aorg.apache.geode.commits+order%3Adate-backward">read the archives</a>.</p>
			</div>
		</div>
	</div>
</section>

<section class="bf-community">
    <div class="container">
    	<div class="row">
    	    <div class="col-md-12" id="events">
    	    	<h2 class="icns-calendar"><span>Events</span></h2>
			</div>
		</div>
    <div class="row">
      <div class="col-md-4">
        <a  href="https://www.apache.org/events/current-event.html">
          <img src="https://www.apache.org/events/current-event-234x60.png"/>
        </a>
      </div>
    	<div class="col-md-4">
    	    	<h3>Watch this space for upcoming Apache Geode events!</h3>
              <p><i>Want to organize an event? Subscribe to the Apache Geode Users list by sending a blank email to<br/><a href="mailto:user-subscribe@geode.apache.org">user-subscribe@geode.apache.org</a>, then email the list with your event idea!</i>
              </p>
      </div>

    </div>
	</div>
</section>

<section class="bf-community">
    <div class="container">
    	<div class="row">
    	    <div class="col-md-12" id="live">
    	    	<h2 class="icns-chat"><span>Live Chat and Geode Clubhouse</span></h2>
			</div>
		</div>
		<div class="row">
      <div class="col-md-4">
        	<h3><a target="_blank" href="http://stackoverflow.com/search?q=Apache%20Geode">StackOverflow</a></h3>
        	<p>The Geode team is always ready to answer questions on <a href="http://stackoverflow.com/search?q=Apache%20Geode">StackOverflow</a><p>
      </div>
      <div class="col-md-4">
        	<h3><a target="_blank" href="https://www.youtube.com/channel/UCaY2q0UlWjAgEGL7uhCLs6A">Geode ClubHouse</a></h3>
        	<p>We meet periodically online for discussions around specific features, detailing internals and discuss on-going issues on JIRA at the Geode Clubhouse. All meetings are recorded and videos are available in our <a href="https://www.youtube.com/channel/UCaY2q0UlWjAgEGL7uhCLs6A">YouTube</a> channel.<p>
      </div>
	  </div>
</section>

<section class="bf-community">
    <div class="container">
    	<div class="row">
    	    <div class="col-md-12">
    	    	<h2 class="icns-briefcase" id="deployments"><span>Deployments</span></h2>
			</div>
		</div>
		<div class="row">
			<a href="#">
	    	    <div class="col-md-3">
	    	    	<h3>Your project!</h3>
	    	    	<p><p>
				</div>
			</a>
			<!-- <a href="#">
				<div class="col-md-3">
	    	    	<h3>Project ABC</h3>
	    	    	<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam finibus cursus est. Morbi consequat velit ac aliquet elementum. Vivamus gravida blandit accumsan. Mauris commodo consectetur velit, quis malesuada velit semper ac. Vivamus egestas massa et placerat rhoncus.<p>
				</div>
			</a> -->
			<div class="col-md-3">
				<h3>&nbsp;</h3>
    	    	<p><i>Want to be added to this list? <a href="mailto:user@geode.apache.org">Contact us!</a></i><p>
			</div>
		</div>
	</div>
</section>

<section class="bf-community committers">
    <div class="container">
    	<div class="row">
    	    <div class="col-md-12">
    	    	<h2 class="icns-group" id="committers"><span>Committers</span></h2>
			</div>
		</div>
		<div class="row">
      <br/>
			<div class="col-md-2">
        <li>Amey Barve</li>
        <li>Adib Saikali</li>
        <li>Alan Strait</li>
        <li>Amogh Shetkar</li>
        <li>Anil Gingade</li>
        <li>Anilkumar Gingade</li>
        <li>Anthony Baker</li>
        <li>Ashvin Agrawal</li>
        <li>Asif Shahid</li>
        <li>Avinash Dongre</li>
        <li>Barry Oglesby</li>
        <li>Ben Reser</li>
        <li>Bruce Schuchardt</li>
        <li>Bruce Szalwinski</li>
        <li>Catherine Johnson</li>
        <li>Chip Childers</li>
        <li>Christian Tzolov</li>
        <li>Dan Smith</li>
        <li>Darrel Schneider</li>
        <li>Dave Barnes</li>
        <li>Dave Muirhead</li>
        <li>David Yozie</li>
        <li>Deepak Dixit</li>
        <li>Dick Cavender</li>
        <li>Edin Zulich</li>
			</div>
			<div class="col-md-2">
        <li>Ernest Burghardt</li>
        <li>Eric Shu</li>
        <li>Galen O’Sullivan</li>
        <li>Gideon Low</li>
        <li>Greg Chase</li>
        <li>Hemant Bhanawat</li>
        <li>Henry Saputra</li>
        <li>Hitesh Khamesra</li>
        <li>Jacob Barrett</li>
        <li>Jags Ramnarayan</li>
        <li>Jan Iversen</li>
        <li>Jared Stewart</li>
        <li>Jason Huynh</li>
        <li>Jens Deppe</li>
        <li>Jianxia Chen</li>
        <li>Jinmei Liao</li>
        <li>Joey McAllister</li>
        <li>John Blum</li>
        <li>Justin Erenkrantz</li>
        <li>Karen Smoler Miller</li>
        <li>Ken Howe</li>
        <li>Ketan Deshpande</li>
        <li>Kevin Duling</li>
        <li>Kirk Lund</li>
			</div>
			<div class="col-md-2">
        <li>Kishor Bachhav</li>
        <li>Konstantin Boudnik</li>
        <li>Konstantin Ignatyev</li>
        <li>Lise Storc</li>
        <li>Luke Shannon</li>
        <li>Lyndon Adams</li>
        <li>Lynn Gallinat</li>
        <li>Lynn Hughes-Godfrey</li>
        <li>Mark Bretl</li>
        <li>Michael Schubert</li>
        <li>Mike Stolz</li>
        <li>Nabarun Nag</li>
        <li>Namrata Thanvi</li>
        <li>Neeraj Kumar</li>
        <li>Nilkanth Patel</li>
        <li>Nitin Lamba</li>
        <li>Qihong Chen</li>
        <li>Rahul Diyewar</li>
        <li>Randy May</li>
        <li>Roman Shaposhnik</li>
        <li>Sai Boorlagadda</li>
        <li>Severine Tymon</li>
        <li>Shatarupa Nandi</li>
        <li>Shirish Deshmukh</li>
			</div>
			<div class="col-md-2">
        <li>Sonal Agarwal</li>
        <li>Soubhik Chakraborty</li>
        <li>Sourabh Bansod</li>
        <li>Stephane Maldini</li>
        <li>Stuart Williams</li>
        <li>Sudhir Menon</li>
        <li>Sunil Jigyasu</li>
        <li>Supriya Pillai</li>
        <li>Suranjan Kumar</li>
        <li>Suyog Bhokare</li>
        <li>Swapnil Bawaskar</li>
        <li>Swati Sawant</li>
        <li>Tushar Khairnar</li>
        <li>Udo Kohlmeyer</li>
        <li>Vince Ford</li>
        <li>Vinesh Prasanna Manoharan</li>
        <li>Vivek Bhaskar</li>
        <li>Wes Williams</li>
        <li>William A. Rowe Jr.</li>
        <li>William Markito</li>
        <li>Will Schipp</li>
        <li>Xiaojian Zhou</li>
        <li>Yogesh Mahajan</li>
			</div>
      <div class="col-md-3">
        <h3>&nbsp;</h3>
            <p><i>Want to be added to this list? Join the community, contribute and <a href="mailto:dev@geode.apache.org">contact us!</a></i><p>
      </div>
		</div>
	</div>
</section>

<!-- <section class="bf-community tools">
    <div class="container">
    	<div class="row">
    	    <div class="col-md-12">
    	    	<h2 class="icns-tools" id="tools"><span>Tools</span></h2>
			</div>
		</div>
		 <div class="row">
			<div class="col-md-2 text-center">
				<a href="http://www.jetbrains.com/idea/" target="_blank"><img src="/img/intellij.png" /></a>
				<p>IntelliJ IDEA</p>
			</div>
			<div class="col-md-2 text-center">
				<a href="http://yourkit.com/" target="_blank"><img src="/img/yourkit.jpeg" /></a>
				<p>YourKit Java Profiler</p>
			</div>
		</div>
		These great companies have provided free product licenses to the Apache Geode team. We use these tools and love them.  Thank you!
	</div>
</section> -->
