<!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&reg;</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&reg;</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&reg;</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&reg; (&#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&reg;, our mission is to build, maintain and enhance a cloud-ready
	core banking system for robust, scalable, and secure operations of financial institutions.  
        Fineract&reg; 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&reg; is aimed at innovative mobile and cloud-based solutions,
        and enables digital transaction accounts for all.
      </p>
	<p class="flow-text justify-align">Fineract&reg; 1.x is a cloud-ready platform with open APIs. It is, by design, a headless application.  
		Solution Providers, including system integrators and banking system operators are able to build their own front end solutions on top of Fineract&reg;. 
		We encourage all Consumers (or users) of fineract to consult competent technical resources for all questions related to securing and running the software properly. 
		Please consult the Apache license for further legal information and the FAQ for key information about the setup of this project. 
	    </p>
	   
	<p class="flow-text justify-align"> NOTE DEPRECATED SUB-PROJECT: The Fineract&reg; Community has also worked on a code project called Fineract&reg; CN, 
		intended to operate as a microservice architecture.  If you find references to this project, please be aware that it is still 
		around as an area of exploration but should not be confused with the Fineract&reg; 1.x releases. In May 2023, the Fineract&reg; Community decided to DEPRECATE this project. 
		This side-project served an important role in describing a microservice approach, however, no release of the code was completed by the Fineract&reg; Community.  		
      </p>
      <div class="divider"></div>
    </section>
	
	
    <section id="about" class="section">
      <h3 class="center-align">About</h3>
      <p class="flow-text justify-align">
        Fineract&reg; can be deployed in any environment:
        cloud or on-premise, although most active contributions are coming in on cloud based deployments.  
	It can support front end interfaces on or offline, mobile or PC, depending on the requirements and as managed by the implementing organization.

	It’s aim is to be 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&reg; 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&reg; 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&reg; community welcomes contributors who want to support the
        Fineract&reg; technology. Our community builds everything from this website,
        to the Fineract&reg; 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&reg; 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&reg;, 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&reg;</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.9.0</td>
            <td><a href="https://cwiki.apache.org/confluence/display/FINERACT/1.9.0+-+Apache+Fineract">Apache Fineract&reg; 1.9.0</a></td>
            <td><a href="https://www.apache.org/dyn/closer.cgi?path=/fineract/1.9.0/apache-fineract-1.9.0-binary.tar.gz">apache-fineract-1.9.0-binary.tar.gz</a>
              (<a href="https://www.apache.org/dist/fineract/1.9.0/apache-fineract-1.9.0-binary.tar.gz.asc">asc</a>,
              <a href="https://www.apache.org/dist/fineract/1.9.0/apache-fineract-1.9.0-binary.tar.gz.sha512">sha512</a>)</td>
            <td><a href="https://www.apache.org/dyn/closer.cgi?path=/fineract/1.9.0/apache-fineract-1.9.0-src.tar.gz">apache-fineract-1.9.0-src.tar.gz</a>
              (<a href="https://www.apache.org/dist/fineract/1.9.0/apache-fineract-1.9.0-src.tar.gz.asc">asc</a>,
              <a href="https://www.apache.org/dist/fineract/1.9.0/apache-fineract-1.9.0-src.tar.gz.sha512">sha512</a>)
            </td>
          </tr>
	  <!--
          <tr>
            <td>1.8.4</td>
            <td><a href="https://cwiki.apache.org/confluence/display/FINERACT/1.8.4+-+Apache+Fineract">Apache Fineract&reg; 1.8.4</a></td>
            <td><a href="https://www.apache.org/dyn/closer.cgi?path=/fineract/1.8.4/apache-fineract-1.8.4-binary.tar.gz">apache-fineract-1.8.4-binary.tar.gz</a>
              (<a href="https://www.apache.org/dist/fineract/1.8.4/apache-fineract-1.8.4-binary.tar.gz.asc">asc</a>,
              <a href="https://www.apache.org/dist/fineract/1.8.4/apache-fineract-1.8.4-binary.tar.gz.sha512">sha512</a>)</td>
            <td><a href="https://www.apache.org/dyn/closer.cgi?path=/fineract/1.8.4/apache-fineract-1.8.4-src.tar.gz">apache-fineract-1.8.4-src.tar.gz</a>
              (<a href="https://www.apache.org/dist/fineract/1.8.4/apache-fineract-1.8.4-src.tar.gz.asc">asc</a>,
              <a href="https://www.apache.org/dist/fineract/1.8.4/apache-fineract-1.8.4-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&reg; 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&reg; 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&reg; 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&reg;</a><br/>
          Here you will find the source code for Apache Fineract&reg;.
        </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&reg; CN</a><br/>
          Here you will find the source code for Apache Fineract&reg; 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 Fineract, Fineract, Apache, the Apache feather, and the Apache Fineract project logo are either registered trademarks or 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>
