<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <meta name="description" content="Home page of The Apache Software Foundation">
  <link rel="apple-touch-icon" sizes="57x57" href="/favicons/apple-touch-icon-57x57.png">
  <link rel="apple-touch-icon" sizes="60x60" href="/favicons/apple-touch-icon-60x60.png">
  <link rel="apple-touch-icon" sizes="72x72" href="/favicons/apple-touch-icon-72x72.png">
  <link rel="apple-touch-icon" sizes="76x76" href="/favicons/apple-touch-icon-76x76.png">
  <link rel="apple-touch-icon" sizes="114x114" href="/favicons/apple-touch-icon-114x114.png">
  <link rel="apple-touch-icon" sizes="120x120" href="/favicons/apple-touch-icon-120x120.png">
  <link rel="apple-touch-icon" sizes="144x144" href="/favicons/apple-touch-icon-144x144.png">
  <link rel="apple-touch-icon" sizes="152x152" href="/favicons/apple-touch-icon-152x152.png">
  <link rel="apple-touch-icon" sizes="180x180" href="/favicons/apple-touch-icon-180x180.png">
  <link rel="icon" type="image/png" href="/favicons/favicon-32x32.png" sizes="32x32">
  <link rel="icon" type="image/png" href="/favicons/favicon-194x194.png" sizes="194x194">
  <link rel="icon" type="image/png" href="/favicons/favicon-96x96.png" sizes="96x96">
  <link rel="icon" type="image/png" href="/favicons/android-chrome-192x192.png" sizes="192x192">
  <link rel="icon" type="image/png" href="/favicons/favicon-16x16.png" sizes="16x16">
  <link rel="manifest" href="/favicons/manifest.json">
  <link rel="shortcut icon" href="/favicons/favicon.ico">
  <meta name="msapplication-TileColor" content="#603cba">
  <meta name="msapplication-TileImage" content="/favicons/mstile-144x144.png">
  <meta name="msapplication-config" content="/favicons/browserconfig.xml">
  <meta name="theme-color" content="#282661">

  <title>Apache Download Mirrors</title>
  <link href="/css/Montserrat-300-600.css" rel="stylesheet">
  <link href="/css/min.bootstrap.css" rel="stylesheet">
  <link href="/css/styles.css" rel="stylesheet">
  <link href="/css/new-ui.css" rel="stylesheet">
  <style>
.headerlink {
  visibility: hidden;
}
dt:hover > .headerlink, p:hover > .headerlink, td:hover > .headerlink, h1:hover > .headerlink, h2:hover > .headerlink, h3:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink, h6:hover > .headerlink {
  visibility: visible
}  </style>

  <!-- pagefind search -->
  <link href="/_pagefind/pagefind-ui.css" rel="stylesheet">
  <script src="/_pagefind/pagefind-ui.js" type="text/javascript"></script>
  <script>
    window.addEventListener('DOMContentLoaded', (event) => {
        new PagefindUI({ element: "#pagefind-search" });
    });
    var pageTitle = 'Apache Download Mirrors';
    if(pageTitle === '404'){
      window.addEventListener('DOMContentLoaded', (event) => {
          new PagefindUI({ element: "#page-404-search" });
      });
    }
  </script>
  

  <!-- Matomo -->
  <script>
    var pageTitle = 'Apache Download Mirrors';
    var _paq = window._paq = window._paq || [];
    /* tracker methods like "setCustomDimension" should be called before
"trackPageView" */
    /* We explicitly disable cookie tracking to avoid privacy issues */
    _paq.push(['disableCookies']);
    if(pageTitle === '404'){
      /* Track 404 page hits */
      _paq.push(['setDocumentTitle',  '404/URL = ' +  encodeURIComponent(document.location.pathname+document.location.search) + '/From = ' + encodeURIComponent(document.referrer)]);
    }
    /* Measure a visit to flink.apache.org and nightlies.apache.org/flink
as the same visit */
    _paq.push(['trackPageView']);
    _paq.push(['enableLinkTracking']);
    (function() {
      var u="//analytics.apache.org/";
      _paq.push(['setTrackerUrl', u+'matomo.php']);
      _paq.push(['setSiteId', '37']);
      var d=document, g=d.createElement('script'),
s=d.getElementsByTagName('script')[0];
      g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
    })();
  </script>
  <!-- End Matomo Code -->

</head>

<body >
  <!-- Navigation -->
  <header>
	<div id="skiptocontent">
		<a href="#maincontent">Skip to Main Content</a>
	</div>
    <nav class="navbar navbar-inverse navbar-fixed-top mainmenu">
      
      <div class="container">
        <div class="navbar-header">
          <button class="navbar-toggle" type="button" data-toggle="collapse" data-target="#mainnav-collapse">
            <span class="sr-only">Toggle navigation</span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
          </button>
        </div>
        <div class="collapse navbar-collapse" id="mainnav-collapse">
          <div class="upper-nav">
            <div class="header-social-icons">
              <a target="_blank" href="https://infra.apache.org/slack.html"><img src="/images/slack-icon.svg" alt="slack icon"></a>
              <a target="_blank" href="https://github.com/apache"><img src="/images/github-mark-white.svg" alt="github icon"></a>
              <a target="_blank" href="https://www.linkedin.com/company/the-apache-software-foundation/"><img src="/images/linkedin-icon.png" alt="linkedIn icon"></a>
              <a target="_blank" href="https://www.youtube.com/c/TheApacheFoundation"><img src="/images/youtube-icon.svg" alt="youtube icon"></a>
              <a target="_blank" href="https://twitter.com/TheASF"><img src="/images/x-icon.svg" alt="X icon"></a>
            </div>
            <a href="/foundation/sponsorship" class="btn btn-default" onclick="_paq.push(['trackEvent', 'click', 'SponsorASF Button']);">Sponsor the ASF</a>
          </div>
          <ul class="nav navbar-nav navbar-justified n-navbar-padding">
            <li class="dropdown">
              <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button">Community&nbsp;<span class="caret"></span></a>
              <ul class="dropdown-menu" role="menu">
                <li><a href="https://community.apache.org/" target="_blank">Contributor Getting Started</a></li>
                <li><a href="https://community.apache.org/contributors/" target="_blank">Becoming a Committer</a></li>
                <li><a href="/foundation/policies/conduct">Code of Conduct</a></li>
                <li><a href="/community-resources/">Community Resources</a></li>
                <li><a href="https://communityovercode.org/" target="_blank">Community Over Code</a></li>
                <li><a href="https://events.apache.org/" target="_blank">Events</a></li>
                <li><a href="https://www.redbubble.com/people/comdev/shop" target="_blank">Store</a></li>
              </ul>
            </li>
            <li class="dropdown">
              <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button">Projects&nbsp;<span class="caret"></span></a>
              <ul class="dropdown-menu" role="menu">
                <li><a href="/projects">Projects</a></li>
                <li><a href="https://incubator.apache.org/" target="_blank">Incubator Projects</a></li>
                <li><a href="https://projects.apache.org/" target="_blank">Projects Directory </a></li>
                <li><a href="/foundation/mailinglists">Mailing Lists </a></li>
                <li><a href="/security">Report a Vulnerability</a></li>
              </ul>
            </li>
            <li class="dropdown">
              <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button">Downloads&nbsp;<span class="caret"></span></a>
              <ul class="dropdown-menu" role="menu">
                <li><a href="https://downloads.apache.org/" target="_blank">Distributions</a></li>
                <li><a href="https://projects.apache.org/releases.html" target="_blank">Releases</a></li>
                <li><a href="https://status.apache.org/" target="_blank">Infrastructure Status</a></li>
                <li><a href="https://infra-reports.apache.org/#uptime" target="_blank">Infrastructure Statistics</a></li>
              </ul>
            </li>
            <li class="dropdown">
              <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button">Learn&nbsp;<span class="caret"></span></a>
              <ul class="dropdown-menu" role="menu">
                <li><a href="https://news.apache.org/" target="_blank">Blog</a></li>
                <li><a href="/foundation/how-it-works">How the ASF Works</a></li>
                <li><a href="/theapacheway/">The Apache Way</a></li>
                <li><a href="/legal/">Legal &amp; Trademark</a></li>
                <li><a href="/licenses">Licenses</a></li>
                <li><a href="/foundation/glossary">Glossary</a></li>
                <li><a href="/foundation/faq">FAQ</a></li>
              </ul>
            </li>
            <li class="dropdown">
              <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button">Resources &amp; Tools&nbsp;<span class="caret"></span></a>
              <ul class="dropdown-menu" role="menu">
                <li><a href="/dev/">Developer Information</a></li>
                <li><a href="https://cwiki.apache.org/" target="_blank" >Wiki</a></li>
                <li><a href="https://issues.apache.org/" target="_blank" >Issues</a></li>
                <li><a href="https://infra.apache.org/slack.html" target="_blank" >Slack</a></li>
                <li><a href="https://selfserve.apache.org/" target="_blank" >Self Serve Portal</a></li>
                <li><a href="https://infra.apache.org/" target="_blank" >Infrastructure</a></li>
                <li><a href="https://whimsy.apache.org/" target="_blank" >Whimsy</a></li>
                <li><a href="/foundation/press/kit/">Brand Guidelines</a></li>
                <li><a href="/logos/">Project Logos</a></li>
              </ul>
            </li>
            <li class="dropdown">
              <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button">About&nbsp;<span class="caret"></span></a>
              <ul class="dropdown-menu" role="menu">
                <li><a href="/foundation/">About</a></li>
                <li><a href="/foundation/sponsors">Our Sponsors</a></li>
		<li><a href="/foundation/sponsorship">Corporate Sponsorship</a></li>
                <li><a href="/foundation/individual-supporters">Individual Supporters</a></li>
                <li><a href="/foundation/leadership">Leadership</a></li>
                <li><a href="/foundation/members">Members</a></li>
                <li><a href="https://diversity.apache.org/" target="_blank">Diversity & Inclusion</a></li>
                <li><a href="/press/">Newsroom</a></li>
                <li><a href="/foundation/contact">Contact</a></li>
              </ul>
            </li>
            
           
            
            <li class="dropdown">
              <a href="#" class="dropdown-toggle hidden-xs" data-toggle="dropdown" role="button"><span class="glyphicon glyphicon-search"
                  aria-hidden="true"></span><span class="sr-only">Search</span></a>
              <ul class="dropdown-menu search-form" role="search">
                <li>
                  <div id="pagefind-search" class="input-group" style="width: 100%; padding: 0 5px;"></div>
                </li>
              </ul>
            </li>
          </ul>
        </div>
      </div>
    </nav>
  </header>
  <!-- / Navigation -->
  <header id="main-header" class="container">
    <div class="sideImg">
          <a class="visible-home" href="https://events.apache.org/x/current-event.html">
            <img class="img-responsive" style="width: 125px;" src="/events/current-event-125x125.png" alt="Apache Events"/>
<!-- STALE: <img class="img-responsive" style="width: 125px;" src="https://www.apachecon.com/event-images/default-square-light.png" alt="ApacheCon 2021 Coming Soon!" /> -->
          </a>
      <a class="hidden-home" href="/"><img class="img-responsive" src="/img/asf-estd-1999-logo.jpg" alt="The Apache Software Foundation"></a>
    </div>
    <div class="main">
      <img class="img-responsive center-block visible-home" src="/img/asf-estd-1999-logo.jpg" alt="Apache 20th Anniversary Logo">

    </div>
 
  </header>
  <main id="maincontent">
<div class="container">    <!-- This document is currently not in use, but should be kept 
in sync with https://www.apache.org/dyn/closer.html for future use 
-->
<p>
    [if-any logo] 
    <a href="[link]">
<img alt="[logo]" src="[logo]"/>
</a>
     [end] We suggest the following location for your download:
</p>
<p>
<a href="[preferred][path_info]">
<strong>[preferred][path_info]</strong>
</a>
</p>
<p>Alternate download locations are suggested below.</p>
<p>
    It is essential that you 
    <a href="#verify">verify the integrity</a>
     of the downloaded file using
    the PGP signature (
    <code>.asc</code>
     file) or a hash (
    <code>.md5</code>
     or 
    <code>.sha*</code>
     file).
</p>
<p>[if-any http]</p>
<h1 id="http">
    HTTP
    <a class="headerlink" href="#http" title="Permanent link">&para;</a>
</h1>
<p>
    [for http] 
    <a href="[http][path_info]">
<strong>[http][path_info]</strong>
</a>
<br/>
    
    [end]
</p>
<p>[end]</p>
<p>[if-any ftp]</p>
<h1 id="ftp">
    FTP
    <a class="headerlink" href="#ftp" title="Permanent link">&para;</a>
</h1>
<p>
    [for ftp] 
    <a href="[ftp][path_info]">
<strong>[ftp][path_info]</strong>
</a>
<br/>
    
    [end]
</p>
<p>[end]</p>
<h1 id="backup">
    Backup Sites
    <a class="headerlink" href="#backup" title="Permanent link">&para;</a>
</h1>
<p>
    [if-any backup] [for backup] 
    <a href="[backup][path_info]">
<strong>[backup][path_info]</strong>
</a>
<br/>
    
    [end] [end]
</p>
<h1 id="verify">
    Verify the integrity of the files
    <a class="headerlink" href="#verify" title="Permanent link">&para;</a>
</h1>
<p>
    It is essential that you verify the integrity of the downloaded file using
    the PGP signature (
    <code>.asc</code>
     file) or a hash (
    <code>.md5</code>
     or 
    <code>.sha*</code>
     file). Please read 
    <a href="/info/verification.html">Verifying Apache Software
    Foundation Releases</a>
     for more information on why
    you should verify our releases.
</p>
<p>
    The PGP signature can be verified using PGP or GPG. First download the
    <code>KEYS</code>
     as well as the 
    <code>asc</code>
     signature file for the relevant distribution.
    Make sure you get these files from the main distribution site, rather than
    from a mirror. Then verify the signatures using
</p>
<div class="codehilite">
<pre>
        <span class="c">% gpg --import KEYS</span>
        <span class="c">% gpg --verify downloaded_file.asc downloaded_file</span>
    </pre>
</div>
<p>
<em>or</em>
</p>
<div class="codehilite">
<pre>
        <span class="c">% pgpk -a KEYS</span>
        <span class="c">% pgpv downloaded_file.asc</span>
    </pre>
</div>
<p>
<em>or</em>
</p>
<div class="codehilite">
<pre>
        <span class="c">% pgp -ka KEYS</span>
        <span class="c">% pgp downloaded_file.asc</span>
    </pre>
</div>
<p>Alternatively, you can verify the hash on the file.</p>
<p>Hashes can be calculated using GPG:</p>
<div class="codehilite">
<pre>
        <span class="c">% gpg --print-md SHA256 downloaded_file</span>
    </pre>
</div>
<p>The output should be compared with the contents of the SHA256 file.
Similarly for other hashes (SHA512, SHA1, MD5 etc) which may be provided.</p>
<p>Windows 7 and later systems should all now have certUtil:</p>
<div class="codehilite">
<pre>
        <span class="c">% certUtil -hashfile pathToFileToCheck [HashAlgorithm]</span>
    </pre>
</div>
<p>HashAlgorithm choices: MD2 MD4 MD5 SHA1 SHA256 SHA384 SHA512</p>
<p>Unix-like systems (and macOS) will have a utility called
md5, md5sum or shasum</p>

</div>  </main>

  <!-- Footer -->
  <footer class="bg-primary">
    <div class="container">
      <div class="row">
        <br />
        <div class="col-sm-2">
          <h5 class="white">Community</h5>
          <ul class="list-unstyled white" role="menu">
            <li><a href="https://community.apache.org/" target="_blank">Contributor Getting Started</a></li>
            <li><a href="https://community.apache.org/contributors/" target="_blank">Becoming a Committer</a></li>
            <li><a href="/foundation/policies/conduct">Code of Conduct</a></li>
            <li><a href="/community-resources/">Community Resources</a></li>
            <li><a href="https://communityovercode.org/" target="_blank">Community Over Code</a></li>
            <li><a href="https://events.apache.org/" target="_blank">Events</a></li>
            <li><a href="https://www.redbubble.com/people/comdev/shop" target="_blank">Store</a></li>
          </ul>
        </div>

        <div class="col-sm-2">
          <h5 class="white">Projects</h5>
          <ul class="list-unstyled white" role="menu">
              <li><a href="/projects">Projects</a></li>
              <li><a href="https://incubator.apache.org/" target="_blank">Incubator Projects</a></li>
              <li><a href="https://projects.apache.org/" target="_blank">Projects Directory </a></li>
              <li><a href="/foundation/mailinglists">Mailing Lists </a></li>
              <li><a href="/security">Report a Vulnerability</a></li>
          </ul>
        </div>
        <div class="col-sm-2">
          <h5 class="white">Downloads</h5>
          <ul class="list-unstyled white" role="menu">
            <li><a href="https://downloads.apache.org/" target="_blank">Distributions</a></li>
            <li><a href="https://projects.apache.org/releases.html" target="_blank">Releases</a></li>
            <li><a href="https://status.apache.org/" target="_blank">Infrastructure Status</a></li>
            <li><a href="https://infra-reports.apache.org/#uptime" target="_blank">Infrastructure Statistics</a></li>
          </ul>
        </div>

        <div class="col-sm-2">
          <h5 class="white">Learn</h5>
          <ul class="list-unstyled white" role="menu">
            <li><a href="https://news.apache.org/" target="_blank">Blog</a></li>
            <li><a href="/foundation/how-it-works">How the ASF Works</a></li>
            <li><a href="/theapacheway/">The Apache Way</a></li>
            <li><a href="/legal/">Legal &amp; Trademark</a></li>
            <li><a href="/licenses">Licenses</a></li>
            <li><a href="/foundation/glossary">Glossary</a></li>
            <li><a href="/foundation/faq">FAQ</a></li>
          </ul>
        </div>

        <div class="col-sm-2">
          <h5 class="white">Resources &amp; Tools</h5>
          <ul class="list-unstyled white" role="menu">
              <li><a href="/dev/">Developer Information</a></li>
              <li><a href="https://cwiki.apache.org/" target="_blank" >Wiki</a></li>
              <li><a href="https://issues.apache.org/" target="_blank" >Issues</a></li>
              <li><a href="https://infra.apache.org/slack.html" target="_blank" >Slack</a></li>
              <li><a href="https://selfserve.apache.org/" target="_blank" >Self Serve Portal</a></li>
              <li><a href="https://infra.apache.org/" target="_blank" >Infrastructure</a></li>
              <li><a href="https://whimsy.apache.org/" target="_blank" >Whimsy</a></li>
              <li><a href="/foundation/press/kit/">Brand Guidelines</a></li>
              <li><a href="/logos/">Project Logos</a></li>
          </ul>
        </div>

        <div class="col-sm-2">
          <h5 class="white">About</h5>
          <ul class="list-unstyled white" role="menu">
            <li><a href="/foundation/">About</a></li>
            <li><a href="/foundation/sponsors">Our Sponsors</a></li>
	    <li><a href="/foundation/sponsorship">Corporate Sponsorship</a></li>
            <li><a href="/foundation/individual-supporters">Individual Supporters</a></li>
            <li><a href="/foundation/leadership">Leadership</a></li>
            <li><a href="/foundation/members">Members</a></li>
            <li><a href="https://diversity.apache.org/" target="_blank">Diversity & Inclusion</a></li>
            <li><a href="/press/">Newsroom</a></li>
            <li><a href="/foundation/contact">Contact</a></li>
            <li><a href="https://privacy.apache.org/policies/privacy-policy-public.html" target="_blank">Privacy Policy</a></li>
          </ul>
        </div>


      </div>
      <hr class="col-lg-12 hr-white" />
      <div class="row">
        <div class="col-lg-12">
          <p class="text-center">Copyright &#169; 2024 The Apache Software Foundation, Licensed under the <a class="white" href="/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
          <p class="text-center">Apache and the Apache feather logo are trademarks of The Apache Software Foundation. </p>
        </div>
      </div>
    </div>

  </footer>

  <!-- / Footer -->

  <script src="/js/jquery.min.js"></script>
  <script src="/js/bootstrap.js"></script>
  <script src="/js/slideshow.js"></script>
  <script>
    (function($){
      $(document).ready(function(){
        $('ul.dropdown-menu [data-toggle=dropdown]').on('click', function(event) {
          event.preventDefault();
          event.stopPropagation();
          $(this).parent().siblings().removeClass('open');
          $(this).parent().toggleClass('open');
          console.log('WOrked');
        });
      });
    })(jQuery);
  </script>
</body>
</html>