<!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="https://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">
        At Apache Fineract(tm), our mission is to build, maintain and enhance a cloud-ready
	core banking system for robust, scalable, and secure operations of financial institutions.  
        Fineract provides a reliable, robust, and affordable solution
        for entrepreneurs, financial institutions, and service providers. 
        We believe in financial services for everyone, including and especially for the unbanked and underbanked. 
	      
        Fineract(tm) is aimed at innovative mobile and cloud-based solutions,
        and enables digital transaction accounts for all.
      </p>
	<p class="flow-text justify-align">Fineract(tm) 1.x is a mature platform with open APIs (see releases below),
    while Fineract(tm) 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">
        Fineract(tm) 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="https://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="https://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.8.1</td>
            <td><a href="https://cwiki.apache.org/confluence/display/FINERACT/1.8.2+-+Apache+Fineract">Apache Fineract 1.8.2</a></td>
            <td><a href="https://www.apache.org/dyn/closer.cgi?path=/fineract/1.8.2/apache-fineract-1.8.1-binary.tar.gz">apache-fineract-1.8.2-binary.tar.gz</a>
              (<a href="https://www.apache.org/dist/fineract/1.8.2/apache-fineract-1.8.2-binary.tar.gz.asc">asc</a>,
              <a href="https://www.apache.org/dist/fineract/1.8.2/apache-fineract-1.8.2-binary.tar.gz.sha512">sha512</a>)</td>
            <td><a href="https://www.apache.org/dyn/closer.cgi?path=/fineract/1.8.2/apache-fineract-1.8.1-src.tar.gz">apache-fineract-1.8.2-src.tar.gz</a>
              (<a href="https://www.apache.org/dist/fineract/1.8.2/apache-fineract-1.8.2-src.tar.gz.asc">asc</a>,
              <a href="https://www.apache.org/dist/fineract/1.8.2/apache-fineract-1.8.2-src.tar.gz.sha512">sha512</a>)
            </td>
          </tr>
          <tr>
            <td>1.7.1</td>
            <td><a href="https://cwiki.apache.org/confluence/display/FINERACT/1.7.1+-+Apache+Fineract">Apache Fineract 1.7.1</a></td>
            <td><a href="https://www.apache.org/dyn/closer.cgi?path=/fineract/1.7.1/apache-fineract-1.7.1-binary.tar.gz">apache-fineract-1.7.1-binary.tar.gz</a>
              (<a href="https://www.apache.org/dist/fineract/1.7.1/apache-fineract-1.7.1-binary.tar.gz.asc">asc</a>,
              <a href="https://www.apache.org/dist/fineract/1.7.1/apache-fineract-1.7.1-binary.tar.gz.sha512">sha512</a>)</td>
            <td><a href="https://www.apache.org/dyn/closer.cgi?path=/fineract/1.7.1/apache-fineract-1.7.1-src.tar.gz">apache-fineract-1.7.1-src.tar.gz</a>
              (<a href="https://www.apache.org/dist/fineract/1.7.1/apache-fineract-1.7.1-src.tar.gz.asc">asc</a>,
              <a href="https://www.apache.org/dist/fineract/1.7.1/apache-fineract-1.7.1-src.tar.gz.sha512">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="https://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>
        <p class="flow-text justify-align">
          <a href="https://fineract.apache.org/docs/legacy/index.html" target="_blank">Legacy Docs</a><br/>
          Apache Fineract API Legacy Documentation
        </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="https://www.apache.org/" target="_blank">The Apache Software Foundation</a><br/>
          <a class="link-inverse" href="https://www.apache.org/licenses/" target="_blank">License</a><br/>
          <a class="link-inverse" href="https://www.apache.org/foundation/sponsorship.html" target="_blank">Sponsorship</a><br/>
          <a class="link-inverse" href="https://www.apache.org/foundation/thanks.html" target="_blank">Thanks</a><br/>
          <a class="link-inverse" href="https://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="https://apache.org/" target="_blank">The Apache Software Foundation</a>. Licensed under the <a class="link-inverse" href="https://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>
