<!DOCTYPE html>
  <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="">
<meta name="keywords" content=" ">
<title>Downloads  | Apache Edgent Documentation</title>
<link rel="stylesheet" type="text/css" href="../css/syntax.css">
<link rel="stylesheet" type="text/css" href="../css/font-awesome.min.css">
<!--<link rel="stylesheet" type="text/css" href="../css/bootstrap.min.css">-->
<link rel="stylesheet" type="text/css" href="../css/modern-business.css">
<link rel="stylesheet" type="text/css" href="../css/lavish-bootstrap.css">
<link rel="stylesheet" type="text/css" href="../css/customstyles.css">
<link rel="stylesheet" type="text/css" href="../css/theme-blue.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.min.js"></script>
<script src="../js/jquery.navgoco.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/anchor-js/2.0.0/anchor.min.js"></script>
<script src="../js/toc.js"></script>
<script src="../js/customscripts.js"></script>
<link rel="shortcut icon" href="../common_images/favicon.ico" type="image/x-icon">
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
<script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->







 

<script>
  $(function () {
      $('[data-toggle="tooltip"]').tooltip()
  })
</script>



  </head>

<body>

   <!-- Navigation -->
<nav class="navbar navbar-inverse navbar-fixed-top" role="navigation">
    <div class="container topnavlinks">
        <div class="navbar-header">
            <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
            </button>

            <a class="fa fa-home fa-lg navbar-brand" href="../docs/home.html">&nbsp;<span class="projectTitle"> Apache Edgent Documentation</span></a>

        </div>
        <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
            <ul class="nav navbar-nav navbar-right">
                <!-- entries without drop-downs appear here -->
                <!-- conditional logic to control which topnav appears for the audience defined in the configuration file.-->
                








                <li class="dropdown">
                    
                    
                    
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown">GitHub Repos<b class="caret"></b></a>
                    <ul class="dropdown-menu">
                        
                        
                        
                        <li><a href="https://github.com/apache/incubator-edgent" target="_blank">Source code</a></li>
                        
                        
                        
                        
                        
                        <li><a href="https://github.com/apache/incubator-edgent-samples" target="_blank">Edgent Samples</a></li>
                        
                        
                        
                        
                        
                        <li><a href="https://github.com/apache/incubator-edgent-website" target="_blank">Website/Documentation</a></li>
                        
                        
                        
                        

                    </ul>
                </li>
                
                


                <li class="dropdown">
                    
                    
                    
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown">Javadoc<b class="caret"></b></a>
                    <ul class="dropdown-menu">
                        
                        
                        
                        <li><a href="..\javadoc\latest">latest</a></li>
                        
                        
                        
                        
                        
                        <li><a href="..\javadoc\r1.2.0">1.2.0</a></li>
                        
                        
                        
                        
                        
                        <li><a href="..\javadoc\r1.1.0">1.1.0</a></li>
                        
                        
                        
                        
                        
                        <li><a href="..\javadoc\r1.0.0">1.0.0</a></li>
                        
                        
                        
                        
                        
                        <li><a href="..\javadoc\r0.4.0">0.4.0</a></li>
                        
                        
                        
                        

                    </ul>
                </li>
                
                


                <!-- entries with drop-downs appear here -->
                <!-- conditional logic to control which topnav appears for the audience defined in the configuration file.-->

                <li class="dropdown">
                    
                    
                    
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown">Edgent Resources<b class="caret"></b></a>
                    <ul class="dropdown-menu">
                        
                        
                        
                        <li class="dropdownActive"><a href="downloads">Download</a></li>
                        
                        
                        
                        
                        
                        <li><a href="faq">FAQ</a></li>
                        
                        
                        
                        
                        
                        <li class="dropdownActive"><a href="/">edgent.apache.org</a></li>
                        
                        
                        
                        

                    </ul>
                </li>
                
                


                <!-- special insertion -->

               
                <!-- Send feedback function -->
<script>
function SendLinkByMail(href) {
var subject= "Apache Edgent Documentation feedback";
var body = "I have some feedback about the Downloads page: ";
body += window.location.href;
body += "";
var uri = "mailto:?subject=";
uri += encodeURIComponent(subject);
uri += "&body=";
uri += encodeURIComponent(body);
window.location.href = uri;
}
</script>

<li><a href="mailto:dev@edgent.incubator.apache.org" target="_blank"><i class="fa fa-envelope-o"></i> Feedback</a></li>


                <!--uncomment this block if you want simple search instead of algolia-->
                <li>
                     <!--start search-->
                    <div id="search-demo-container">
                        <input type="text" id="search-input" placeholder="search...">
                        <ul id="results-container"></ul>
                    </div>
                    <script src="../js/jekyll-search.js" type="text/javascript"></script>
                    <script type="text/javascript">
                        SimpleJekyllSearch.init({
                            searchInput: document.getElementById('search-input'),
                            resultsContainer: document.getElementById('results-container'),
                            dataSource: '../search.json',
                            searchResultTemplate: '<li><a href="{url}" title="Downloads">{title}</a></li>',
                        noResultsText: 'No results found.',
                                limit: 10,
                                fuzzy: true,
                        })
                    </script>
                     <!--end search-->
                </li>

            
        </div>
        <!-- /.container -->
</nav>



    <!-- Page Content -->
    <div class="container">
        <div class="col-lg-12">&nbsp;</div>


<!-- Content Row -->
<div class="row">
    <!-- Sidebar Column -->
    <div class="col-md-3">

        <script>

            $(document).ready(function() {
                // Initialize navgoco with default options
                $("#mysidebar").navgoco({
                    caretHtml: '',
                    accordion: true,
                    openClass: 'active', // open
                    save: true,
                    cookie: {
                        name: 'navgoco',
                        expires: false,
                        path: '/'
                    },
                    slide: {
                        duration: 400,
                        easing: 'swing'
                    }
                });

                $("#collapseAll").click(function(e) {
                    e.preventDefault();
                    $("#mysidebar").navgoco('toggle', false);
                });

                $("#expandAll").click(function(e) {
                    e.preventDefault();
                    $("#mysidebar").navgoco('toggle', true);
                });

            });

        </script>


        









        <ul id="mysidebar" class="nav">

            <span class="siteTagline">Edgent</span>
            <span class="versionTagline">Version 1.2.0-incubating</span>

            
            
            
                
            
            <li><a href="#">Overview</a>
                <ul>
                    
                    
                    
                    
                    <li><a href="../docs/edgent_index.html">Introduction</a></li>
                    

                    

                    
                    
                    
                    
                    
                    <li><a href="../docs/home.html">Edgent Overview</a></li>
                    

                    

                    
                    
                    
                    
                    
                    <li><a href="../docs/power-of-edgent.html">The Power of Edgent</a></li>
                    

                    

                    
                    
                    
                    
                    
                    <li><a href="../docs/faq.html">FAQ</a></li>
                    

                    

                    
                    
                </ul>
                
                
            
            <li><a href="#">Get Started</a>
                <ul>
                    
                    
                    
                    
                    <li class="active"><a href="../docs/downloads.html">Downloads</a></li>
                    

                    

                    
                    
                    
                    
                    
                    <li><a href="../docs/edgent-getting-started.html">Getting Started Guide</a></li>
                    

                    

                    
                    
                    
                    
                    
                    <li><a href="../docs/edgent-getting-started-samples.html">Quickstart with Edgent Samples</a></li>
                    

                    

                    
                    
                    
                    
                    
                    <li><a href="../docs/application-development.html">Understanding App Development</a></li>
                    

                    

                    
                    
                    
                    
                    
                    <li><a href="../docs/quickstart.html">Quickstart IBM Watson IoT Platform</a></li>
                    

                    

                    
                    
                    
                    
                    
                    <li><a href="../docs/streaming-concepts.html">Streaming concepts</a></li>
                    

                    

                    
                    
                    
                    
                    
                    <li><a href="../docs/common-edgent-operations.html">Common operations</a></li>
                    

                    

                    
                    
                </ul>
                
                
            
            <li><a href="#">Edgent Cookbook</a>
                <ul>
                    
                    
                    
                    
                    <li><a href="../recipes/recipe_hello_edgent.html">Hello Edgent!</a></li>
                    

                    

                    
                    
                    
                    
                    
                    <li><a href="../recipes/recipe_source_function.html">Writing a source function</a></li>
                    

                    

                    
                    
                    
                    
                    
                    <li><a href="../recipes/recipe_value_out_of_range.html">Detecting a sensor value out of expected range</a></li>
                    

                    

                    
                    
                    
                    
                    
                    <li><a href="../recipes/recipe_different_processing_against_stream.html">Applying different processing against a single stream</a></li>
                    

                    

                    
                    
                    
                    
                    
                    <li><a href="../recipes/recipe_combining_streams_processing_results.html">Splitting a stream to apply different processing and combining the results into a single stream</a></li>
                    

                    

                    
                    
                    
                    
                    
                    <li><a href="../recipes/recipe_external_filter_range.html">Using an external configuration file for filter ranges</a></li>
                    

                    

                    
                    
                    
                    
                    
                    <li><a href="../recipes/recipe_adaptable_filter_range.html">Changing a filter's range</a></li>
                    

                    

                    
                    
                    
                    
                    
                    <li><a href="../recipes/recipe_adaptable_polling_source.html">Changing a polled source stream's period</a></li>
                    

                    

                    
                    
                    
                    
                    
                    <li><a href="../recipes/recipe_adaptable_deadtime_filter.html">Using an adaptable deadtime filter</a></li>
                    

                    

                    
                    
                    
                    
                    
                    <li><a href="../recipes/recipe_dynamic_analytic_control.html">Dynamically enabling analytic flows</a></li>
                    

                    

                    
                    
                    
                    
                    
                    <li><a href="../recipes/recipe_parallel_analytics.html">How can I run analytics on several tuples in parallel?</a></li>
                    

                    

                    
                    
                    
                    
                    
                    <li><a href="../recipes/recipe_concurrent_analytics.html">How can I run several analytics on a tuple concurrently?</a></li>
                    

                    

                    
                    
                    
                    
                    
                    <li><a href="../recipes/recipe_writing_a_connector.html">How do I write a connector?</a></li>
                    

                    

                    
                    
                </ul>
                
                
            
            <li><a href="#">Using the Console</a>
                <ul>
                    
                    
                    
                    
                    <li><a href="../docs/console.html">Using the console</a></li>
                    

                    

                    
                    
                </ul>
                
                
            
            <li><a href="#">Get Involved</a>
                <ul>
                    
                    
                    
                    
                    <li><a href="../docs/community.html">How to participate</a></li>
                    

                    

                    
                    
                    
                    
                    
                    <li><a href="../docs/committers.html">Committers</a></li>
                    

                    

                    
                    
                </ul>
                
                
                


                <!-- if you aren't using the accordion, uncomment this block:

                     <p class="external">
                         <a href="#" id="collapseAll">Collapse All</a> | <a href="#" id="expandAll">Expand All</a>
                     </p>
                 -->
				 <br/>
			</li>
		</ul>
		<div class="row">
		<div class="col-md-12">
			
<!-- this handles the automatic toc. use ## for subheads to auto-generate the on-page minitoc. if you use html tags, you must supply an ID for the heading element in order for it to appear in the minitoc. -->
<script>
$( document ).ready(function() {
  // Handler for .ready() called.

$('#toc').toc({ minimumHeaders: 0, listType: 'ul', showSpeed: 0, headers: 'h2,h3,h4' });

/* this offset helps account for the space taken up by the floating toolbar. */
$('#toc').on('click', 'a', function() {
  var target = $(this.getAttribute('href'))
    , scroll_target = target.offset().top

  $(window).scrollTop(scroll_target - 10);
  return false
})
  
});
</script>


<div id="toc"></div>

		</div>
	</div>
	</div>
	
    <!-- this highlights the active parent class in the navgoco sidebar. this is critical so that the parent expands when you're viewing a page. This must appear below the sidebar code above. Otherwise, if placed inside customscripts.js, the script runs before the sidebar code runs and the class never gets inserted.-->
    <script>$("li.active").parents('li').toggleClass("active");</script>


            <!-- Content Column -->
            <div class="col-md-9">
                
                <div class="post-header">
   <h1 class="post-title-main">Downloads</h1>
</div>

<div class="post-content">

   

<!-- this handles the automatic toc. use ## for subheads to auto-generate the on-page minitoc. if you use html tags, you must supply an ID for the heading element in order for it to appear in the minitoc. -->
<script>
$( document ).ready(function() {
  // Handler for .ready() called.

$('#toc').toc({ minimumHeaders: 0, listType: 'ul', showSpeed: 0, headers: 'h2,h3,h4' });

/* this offset helps account for the space taken up by the floating toolbar. */
$('#toc').on('click', 'a', function() {
  var target = $(this.getAttribute('href'))
    , scroll_target = target.offset().top

  $(window).scrollTop(scroll_target - 10);
  return false
})
  
});
</script>


<div id="toc"></div>


    

    <a target="_blank" href="https://github.com/apache/incubator-edgent-website/blob/master/site/docs/downloads.md" class="btn btn-default githubEditButton" role="button"><i class="fa fa-github fa-lg"></i> Edit me</a>
    
  <p>Official ASF Apache Edgent releases consist of a single Edgent SDK/runtime source bundle and convenience binaries. Convenience binary jars for the Edgent SDK/runtime are available at the <a href="https://repository.apache.org/content/repositories/releases/">ASF Nexus Releases Repository</a> and Maven Central.  </p>

<p>See <a href="edgent-getting-started-samples">Quickstart with Edgent Samples</a> if you just want to use Edgent and jump-start your Edgent application development.</p>

<p>Note, a separate binary bundle consisting of all of the Edgent runtime jars is not released.  A tool is available in the samples that can create one.</p>

<p>A source bundle contains a README describing how to build the sources.</p>

<p>If you want to access the latest unreleased Edgent source or contribute to the Edgent runtime development, use the <a href="https://github.com/apache/incubator-edgent">GitHub repository</a>. You can also select a particular release version by release tag (e.g., 1.0.0-incubating). See <a href="https://github.com/apache/incubator-edgent/blob/master/README.md">README.md</a> and <a href="https://github.com/apache/incubator-edgent/blob/master/DEVELOPMENT.md">DEVELOPMENT.md</a> in the repository for more information.</p>

<p>See the <a href="community">community</a> page for more information about contributing to Edgent development.</p>

<h2 id="apache-edgent-releases">Apache Edgent Releases</h2>

<table><thead>
<tr>
<th style="text-align: center">Version</th>
<th style="text-align: center">Docs</th>
</tr>
</thead><tbody>
<tr>
<td style="text-align: center">1.2.0-incubating</td>
<td style="text-align: center"><a href="https://github.com/apache/incubator-edgent/blob/edgent-1.2.0/JAVA_SUPPORT.md">JAVA_SUPPORT</a>, <a href="/javadoc/r1.2.0/index.html">Javadoc</a>, <a href="edgent-getting-started-samples">Samples</a></td>
</tr>
</tbody></table>

<p>It is essential that you verify the integrity of a downloaded bundle.  See <a href="https://www.apache.org/dyn/closer.cgi#verify">how to verify</a> for details on verifying using downloaded KEYS, PGP signature, MD5, or SHA information.</p>

<p>Download the <a href="https://www.apache.org/dist/incubator/edgent/KEYS">KEYS</a> file for verifying a bundle&#39;s PGP signature.</p>

<table><thead>
<tr>
<th style="text-align: center">Version</th>
<th style="text-align: center">Date</th>
<th style="text-align: center">Bundles</th>
<th style="text-align: center">Release Notes</th>
<th style="text-align: center">PGP</th>
<th style="text-align: center">MD5</th>
<th style="text-align: center">SHA</th>
</tr>
</thead><tbody>
<tr>
<td style="text-align: center">1.2.0-incubating</td>
<td style="text-align: center">2017-12-14</td>
<td style="text-align: center"><a href="https://www.apache.org/dyn/closer.cgi/incubator/edgent/1.2.0-incubating">Source</a></td>
<td style="text-align: center"><a href="https://www.apache.org/dist/incubator/edgent/1.2.0-incubating/RELEASE_NOTES">1.2.0 Release</a></td>
<td style="text-align: center"><a href="https://www.apache.org/dist/incubator/edgent/1.2.0-incubating/apache-edgent-1.2.0-incubating-source-release.tar.gz.asc">tar-ASC</a></td>
<td style="text-align: center"><a href="https://www.apache.org/dist/incubator/edgent/1.2.0-incubating/apache-edgent-1.2.0-incubating-source-release.tar.gz.md5">tar-MD5</a></td>
<td style="text-align: center"><a href="https://www.apache.org/dist/incubator/edgent/1.2.0-incubating/apache-edgent-1.2.0-incubating-source-release.tar.gz.sha512">tar-SHA</a></td>
</tr>
<tr>
<td style="text-align: center"></td>
<td style="text-align: center"></td>
<td style="text-align: center"></td>
<td style="text-align: center"></td>
<td style="text-align: center"><a href="https://www.apache.org/dist/incubator/edgent/1.2.0-incubating/apache-edgent-1.2.0-incubating-source-release.zip.asc">zip-ASC</a></td>
<td style="text-align: center"><a href="https://www.apache.org/dist/incubator/edgent/1.2.0-incubating/apache-edgent-1.2.0-incubating-source-release.zip.md5">zip-MD5</a></td>
<td style="text-align: center"><a href="https://www.apache.org/dist/incubator/edgent/1.2.0-incubating/apache-edgent-1.2.0-incubating-source-release.zip.sha512">zip-SHA</a></td>
</tr>
</tbody></table>

<h2 id="releases-prior-to-1-2-0">Releases Prior to 1.2.0</h2>

<p>Official Apache Edgent releases are available for download from the ASF distribution site. A release consists of a source code bundle and a convenience binary bundle. See the table below for a release&#39;s download links.</p>

<p>There is not a separate samples source bundle and convenience binary jars are not distributed to the ASF Nexus Repository or Maven Central.</p>

<p>If you just want to use Edgent, it is easiest to download and unpack a binary bundle. The bundle includes the release&#39;s Javadoc. The Javadoc is also accessible online. For more information, please refer to the <a href="edgent-getting-started">Getting started guide</a>.</p>

<p>A source bundle contains a README describing how to build the sources.</p>

<p>It is essential that you verify the integrity of a downloaded bundle.  See <a href="https://www.apache.org/dyn/closer.cgi#verify">how to verify</a> for details on verifying using downloaded KEYS, PGP signature, MD5, or SHA information.</p>

<p>Download the <a href="https://www.apache.org/dist/incubator/edgent/KEYS">KEYS</a> file for verifying a bundle&#39;s PGP signature.</p>

<table><thead>
<tr>
<th style="text-align: center">Version</th>
<th style="text-align: center">Date</th>
<th style="text-align: center">Bundles</th>
<th style="text-align: center">Release Notes</th>
<th style="text-align: center">Docs</th>
<th style="text-align: center">PGP</th>
<th style="text-align: center">MD5</th>
<th style="text-align: center">SHA</th>
</tr>
</thead><tbody>
<tr>
<td style="text-align: center">1.1.0-incubating</td>
<td style="text-align: center">2017-03-20</td>
<td style="text-align: center"><a href="https://www.apache.org/dyn/closer.cgi/incubator/edgent/1.1.0-incubating">Source</a></td>
<td style="text-align: center"><a href="https://www.apache.org/dist/incubator/edgent/1.1.0-incubating/RELEASE_NOTES">1.1.0 Release</a></td>
<td style="text-align: center"><a href="https://edgent.incubator.apache.org/javadoc/r1.1.0/index.html">Javadoc</a></td>
<td style="text-align: center"><a href="https://www.apache.org/dist/incubator/edgent/1.1.0-incubating/apache-edgent-1.1.0-incubating-src.tgz.asc">ASC</a></td>
<td style="text-align: center"><a href="https://www.apache.org/dist/incubator/edgent/1.1.0-incubating/apache-edgent-1.1.0-incubating-src.tgz.md5">MD5</a></td>
<td style="text-align: center"><a href="https://www.apache.org/dist/incubator/edgent/1.1.0-incubating/apache-edgent-1.1.0-incubating-src.tgz.sha">SHA</a></td>
</tr>
<tr>
<td style="text-align: center"></td>
<td style="text-align: center"></td>
<td style="text-align: center"><a href="https://www.apache.org/dyn/closer.cgi/incubator/edgent/1.1.0-incubating/binaries">Binary</a></td>
<td style="text-align: center"></td>
<td style="text-align: center"></td>
<td style="text-align: center"><a href="https://www.apache.org/dist/incubator/edgent/1.1.0-incubating/binaries/apache-edgent-1.1.0-incubating-bin.tgz.asc">ASC</a></td>
<td style="text-align: center"><a href="https://www.apache.org/dist/incubator/edgent/1.1.0-incubating/binaries/apache-edgent-1.1.0-incubating-bin.tgz.md5">MD5</a></td>
<td style="text-align: center"><a href="https://www.apache.org/dist/incubator/edgent/1.1.0-incubating/binaries/apache-edgent-1.1.0-incubating-bin.tgz.sha">SHA</a></td>
</tr>
<tr>
<td style="text-align: center">1.0.0-incubating</td>
<td style="text-align: center">2016-12-15</td>
<td style="text-align: center"><a href="https://archive.apache.org/dist/incubator/edgent/1.0.0-incubating/apache-edgent-1.0.0-incubating-src.tgz">Source</a></td>
<td style="text-align: center"><a href="https://archive.apache.org/dist/incubator/edgent/1.0.0-incubating/RELEASE_NOTES">1.0.0 Release</a></td>
<td style="text-align: center"><a href="https://edgent.incubator.apache.org/javadoc/r1.0.0/index.html">Javadoc</a></td>
<td style="text-align: center"><a href="https://archive.apache.org/dist/incubator/edgent/1.0.0-incubating/apache-edgent-1.0.0-incubating-src.tgz.asc">ASC</a></td>
<td style="text-align: center"><a href="https://archive.apache.org/dist/incubator/edgent/1.0.0-incubating/apache-edgent-1.0.0-incubating-src.tgz.md5">MD5</a></td>
<td style="text-align: center"><a href="https://archive.apache.org/dist/incubator/edgent/1.0.0-incubating/apache-edgent-1.0.0-incubating-src.tgz.sha">SHA</a></td>
</tr>
<tr>
<td style="text-align: center"></td>
<td style="text-align: center"></td>
<td style="text-align: center"><a href="https://archive.apache.org/dist/incubator/edgent/1.0.0-incubating/binaries/apache-edgent-1.0.0-incubating-bin.tgz">Binary</a></td>
<td style="text-align: center"></td>
<td style="text-align: center"></td>
<td style="text-align: center"><a href="https://archive.apache.org/dist/incubator/edgent/1.0.0-incubating/binaries/apache-edgent-1.0.0-incubating-bin.tgz.asc">ASC</a></td>
<td style="text-align: center"><a href="https://archive.apache.org/dist/incubator/edgent/1.0.0-incubating/binaries/apache-edgent-1.0.0-incubating-bin.tgz.md5">MD5</a></td>
<td style="text-align: center"><a href="https://archive.apache.org/dist/incubator/edgent/1.0.0-incubating/binaries/apache-edgent-1.0.0-incubating-bin.tgz.sha">SHA</a></td>
</tr>
</tbody></table>


<div class="tags">
    
</div>

<!-- 

    <div id="disqus_thread"></div>
    <script type="text/javascript">
        /* * * CONFIGURATION VARIABLES: EDIT BEFORE PASTING INTO YOUR WEBPAGE * * */
        var disqus_shortname = 'idrbwjekyll'; // required: replace example with your forum shortname

        /* * * DON'T EDIT BELOW THIS LINE * * */
        (function() {
            var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
            dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
            (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
        })();
    </script>
    <noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
 -->

</div>



<footer>
    <div class="row">
        <div class="col-lg-12 footer">

             Site last
            generated: Apr 3, 2019 <br/>

        </div>
    </div>
    <br/>
    <div class="row">
        <div class="col-md-12">
            <p class="small">Apache Edgent is an effort undergoing Incubation at The Apache Software
                Foundation (ASF), sponsored by the Incubator. Incubation is required of all newly accepted projects
                until a further review indicates that the infrastructure, communications, and decision making process
                have stabilized in a manner consistent with other successful ASF projects. While incubation status is
                not necessarily a reflection of the completeness or stability of the code, it does indicate that the
                project has yet to be fully endorsed by the ASF.</p>
        </div>
    </div>
    <div class="row">
        <div class="col-md-12">
            <p class="small">Copyright © 2016 The Apache Software Foundation. Licensed under the Apache
                License, Version 2.0.
                Apache, the Apache Feather logo, and the Apache Incubator project logo are trademarks of The Apache
                Software Foundation. All other marks mentioned may be trademarks or registered trademarks of their
                respective owners.</p>
        </div>
    </div>

    <div class="container">
        <div class="row">
        <div>
            <img class="img-responsive center-block" src="../img/edgent_incubation.png" style="display: block; margin: auto;"alt="">
        </div>
    </div>
</footer>

            </div><!-- /.row -->

    </div>    <!-- /.container -->

</body>


</html>

