title: Welcome to The Apache Software Foundation!
bodytag: id="home"

<section>
  <div class="container">
     <div class="row">
<div class="col-sm-12 text-center">
     <h1 class="h3">The World's Largest Open Source Foundation</h1>
</div>
<div class="col-sm-4 col-sm-offset-2">

- All volunteer community
- [{ code_lines }]+ lines of code in&nbsp;stewardship
- [{ code_changed }]+ lines of code&nbsp;changed
- [{ code_commits }]+ code commits
- [{ asf_members }]+ individual ASF&nbsp;Members
- [{ asf_committers }]+ Apache Committers
- [{ asf_contributors }]+ code contributors
- [{ asf_people }]+ people involved in our&nbsp;communities

</div>
<div class="col-sm-4">

- [{ com_initiatives }]+ Projects and Initiatives
- [{ com_projects }]+ Top-Level Projects
- [{ com_podlings }] podlings in the Apache&nbsp;Incubator
- [{ com_downloads }] source code downloads from Apache&nbsp;mirrors
- [{ com_emails }]+ emails across [{ com_mailinglists }]+ mailing&nbsp;lists
- Web requests received from every Internet-connected country on the&nbsp;planet
- [{ com_pageviews }]+ weekly page views across [[]apache.org](/)

</div>
<div class="col-sm-8 col-sm-offset-2 text-center">

[[]**$22B+ worth of Apache Open Source software products are made available to the public-at-large at 100% no cost, and benefit billions of users around the&nbsp;world.**](https://s.apache.org/FY2020AnnualReport-PR)

[[]**Make a one-time or recurring&nbsp;donation**](https://donate.apache.org/) **|** [[]**Corporate Support and ASF&nbsp;Sponsorship**](/foundation/contributing.html)


</div>
   </div>
<div id="video" class="row" style="margin-bottom: 30px;">
  <script>
function swapVideo(videoUrl, title) {
  const videoPlayer = document.getElementById("trillionsVideos");
  videoPlayer.src = videoUrl;
  videoPlayer.title= title;
}
</script>
<div class="col-sm-8 col-sm-offset-2" style="padding-top: 30px;">
   <div class="video-responsive">
<iframe id="trillionsVideos" title="Trillions and Trillions" width="560" height="315" src="https://www.youtube.com/embed/JUt2nb0mgwg?rel=0" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
   </div>
</div>
</div>
<div id="video-thumbnails" class="row">
  <div class="col-xs-6 col-sm-2 col-sm-offset-2">
   <button onclick="swapVideo('https://www.youtube.com/embed/YM5dLvNatRs?autoplay=1&rel=0', 'Why Apache?')"><img class="img-responsive" src="img/trillions-and-trillions/why-apache-thumbail.jpg" alt="Why Apache?" /></button>
  </div>
  <div class="col-xs-6 col-sm-2">
    <button onclick="swapVideo('https://www.youtube.com/embed/nXtIti9jMFI?autoplay=1&rel=0', 'Apache Everywhere')"><img class="img-responsive" src="img/trillions-and-trillions/apache-everywhere-thumbnail.jpg" alt="Apache Everywhere" /></button>
  </div>
  <div class="col-xs-6 col-sm-2">
    <button onclick="swapVideo('https://www.youtube.com/embed/JUt2nb0mgwg?autoplay=1&rel=0', 'Trillions and Trillions Served')"><img class="img-responsive" src="img/trillions-and-trillions/trillions-and-trillions-thumbnail.jpg" alt="Trillions and Trillions Served" /></button>
  </div>
  <div class="col-xs-6 col-sm-2">
    <button onclick="swapVideo('https://www.youtube.com/embed/qkvqJaX4S50?autoplay=1&rel=0', 'Apache Innovation')"><img class="img-responsive" src="img/trillions-and-trillions/apache-innovation-thumbnail.jpg" alt="Apache Innovation" /></button>
  </div>
  <div class="col-xs-12 text-center">
    <a href="https://www.youtube.com/channel/UCLDJ_V9KUOdOFSbDvPfGBxw" target="_blank">View additional videos</a>
  </div>
</div>
</div>
</section>
<!-- Quotes -->
<section id="apacheQuotes" class="bg-primary">
	 <div class="container">
	      <!-- Slideshow container -->
	      <div class="slideshow-container">
	      	   <!-- Full-width slides/quotes -->
		   <div class="mySlides">
		   	<blockquote class="text-center">
				    <p>"The most popular open source software is&nbsp;Apache&hellip;"</p>
				    <footer>DZone, <cite title="What Open Source Software Do You Use?">“What Open Source Software Do You&nbsp;Use?”</cite></footer>
			</blockquote>
	      	   </div>
		   <div class="mySlides">
		   	<blockquote class="text-center">
				    <p>"Apache-style licensing may yield more adoption and&nbsp;money."</p>
				    <footer>Matt Asay, <cite title="c|net">c|net</cite></footer>
		        </blockquote>
		   </div>
		   <div class="mySlides">
		   	<blockquote class="text-center">
				    <p>"Apache&rsquo;s 'survival of the fittest' ethos breeds better&nbsp;software"</p>
				    <footer><cite title="ZDNet">ZDNet</cite></footer>
			</blockquote>
		   </div>
		   <!-- Next/prev buttons -->
		   <a class="prev" onclick="plusSlides(-1)">&#10094;</a>
		   <a class="next" onclick="plusSlides(1)">&#10095;</a>
	      </div>
	      <!-- Dots/bullets/indicators -->
	      <div class="dot-container">
	      	   <span class="dot" onclick="currentSlide(1)"></span>
		   <span class="dot" onclick="currentSlide(2)"></span>
		   <span class="dot" onclick="currentSlide(3)"></span>
	      </div>
	      <!-- END SLIDESHOW CONTAINER -->
	 </div>
</section>
<!-- Updates Section    -->
<section id="news">
  <div class="container">
       <h2 class="no-btm-margin">Latest News</h2>
 <p>Keep up with the ASF's news and announcements by subscribing to the 
   <a href="/foundation/mailinglists.html#foundation-announce">Apache Announcements List</a>, as
     well as following the <a href="https://blogs.apache.org/foundation/">Foundation Blog</a>, 
     <a href="https://blogs.apache.org/foundation/category/Newsletter">Apache Weekly News Round-Ups</a>, 
     <a href="https://twitter.com/TheASF">@TheASF on Twitter</a>, 
     <a href="https://www.linkedin.com/company/the-apache-software-foundation/">The Apache Software Foundation on LinkedIn</a>,
     	on the ASF's <a href="https://www.youtube.com/c/TheApacheFoundation/">YouTube channel</a>, and
	on <a href="https://feathercast.apache.org/">Feathercast</a>, the voice of the ASF.</p>
 <!-- gm -->
     <div class="updates">
       <article class="card">
         <div class="content">
           <span class="label label-danger">Twitter</span>
<div>

[[]@TheASF](https://twitter.com/TheASF)[for twitter] [twitter.text][end]

</div>
         </div>
         <a class="continue" href="https://twitter.com/TheASF">Continue Reading&nbsp;&rarr;</a>
       </article>
       <article class="card">
         <div class="content">
           <span class="label label-danger">Foundation Blog</span>
               [for foundation]<h5><a class="entryTitle" href="[foundation.href]">[foundation.title]</a></h5>
[end]         </div>
         <a class="continue" href="https://blogs.apache.org/foundation">Continue Reading&nbsp;&rarr;</a>
       </article>
        <article class="card">
         <div class="content">
           <span class="label label-danger">Project Blogs</span>
               [for planet]<h5><a class="entryTitle" href="[planet.href]">[planet.title]</a></h5>
[end]         </div>
         <a class="continue" href="https://blogs.apache.org">Continue Reading&nbsp;&rarr;</a>
       </article>
        <article class="card">
         <div class="content">
           <span class="label label-danger">Conferences</span>
               [for conferences]<h5><a class="entryTitle" href="[conferences.href]">[conferences.title]</a></h5>
[end]         </div>
         <a class="continue" href="https://blogs.apache.org/conferences">Continue Reading&nbsp;&rarr;</a>
       </article>
     </div>
 <!-- /gm -->
   </div>
</section>
<!-- / Updates Section    -->

<!-- Highlights -->
<section class="bg-gray ">
	<div class="container">
		<div class="highlights">
			<article class="card">
				<a href="/foundation/reports.html">
					<img class="img-responsive" src="img/2021-report.jpg" alt="Apache Annual Report" />
					<div class="card-content">
						<h4>Reports</h4>
						<p>Official ASF reports and statements,
						 including Quarterly and Annual Reports, Vision Statement,
						 "Apache is Open", 5-Year Strategic Plan, and more.</p>
					</div>
				</a>
			</article>
			<article class="card">
				<a href="http://community.apache.org/">
					<img class="img-responsive" src="img/community.jpg" alt="The Apache Community" />
					<div class="card-content">
						<h4>Community</h4>
						<p>Guidance and mentoring for those interested in participating in Apache projects and their communities.
							From Google Summer of Code to community events, get started here to learn how to become an
							Apache contributor.</p>
					</div>
				</a>
			</article>
			<article class="card">
				<a href="/theapacheway/index.html">
					<img class="img-responsive" src="img/the-apache-way.jpg" alt="The Apache Way" />
					<div class="card-content">
						<h4>The Apache Way</h4>
						<p>Our consensus-driven, open development process was refined over the past 20 years and produced some of
							the largest and longest-lived Open Source projects that have revolutionized the industry.</p>
					</div>
				</a>
			</article>
			<article class="card">
				<a href="https://apachecon.com/">
					<img class="img-responsive" src="img/ApacheCon.jpg" alt="ApacheCon" />
					<div class="card-content">
						<h4>Conferences</h4>
						<p>"Tomorrow's Technology Today" since 1998. Intentionally intimate, offering unparalleled educational,
							networking, and collaboration opportunities.</p>
					</div>
				</a>
			</article>
		</div>
	</div>
</section>
<!-- End Highlights-->
 
<!-- Apache Statements Section -->
<section class="bg-info">
<div class="container">

The ASF develops, shepherds, and incubates hundreds of freely-available, enterprise-grade projects that serve as the
backbone for some of the most visible and widely used applications in computing today. Through the ASF's merit-based
process known as [[]"The Apache Way,"](/theapacheway) more than [[][{ asf_members_rounded }] individual volunteer Members and [{ asf_committers }]+ code
Committers](http://community.zones.apache.org/map.html) across six continents successfully collaborate on innovations
in Artificial Intelligence and Deep Learning, Big Data, Build Management, Cloud Computing, Content Management, DevOps,
IoT and Edge Computing, Mobile, Servers, and Web Frameworks, [[]among other categories](https://projects.apache.org/projects.html?category).

**APACHE IS &hellip;**

**OPEN:** The Apache Software Foundation provides support for [{ com_initiatives }]+ Apache Projects and their Communities,
furthering its mission of providing Open Source software for the public&nbsp;good.

**INNOVATION:** Apache Projects are defined by [[]collaborative, consensus-based processes](/theapacheway), an open,
pragmatic software license and a desire to create high quality software that leads the way in its&nbsp;field.

**COMMUNITY:** We are a [[]community of developers and users](http://community.apache.org/) of enterprise-grade,
Open Source Apache projects used in every Internet-connected country on the&nbsp;planet.

</div>
</section>
<!-- / Apache Statements Section -->
<!-- was Apachecon etc here -->
<!-- Apache Featured Projects Section    -->
<section class="bg-gray">
  <div class="container">
    <div class="row">
      <div class="col-md-12">
        <h2>Apache Projects</h2>
        <p>The all-volunteer ASF develops, stewards, and incubates more than 350 Open Source projects and initiatives that cover a wide range of technologies. 
          From Accumulo to Zookeeper, if you are looking for a rewarding experience in Open Source and industry leading software, chances are you are going to find it here.
          <a href="/foundation/press/kit/#powerby">Are you powered by Apache?</a>
        </p>
        <!-- Featured Projects Section    -->
        <div class="container">
          <div class="row">
            <h3>Featured Project<span class="visible-md-inline visible-lg-inline">s</span></h3>     
            <div class="col-md-3 col-sm-12">
              <!-- tabs left -->
              <div class="tabbable tabs-left visible-md-inline visible-lg-inline">
                <ul class="nav nav-tabs">
                  [for featured_projs]<li [if-index featured_projs first]class="active"[end]>
                      <a href="#[featured_projs.key_id]" data-toggle="tab">[featured_projs.display_name]</a>
                    </li>[end]
                </ul>
              </div>
            </div>
            <div class="col-md-9 col-sm-12">
              <div class="tab-content">
                [for featured_projs]<div class="tab-pane fade in [if-index featured_projs first]active[end]" id="[featured_projs.key_id]">
                    <div class="row">
                      <div class="col-sm-2">
                        <img class="img-responsive center-block" src="[featured_projs.logo]" alt="Logo">
                      </div>
                      <div class="col-sm-10">
                        <h4 id="featured-project-[featured_projs.key_id]" class="no-btm-margin"><a href="[featured_projs.site]">[featured_projs.display_name]</a></h4>
                        <p>[featured_projs.description]</p>
                        <a class="btn btn-default btn-sm" href="[featured_projs.site]" role="button">Learn More...</a>
                      </div>
                    </div>
                  </div>[end]
              </div><!-- /tab-content -->
            </div><!-- /container -->
          </div><!-- /tabs -->
        </div><!-- /column -->
<!-- / Featured Projects Section    -->
<!-- Incubator Projects Section    -->
        <div class="container">
          <div class="row">
            <h3>Incubating Project<span class="visible-md-inline visible-lg-inline">s</span></h3>
        <p>The Apache Incubator is the primary entry path into The Apache Software Foundation for projects and their communities wishing to become part of the Foundation’s efforts. 
        All code donations from external organisations and existing external projects seeking to join the Apache community enter through the Incubator.</p>
            <div class="col-md-3 col-sm-12">
              <!-- tabs left -->
              <div class="tabbable tabs-left visible-md-inline visible-lg-inline">
                <ul class="nav nav-tabs">
                  [for featured_pods]<li [if-index featured_pods first]class="active"[end]>
                      <a href="#[featured_pods.key_id]" data-toggle="tab">[featured_pods.name]</a>
                    </li>[end]
                </ul>
              </div>
            </div>
            <div class="col-md-9 col-sm-12">
              <div class="tab-content">
                [for featured_pods]<div class="tab-pane fade in [if-index featured_pods first]active[end]" id="[featured_pods.key_id]">
                    <div class="row">
                      <div class="col-sm-2">
                        <img class="img-responsive center-block" src="[featured_pods.logo]" alt="Logo">
                      </div>
                      <div class="col-sm-10">
                        <h4 id="incubating-project-[featured_pods.key_id]" class="no-btm-margin"><a href="[featured_pods.homepage]">[featured_pods.name]</a></h4>
                        <p>[featured_pods.description]</p>
                        <a class="btn btn-default btn-sm" href="[featured_pods.homepage]" role="button">Learn More...</a>
                      </div>
                    </div>
                  </div>[end]
              </div><!-- /tab-content -->
            </div><!-- /container -->
          </div><!-- /tabs -->
        </div><!-- /column -->
  <!-- / Incubator Projects Section    -->
      </div>
    </div>
  </div>
</section>
<!-- / Apache Featured Projects Section -->
<!-- Apache Projects List -->
	<section id="projects-list">
		<div class="container">
			<div class="row">
				<div class="col-sm-12">
					<h2>Apache Project List</h2>
					<!-- not consistent: projects (with sub-projects) or TLPs?
             by category = projects,
             but other = Top Level Projects only) -->
				</div>
				<div class="col-sm-2" id="by_category">
					<!-- id for eventual use by whimsy; do not move -->
					<ul class="list-unstyled">
						<li><a href="https://projects.apache.org/">Overview</a></li>
						<li><a href="https://projects.apache.org/projects.html">All Projects</a></li>
					</ul>
					<h4>By Category</h4>
					<ul class="list-unstyled">
						<li><a href="http://attic.apache.org/" title="A home for dormant projects">Attic</a></li>
						<li><a href="https://projects.apache.org/projects.html?category#big-data">Big Data</a></li>
						<li><a href="https://projects.apache.org/projects.html?category#build-management">Build Management</a></li>
						<li><a href="https://projects.apache.org/projects.html?category#cloud">Cloud</a></li>
						<li><a href="https://projects.apache.org/projects.html?category#content">Content</a></li>
						<li><a href="https://projects.apache.org/projects.html?category#database">Databases</a></li>
						<li><a href="https://projects.apache.org/projects.html?category#ftp">FTP</a></li>
						<li><a href="https://projects.apache.org/projects.html?category#graphics">Graphics</a></li>
						<li><a href="https://projects.apache.org/projects.html?category#http">HTTP</a></li>
						<li><a href="https://projects.apache.org/projects.html?category#httpd-module">HTTP-module</a></li>
						<li><a href="http://incubator.apache.org/"
								title="Entry path for projects and codebases wishing to become part of the Foundation's efforts">Incubating</a>
						</li>
						<li><a href="https://projects.apache.org/projects.html?category#javaee">JavaEE</a></li>
						<li><a href="https://projects.apache.org/projects.html?category#library">Libraries</a></li>
						<li><a href="https://projects.apache.org/projects.html?category#mail">Mail</a></li>
						<li><a href="https://projects.apache.org/projects.html?category#mobile">Mobile</a></li>
						<li><a href="https://projects.apache.org/projects.html?category#network-client">Network-client</a></li>
						<li><a href="https://projects.apache.org/projects.html?category#network-server">Network-server</a></li>
						<li><a href="https://projects.apache.org/projects.html?category#osgi">OSGi</a></li>
						<li><a href="https://projects.apache.org/projects.html?category#regexp">RegExp</a></li>
						<li><a href="https://projects.apache.org/projects.html?category#retired">Retired</a></li>
						<li><a href="https://projects.apache.org/projects.html?category#search">Search</a></li>
						<li><a href="https://projects.apache.org/projects.html?category#security">Security</a></li>
						<li><a href="https://projects.apache.org/projects.html?category#sql">SQL</a></li>
						<li><a href="https://projects.apache.org/projects.html?category#testing">Testing</a></li>
						<li><a href="https://projects.apache.org/projects.html?category#virtual-machine">Virtual-machine</a></li>
						<li><a href="https://projects.apache.org/projects.html?category#web-framework">Web-framework</a></li>
						<li><a href="https://projects.apache.org/projects.html?category#xml">XML</a></li>
					</ul>
				</div>
				<div class="col-sm-10">
					<div class="row">
						<div class="col-md-12" id="by_name">
							<!-- The project details are taken from committee_info.json (generated by Whimsy) -->
							<h4>By Name</h4>
							<div class="col-lg-4 col-sm-4">
								<div class="row">
									<div class="col-lg-6 col-md-12 border-right">
										<ul class="list-unstyled" style="margin-bottom: 0px;">
	    [for pl_0][is pl_0.letter pl_0.display_name]<li class="letter-header">[pl_0.letter][else]<li><a href="[pl_0.site]" title="[pl_0.description]">[pl_0.display_name]</a>[end]</li>
	    [end]</ul>
									</div>
									<div class="col-lg-6 col-md-12 border-right">
										<ul class="list-unstyled" style="margin-bottom: 0px;">
	    [for pl_1][is pl_1.letter pl_1.display_name]<li class="letter-header">[pl_1.letter][else]<li><a href="[pl_1.site]" title="[pl_1.description]">[pl_1.display_name]</a>[end]</li>
	    [end]</ul>
									</div>
								</div>
							</div>
							<div class="col-lg-4 col-sm-4">
								<div class="row">
									<div class="col-lg-6 col-md-12 border-right">
										<ul class="list-unstyled" style="margin-bottom: 0px;">
	    [for pl_2][is pl_2.letter pl_2.display_name]<li class="letter-header">[pl_2.letter][else]<li><a href="[pl_2.site]" title="[pl_2.description]">[pl_2.display_name]</a>[end]</li>
	    [end]</ul>
									</div>
									<div class="col-lg-6 col-md-12 border-right">
										<ul class="list-unstyled" style="margin-bottom: 0px;">
	    [for pl_3][is pl_3.letter pl_3.display_name]<li class="letter-header">[pl_3.letter][else]<li><a href="[pl_3.site]" title="[pl_3.description]">[pl_3.display_name]</a>[end]</li>
	    [end]</ul>
									</div>
								</div>
							</div>
							<div class="col-lg-4 col-sm-4">
								<div class="row">
									<div class="col-lg-6 col-md-12 border-right">
										<ul class="list-unstyled" style="margin-bottom: 0px;">
	    [for pl_4][is pl_4.letter pl_4.display_name]<li class="letter-header">[pl_4.letter][else]<li><a href="[pl_4.site]" title="[pl_4.description]">[pl_4.display_name]</a>[end]</li>
	    [end]</ul>
									</div>
									<div class="col-lg-6 col-md-12">
										<ul class="list-unstyled" style="margin-bottom: 0px;">
	    [for pl_5][is pl_5.letter pl_5.display_name]<li class="letter-header">[pl_5.letter][else]<li><a href="[pl_5.site]" title="[pl_5.description]">[pl_5.display_name]</a>[end]</li>
	    [end]</ul>
									</div>
								</div>
							</div>
						</div>
					</div>
				</div>
			</div>
		</div>
	</section>
<!-- / Projects List -->

