<!--
 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.
-->

<div class="bq success">
    <p><b>Latest Version</b></p>
    <p>
        At the moment of this writing, the project undergoes incubation at <a target=asf href="https://apache.org/">Apache Software Foundation</a>, the
        <a href="/download.html">latest version</a> of NLPCraft is <b>{{site.latest_version}}</b>. In some rare cases, APIs might have changed
        since this article was written. Consult the latest <a href="/docs.html">documentation</a> for up-to-date information.
    </p>
</div>