<!DOCTYPE html>
<html lang="en">
<!--
  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.
-->
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
  <title>Apache Fineract</title>
  <link rel="icon" type="image/png" href="images/apache-fineract-icon.png">
  <link href="https://fonts.googleapis.com/css?family=Open+Sans+Condensed:300&subset=latin,latin-ext,cyrillic,cyrillic-ext" type="text/css" rel="stylesheet">
  <link href="http://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
  <link href="css/materialize.min.css" type="text/css" rel="stylesheet"/>
  <link href="css/fineract.css" type="text/css" rel="stylesheet">
</head>
<body id="top" class="ghost-white jet-text">
  <header>
    <div class="navbar-fixed">
      <nav class="jet ghost-white-text">
        <div class="nav-wrapper">
          <div class="container">
            <a href="#top" class="brand-logo">
              <img class="logo" src="images/apache-fineract-logo.png" alt="Fineract Logo"/>
              <span class="brand">Apache Fineract</span>
            </a>
            <a href="#" data-activates="mobile-menu" class="button-collapse"><i class="material-icons">menu</i></a>
            <ul class="right hide-on-med-and-down">
              <li><a class="ghost-white-hover" href="#about">About</a></li>
              <li><a class="ghost-white-hover" href="#contribute">Contribute</a></li>
              <li><a class="ghost-white-hover" href="#downloads">Downloads</a></li>
              <li><a class="ghost-white-hover" href="#resources">Resources</a></li>
              <li><a class="ghost-white-hover" href="#reference">Reference</a></li>
            </ul>
            <ul class="side-nav ghost-white jet-text" id="mobile-menu">
              <li class="side-nav-heading">Apache Fineract</li>
              <li><a class="jet-hover" href="#about" onclick="closeSideNav()">About</a></li>
              <li><a class="jet-hover" href="#contribute" onclick="closeSideNav()">Contribute</a></li>
              <li><a class="jet-hover" href="#downloads" onclick="closeSideNav()">Downloads</a></li>
              <li><a class="jet-hover" href="#resources" onclick="closeSideNav()">Resources</a></li>
              <li><a class="jet-hover" href="#reference" onclick="closeSideNav()">Reference</a></li>
            </ul>
          </div>
        </div>
      </nav>
    </div>
  </header>
  <main class="container">
    <section class="section">
      <h3 class="center-align">Platform for Digital Financial Services</h3>
      <p class="flow-text justify-align">
        Apache Fineract (&#92;&#8217;f&#299;n-,&#1241;-,rakt&#92;) is open source software for financial services. 
      </p>
      <p class="flow-text justify-align">
        Fineract provides a reliable, robust, and affordable solution
        for entrepreneurs, financial institutions, and service providers
        to offer financial services to the world’s 2 billion underbanked and unbanked.
        Fineract is aimed at innovative mobile and cloud-based solutions,
        and enables digital transaction accounts for all.
      </p>
	<p class="flow-text justify-align">Fineract 1.x is a mature platform with open APIs (see releases below),
    while Fineract CN (under development) is a cloud native, microservice architecture
    also supporting open banking APIs. 
      </p>
      <div class="divider"></div>
    </section>
    <section id="about" class="section">
      <h3 class="center-align">About</h3>
      <p class="flow-text justify-align">
        Apache Fineract can be deployed in any environment:
        cloud or on-premise.  It can support front end interfaces on or offline, mobile or PC.
        It’s extensible enough to support any organizational type or delivery channel,
        and flexible enough to support any product, service, or lending methodology.
        For any organization, big or small, it provides
        the client data management, loan and savings portfolio management, integrated real time accounting,
        and social and financial reporting needed
        to bring digital financial services to a modern connected world.
      </p>
	  <p class="flow-text justify-align">
      Fineract 1.x compares well to other core banking systems
      and draws from requirements in credit unions, microfinance institutions, and small non-banking financial institutions.
      Features include
      flexible product configuration,
      KYC documentation support,
      business rule sets,
      payment transactions,
      and portfolio management.
      It includes an open API that dates to 2011 and is deployed in relatively high transaction
      volume environments.
    </p>
		<p class="flow-text justify-align">
      Fineract CN operates on the principle that financial services are an innovative space
      and so each fineract microservice encapsulates a domain that can be combined
      with other microservices to create new platform offerings.
      Fineract CN microservices can be combined to create new software platforms for
      digital financial service providers.
      Fineract CN is still in its early days, but preliminary tests have shown that a
      simple single-instance laptop deployment of Fineract CN can process over
      1000 transactions/second.
      Fineract CN also includes a fully Apache-licensed backoffice UI.
	  </p>
	  <p class="flow-text justify-align">
      Fineract 1.x began incubation at Apache in December 2015 and is used by
      an active community of companies
      who build solutions for both financial inclusion and fintech innovation.
    </p>

      <div class="divider"></div>
    </section>
    <section id="contribute" class="section">
      <h3 class="center-align">Contribute</h3>
      <p class="flow-text justify-align">
        The Apache Fineract community welcomes contributors who want to support the
        Fineract technology. Our community builds everything from this website,
        to the Fineract code to documentation and best practices information.
      </p>
      <p class="flow-text justify-align">
        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 Fineract code are welcome.
        Helping users learn best practices also earns good karma in our community.
      </p>
      <article>
        <h4>Mailing Lists</h4>
        <h5>Users &amp; Developers</h5>
        <p class="flow-text">
          <i>If you use, build on top of, deploy or are building contributions and modifications to Apache Fineract, this is the list for you.</i><br/>
          To subscribe, send a blank email to <a href="mailto:dev-subscribe@fineract.apache.org">dev-subscribe@fineract.apache.org</a>.<br/>
          To <b>un</b>subscribe later, just send a blank email to <a href="mailto:dev-unsubscribe@fineract.apache.org">dev-unsubscribe@fineract.apache.org</a>.<br/>
          You can also read the archives 
		<a href="https://lists.apache.org/list.html?dev@fineract.apache.org" target="_blank">on lists.apache.org</a>
		or <a href="http://markmail.org/search/?q=list%3Aorg.apache.fineract.dev+order%3Adate-backward" target="_blank">on MarkMail.org</a>.
        </p>
        <h5>Commits</h5>
        <p class="flow-text">
          <i>This list receives an email whenever new code is contributed to Apache Fineract</i>.<br/>
          To subscribe, send a blank email to <a href="mailto:commits-subscribe@fineract.apache.org">commits-subscribe@fineract.apache.org</a>.<br/>
          You can also <a href="http://markmail.org/search/?q=list%3Aorg.apache.fineract.commits+order%3Adate-backward" target="_blank">read the archives</a>.
        </p>
      </article>
      <div class="divider"></div>
    </section>
    <section id="downloads" class="section">
      <h3 class="center-align">Downloads</h3>
      <p class="flow-text justify-align">The below table lists mirrored release artifacts and their associated hashes and signatures available at apache.org.
        The keys used to sign releases are published at <a href="https://www.apache.org/dist/fineract/KEYS">KEYS</a>.
        Instructions for verifying your mirrored downloads are located <a href="https://www.apache.org/dyn/closer.cgi#verify">here</a>.
      </p>
      <article>
        <table class="responsive-table striped">
          <thead>
          <tr>
            <th>Version</th>
            <th>Release Notes</th>
            <th>Binary Download</th>
            <th>Source Download</th>
          </tr>
          </thead>

          <tbody>
          <tr>
            <td>1.7.0</td>
            <td><a href="https://cwiki.apache.org/confluence/display/FINERACT/1.7.0+-+Apache+Fineract">Apache Fineract 1.7.0</a></td>
            <td><a href="https://www.apache.org/dyn/closer.cgi?path=/fineract/1.7.0/apache-fineract-1.7.0-binary.tar.gz">apache-fineract-1.7.0-binary.tar.gz</a>
              (<a href="https://www.apache.org/dist/fineract/1.7.0/apache-fineract-1.7.0-binary.tar.gz.asc">asc</a>,
              <a href="https://www.apache.org/dist/fineract/1.7.0/apache-fineract-1.7.0-binary.tar.gz.sha512">sha512</a>)</td>
            <td><a href="https://www.apache.org/dyn/closer.cgi?path=/fineract/1.7.0/apache-fineract-1.7.0-src.tar.gz">apache-fineract-1.7.0-src.tar.gz</a>
              (<a href="https://www.apache.org/dist/fineract/1.7.0/apache-fineract-1.7.0-src.tar.gz.asc">asc</a>,
              <a href="https://www.apache.org/dist/fineract/1.7.0/apache-fineract-1.7.0-src.tar.gz.sha512">sha512</a>)
            </td>
          </tr>
          <tr>
            <td>1.6.0</td>
            <td><a href="https://cwiki.apache.org/confluence/display/FINERACT/1.6.0+-+Apache+Fineract">Apache Fineract 1.6.0</a></td>
            <td><a href="https://archive.apache.org/dist/fineract/1.6.0/apache-fineract-1.6.0-binary.tar.gz">apache-fineract-1.6.0-binary.tar.gz</a>
              (<a href="https://archive.apache.org/dist/fineract/1.6.0/apache-fineract-1.6.0-binary.tar.gz.asc">asc</a>,
              <a href="https://archive.apache.org/dist/fineract/1.6.0/apache-fineract-1.6.0-binary.tar.gz.sha512">sha512</a>)</td>
            <td><a href="https://archive.apache.org/dist/fineract/1.6.0/apache-fineract-1.6.0-src.tar.gz">apache-fineract-1.6.0-src.tar.gz</a>
              (<a href="https://archive.apache.org/dist/fineract/1.6.0/apache-fineract-1.6.0-src.tar.gz.asc">asc</a>,
              <a href="https://archive.apache.org/dist/fineract/1.6.0/apache-fineract-1.6.0-src.tar.gz.sha512">sha512</a>)
            </td>
          </tr>
          <tr>
            <td>1.5.0</td>
            <td><a href="https://cwiki.apache.org/confluence/display/FINERACT/1.5.0+-+Apache+Fineract">Apache Fineract 1.5.0</a></td>
            <td><a href="https://archive.apache.org/dist/fineract/1.5.0/apache-fineract-1.5.0-binary.tar.gz">apache-fineract-1.5.0-binary.tar.gz</a>
              (<a href="https://archive.apache.org/dist/fineract/1.5.0/apache-fineract-1.5.0-binary.tar.gz.asc">asc</a>,
              <a href="https://archive.apache.org/dist/fineract/1.5.0/apache-fineract-1.5.0-binary.tar.gz.sha512">sha512</a>)</td>
            <td><a href="https://archive.apache.org/dist/fineract/1.5.0/apache-fineract-1.5.0-src.tar.gz">apache-fineract-1.5.0-src.tar.gz</a>
              (<a href="https://archive.apache.org/dist/fineract/1.5.0/apache-fineract-1.5.0-src.tar.gz.asc">asc</a>,
              <a href="https://archive.apache.org/dist/fineract/1.5.0/apache-fineract-1.5.0-src.tar.gz.sha512">sha512</a>)
            </td>
          </tr>
          <tr>
            <td>1.4.0</td>
            <td><a href="https://cwiki.apache.org/confluence/display/FINERACT/1.4.0+-+Apache+Fineract">Apache Fineract 1.4.0</a></td>
            <td><a href="https://archive.apache.org/dist/fineract/1.4.0/apache-fineract-1.4.0-binary.tar.gz">apache-fineract-1.4.0-binary.tar.gz</a>
              (<a href="https://archive.apache.org/dist/fineract/1.4.0/apache-fineract-1.4.0-binary.tar.gz.asc">asc</a>,
              <a href="https://archive.apache.org/dist/fineract/1.4.0/apache-fineract-1.4.0-binary.tar.gz.sha512">sha512</a>)</td>
            <td><a href="https://archive.apache.org/dist/fineract/1.4.0/apache-fineract-1.4.0-src.tar.gz">apache-fineract-1.4.0-src.tar.gz</a>
              (<a href="https://archive.apache.org/dist/fineract/1.4.0/apache-fineract-1.4.0-src.tar.gz.asc">asc</a>,
              <a href="https://archive.apache.org/dist/fineract/1.4.0/apache-fineract-1.4.0-src.tar.gz.sha512">sha512</a>)
            </td>
          </tr>
          <tr>
            <td>1.3.0</td>
            <td><a href="https://cwiki.apache.org/confluence/display/FINERACT/1.3.0+-+Apache+Fineract">Apache Fineract 1.3.0</a></td>
            <td><a href="https://archive.apache.org/dist/fineract/1.3.0/apache-fineract-1.3.0-binary.tar.gz">apache-fineract-1.3.0-binary.tar.gz</a>
              (<a href="https://archive.apache.org/dist/fineract/1.3.0/apache-fineract-1.3.0-binary.tar.gz.asc">asc</a>,
              <a href="https://archive.apache.org/dist/fineract/1.3.0/apache-fineract-1.3.0-binary.tar.gz.sha512">sha512</a>)</td>
            <td><a href="https://archive.apache.org/dist/fineract/1.3.0/apache-fineract-1.3.0-src.tar.gz">apache-fineract-1.3.0-src.tar.gz</a>
              (<a href="https://archive.apache.org/dist/fineract/1.3.0/apache-fineract-1.3.0-src.tar.gz.asc">asc</a>,
              <a href="https://archive.apache.org/dist/fineract/1.3.0/apache-fineract-1.3.0-src.tar.gz.sha512">sha512</a>)
            </td>
          </tr>
          <tr>
            <td>1.2.0</td>
            <td><a href="https://cwiki.apache.org/confluence/display/FINERACT/1.2.0+-+Apache+Fineract">Apache Fineract 1.2.0</a></td>
            <td><a href="https://archive.apache.org/dist/fineract/1.2.0/apache-fineract-1.2.0-binary.tar.gz">apache-fineract-1.2.0-binary.tar.gz</a>
              (<a href="https://archive.apache.org/dist/fineract/1.2.0/apache-fineract-1.2.0-binary.tar.gz.asc">asc</a>,
              <a href="https://archive.apache.org/dist/fineract/1.2.0/apache-fineract-1.2.0-binary.tar.gz.sha512">sha512</a>)</td>
            <td><a href="https://archive.apache.org/dist/fineract/1.2.0/apache-fineract-1.2.0-src.tar.gz">apache-fineract-1.2.0-src.tar.gz</a>
              (<a href="https://archive.apache.org/dist/fineract/1.2.0/apache-fineract-1.2.0-src.tar.gz.asc">asc</a>,
              <a href="https://archive.apache.org/dist/fineract/1.2.0/apache-fineract-1.2.0-src.tar.gz.sha512">sha512</a>)
            </td>
          </tr>
          <tr>
            <td>1.1.0</td>
            <td><a href="https://cwiki.apache.org/confluence/display/FINERACT/1.1.0+-+Apache+Fineract">Apache Fineract 1.1.0</a></td>
            <td><a href="https://archive.apache.org/dist/fineract/1.1.0/apache-fineract-1.1.0-binary.tar.gz">apache-fineract-1.1.0-binary.tar.gz</a>
              (<a href="https://archive.apache.org/dist/fineract/1.1.0/apache-fineract-1.1.0-binary.tar.gz.asc">asc</a>,
              <a href="https://archive.apache.org/dist/fineract/1.1.0/apache-fineract-1.1.0-binary.tar.gz.sha512">sha512</a>)</td>
            <td><a href="https://archive.apache.org/dist/fineract/1.1.0/apache-fineract-1.1.0-src.tar.gz">apache-fineract-1.1.0-src.tar.gz</a>
              (<a href="https://archive.apache.org/dist/fineract/1.1.0/apache-fineract-1.1.0-src.tar.gz.asc">asc</a>,
              <a href="https://archive.apache.org/dist/fineract/1.1.0/apache-fineract-1.1.0-src.tar.gz.sha512">sha512</a>)
            </td>
          </tr>
          <tr>
            <td>1.0.0</td>
            <td><a href="https://cwiki.apache.org/confluence/display/FINERACT/1.0.0+-+Apache+Fineract">Apache Fineract 1.0.0</a></td>
            <td><a href="https://archive.apache.org/dist/fineract/1.0.0/apache-fineract-1.0.0-binary.tar.gz">apache-fineract-1.0.0-binary.tar.gz</a>
              (<a href="https://archive.apache.org/dist/fineract/1.0.0/apache-fineract-1.0.0-binary.tar.gz.asc">asc</a>,
              <a href="https://archive.apache.org/dist/fineract/1.0.0/apache-fineract-1.0.0-binary.tar.gz.sha">sha512</a>)</td>
            <td><a href="https://archive.apache.org/dist/fineract/1.0.0/apache-fineract-1.0.0-src.tar.gz">apache-fineract-1.0.0-src.tar.gz</a>
              (<a href="https://archive.apache.org/dist/fineract/1.0.0/apache-fineract-1.0.0-src.tar.gz.asc">asc</a>,
              <a href="https://archive.apache.org/dist/fineract/1.0.0/apache-fineract-1.0.0-src.tar.gz.sha">sha512</a>)
            </td>
          </tr>
          </tbody>
        </table>
      </article>
      <p class="flow-text justify-align">If you are looking for an old release that is not present here or on the mirror, please check the
        <a href="http://archive.apache.org/dist/fineract/">Apache archives</a>.</p>
      <div class="divider"></div>
    </section>
    <section id="resources" class="section">
      <h3 class="center-align">Resources</h3>
      <article>
        <h4>Frequently Used Links</h4>
        <p class="flow-text justify-align">
        <a href="https://www.fineract.dev/">Fineract.dev</a><br/>
	Community Demo Server (CI/CD)
        </p>
        <p class="flow-text justify-align">
        <a href="https://issues.apache.org/jira/projects/FINERACT">JIRA</a><br/>
        Issue tracking
      </p>
      <p class="flow-text justify-align">
        <a href="https://cwiki.apache.org/confluence/display/FINERACT/Fineract+Home">Confluence</a><br/>
        Project management and documentation
        </p>
        <p class="flow-text justify-align">
        <a href="https://cwiki.apache.org/confluence/display/FINERACT/Getting+Started+Docs">Getting Started Guide</a>
        for Fineract 1.x (non-CN)
        </p>
      </article>
      <article>
        <h4>Documentation</h4>
        <p class="flow-text justify-align">
          <a href="https://cwiki.apache.org/confluence/display/FINERACT/Contributor%27s+Zone" target="_blank">Contributor's Zone</a><br/>
          Here you will find guides about getting started, how to contribute, and build instructions.
        </p>
        <p class="flow-text justify-align">
          <a href="https://cwiki.apache.org/confluence/display/FINERACT/Committer%27s+Zone" target="_blank">Committer's Zone</a><br/>
          Here you will find guides about handling pull requests, and dealing with code reviews.
        </p>
        <p class="flow-text justify-align">
          <a href="https://cwiki.apache.org/confluence/x/nK9zB" target="_blank">Security Report</a><br/>
          Lists of security issues fixed in released versions of the Apache Fineract are available here.
        </p>
      </article>
      <article>
        <h4>Repositories</h4>
        <p class="flow-text justify-align">
          <a href="https://github.com/apache/fineract" target="_blank">Apache Fineract</a><br/>
          Here you will find the source code for Apache Fineract.
        </p>
		<p class="flow-text justify-align">
          <a href="https://github.com/search?q=org%3Aapache+fineract-cn&unscoped_q=fineract-cn" target="_blank">Apache Fineract-CN</a><br/>
          Here you will find the source code for Apache Fineract Cloud Native. Pre-release version. 
        </p>
        <p class="flow-text justify-align">
          <a href="https://github.com/apache/fineract-site" target="_blank">Web Site</a><br/>
          Here you will find the source code for this web site.
        </p>
      </article>
    </section>
  </main>
  <footer class="page-footer">
    <div class="container">
      <section id="reference" class="section">
        <h3>Reference</h3>
        <p class="flow-text">
          <a class="link-inverse" href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a><br/>
          <a class="link-inverse" href="http://www.apache.org/licenses/" target="_blank">License</a><br/>
          <a class="link-inverse" href="http://www.apache.org/foundation/sponsorship.html" target="_blank">Sponsorship</a><br/>
          <a class="link-inverse" href="http://www.apache.org/foundation/thanks.html" target="_blank">Thanks</a><br/>
          <a class="link-inverse" href="http://www.apache.org/security/" target="_blank">Security</a><br/>
          <a class="link-inverse" href="https://www.apache.org/events/current-event.html">
            <img src="https://www.apache.org/events/current-event-234x60.png"/>
          </a>
        </p>
        <div class="divider divider-inverse"></div>
        <p class="flow-text center-align">
		&copy; 2009 - <span id="current-year">2020</span>&nbsp;<a class="link-inverse" href="http://apache.org/" target="_blank">The Apache Software Foundation</a>. Licensed under the <a class="link-inverse" href="http://www.apache.org/licenses/LICENSE-2.0" target="_blank">Apache License, Version 2.0</a>.<br/>
          Apache, and the Apache feather logo are trademarks of The Apache Software Foundation.<br/>
        </p>
      </section>
    </div>
  </footer>
  <script type="text/javascript" src="js/jquery.min.js"></script>
  <script type="text/javascript" src="js/materialize.min.js"></script>
  <script type="text/javascript">
    $(document).ready(function() {
      $(".button-collapse").sideNav({closeOnClick: true});
      $("#current-year").text(new Date().getFullYear());

      $(function() {
        $('a[href*=#]:not([href=#])').click(function() {
          if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') && location.hostname == this.hostname) {
            var target = $(this.hash);
            var headerHeight = $('body').find('header').height();
            target = target.length ? target : $('[name=' + this.hash.slice(1) +']');
            if (target.length) {
              $('html,body').animate({
                scrollTop: target.offset().top - (headerHeight + 5)
              }, 1000);
              return false;
            }
          }
        });
      });
    });

    function closeSideNav() {
      $('.button-collapse').sideNav('hide');
    }
  </script>
</body>
</html>
