---
active_crumb: Download
layout: interior
---

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

<h1 class="page-title">
    <span><i class="fas fa-fw fa-download"></i> {{ page.active_crumb }}</span>
</h1>

<div id="downloads" class="three-cols-container">
    <div class="col-md-2 first-column">
        {% include left-side-menu.html %}
    </div>
    <div class="col-md-8 second-column">
        <section id="prerequisites">
            <h2 class="section-title">Support <a href="#"><i class="top-link fas fa-fw fa-angle-double-up"></i></a></h2>
            <p>
                For any questions, feedback or suggestions:
            </p>
            <ul>
                <li>
                    Look through {% doc installation Installation %} instructions
                <li>
                    File a bug or improvement in <a target="jira" href="https://issues.apache.org/jira/projects/NLPCRAFT">NLPCraft JIRA</a>
                </li>
                <li>
                    Post a question at <i class="fab fa-stack-overflow"></i>&nbsp;<a href="https://stackoverflow.com/questions/ask">Stack Overflow</a> using <code>nlpcraft</code> tag
                </li>
                <li>
                    Access <a target="github" href="https://github.com/apache/incubator-nlpcraft">GitHub</a> mirror repository.
                </li>
                <li>
                    Join project developers on <a href="mailto:dev@nlpcraft.apache.org">dev@nlpcraft.apache.org</a>
                    (<a href="mailto:dev-subscribe@nlpcraft.apache.org">subscribe</a>, <a target="_" href="https://lists.apache.org/list.html?dev@nlpcraft.apache.org">archive</a>)
                </li>
            </ul>
            <p>
                By downloading NLPCraft you are agreeing to <a href="https://www.apache.org/licenses/LICENSE-2.0">Apache 2.0 License</a> terms <span class="amp">&amp;</span> conditions.
            </p>
        </section>
        <section id="src">
            <h2 class="section-title">Official Apache Release <a href="#"><i class="top-link fas fa-fw fa-angle-double-up"></i></a></h2>
            <p>
                Download the NLPCraft release - <code><b>{{site.latest_version}}</b></code> is the latest version:
            </p>
            <table class="gradient-table max-width">
                <thead>
                <tr>
                    <th>File Name</th>
                    <th>Version</th>
                    <th>Java - Scala</th>
                    <th>Release Date</th>
                    <th>Signatures</th>
                    <th></th>
                </tr>
                </thead>
                <tbody>
                {% for rel in site.data.src-releases %}
                <tr style="vertical-align: center">
                    <td>
                        {% if rel.version == site.latest_version %} <b> {% endif %}
                        <i class="fa fa-fw fa-download"></i> <a href="{{rel.zip_url}}">{{rel.zip_name}}</a>
                        {% unless rel.backward_compatible %}<i class="fas fa-fw fa-bomb"></i>{% endunless %}
                        {% if rel.version == site.latest_version %} <span class="latest">new</span> {% endif %}
                        {% if rel.version == site.latest_version %} </b> {% endif %}
                    </td>
                    <td>
                        {% if rel.version == site.latest_version %} <b> {% endif %}
                        <nobr>{{rel.version}}</nobr>
                        {% if rel.version == site.latest_version %} </b> {% endif %}
                    </td>
                    <td>
                        {% if rel.version == site.latest_version %} <b> {% endif %}
                        <nobr>{{rel.sdk}}</nobr>
                        {% if rel.version == site.latest_version %} </b> {% endif %}
                    </td>
                    <td>
                        {% if rel.version == site.latest_version %} <b> {% endif %}
                        {{rel.date}}
                        {% if rel.version == site.latest_version %} </b> {% endif %}
                    </td>
                    <td class="download-sigs">
                        <a href="{{rel.sha256_url}}">SHA256</a>
                        <a href="{{rel.pgp_url}}">PGP</a>
                    </td>
                    <td>
                        <a href="/relnotes/release-notes-{{rel.version}}.html"><i class="fas fa-fw fa-file-alt"></i></a>
                        <a target=_ href="/apis/scaladoc-{{rel.version}}/index.html"><i class="fas fa-fw fa-code"></i></a>
                        <a target="github" href="{{rel.github_link}}"><i class="fab fa-fw fa-github"></i></a>
                    </td>
                </tr>
                {% endfor %}
                </tbody>
            </table>
            <div class="bq info">
                <p>
                    <b>Release Verification</b>
                </p>
                <p>
                    All release files should be verified using the PGP signatures and the <a href="https://downloads.apache.org/incubator/nlpcraft/KEYS">project release KEYS</a>.
                    See official ASF <a target="asf" href="https://www.apache.org/dyn/closer.cgi#verify">verification instructions</a> for a description of using the PGP and KEYS files for verification.
                    A SHA512 checksum is also provided as an alternative verification method.
                </p>
            </div>
        </section>
        <section id="zip">
            <h2 class="section-title">Binary Release <a href="#"><i class="top-link fas fa-fw fa-angle-double-up"></i></a></h2>
            <p>
                Download the NLPCraft binary release - <code><b>{{site.latest_version}}</b></code> is the latest version:
            </p>
            <table class="gradient-table max-width">
                <thead>
                <tr>
                    <th>File Name</th>
                    <th>Version</th>
                    <th>Java - Scala</th>
                    <th>Release Date</th>
                    <th>Signatures</th>
                    <th></th>
                </tr>
                </thead>
                <tbody>
                {% for rel in site.data.bin-releases %}
                <tr>
                    <td>
                        {% if rel.version == site.latest_version %} <b> {% endif %}
                        <i class="fa fa-fw fa-download"></i> <a href="{{rel.zip_url}}">{{rel.zip_name}}</a>
                        {% unless rel.backward_compatible %}<i class="fas fa-fw fa-bomb"></i>{% endunless %}
                        {% if rel.version == site.latest_version %} <span class="latest">new</span> {% endif %}
                        {% if rel.version == site.latest_version %} </b> {% endif %}
                    </td>
                    <td>
                        {% if rel.version == site.latest_version %} <b> {% endif %}
                        {{rel.version}}
                        {% if rel.version == site.latest_version %} </b> {% endif %}
                    </td>
                    <td>
                        {% if rel.version == site.latest_version %} <b> {% endif %}
                        <nobr>{{rel.sdk}}</nobr>
                        {% if rel.version == site.latest_version %} </b> {% endif %}
                    </td>
                    <td><nobr>
                        {% if rel.version == site.latest_version %} <b> {% endif %}
                        {{rel.date}}
                        {% if rel.version == site.latest_version %} </b> {% endif %}
                    </nobr></td>
                    <td class="download-sigs">
                        <a href="{{rel.sha256_url}}">SHA256</a>
                        <a href="{{rel.pgp_url}}">PGP</a>
                    </td>
                    <td>
                        <a href="/relnotes/release-notes-{{rel.version}}.html"><i class="fas fa-fw fa-file-alt"></i></a>
                        <a target=_ href="/apis/scaladoc-{{rel.version}}/index.html"><i class="fas fa-fw fa-code"></i></a>
                        <a target="github" href="{{rel.github_link}}"><i class="fab fa-fw fa-github"></i></a>
                        {% if rel.dockerhub_link %}<a target="docker" href="{{rel.dockerhub_link}}"><i class="fab fa-fw fa-docker"></i></a>{% endif %}
                    </td>
                </tr>
                {% endfor %}
                </tbody>
            </table>
            <div class="bq success">
                <p>
                    <b>Apache Release Policy</b>
                </p>
                <p>
                    Binary downloads are provided for the convenience of our users and <b>are not official</b> Apache NLPCraft
                    releases. In order to verify the release, we recommend that you download the official source
                    distribution and <a href="#verification">verify</a> the signatures of the downloaded files before opening them.
                    See <a target="asf" href="https://www.apache.org/dev/release.html#what">more</a> information about
                    Apache release policy.
                </p>
            </div>
        </section>
        <section id="build">
            <h2 class="section-title">Building Binaries <a href="#"><i class="top-link fas fa-fw fa-angle-double-up"></i></a></h2>
            <p>
                To build binaries from the source release download the <a href="#src">source release</a> and run
                the following commands:
            </p>
            <b>Unpack the source package:</b>
            <pre class="brush: bash">
                $ unzip -q apache-nlpcraft-incubating-{{site.latest_version}}.zip
                $ cd apache-nlpcraft-incubating-{{site.latest_version}}
            </pre>
            <b>Build NLPCraft:</b>
            <pre class="brush: bash">
                $ mvn clean package -P examples -DskipTests
            </pre>
            <p>
                Built JARs and Javadoc will be located in <code>target</code> sub-folders of individual modules.
            </p>
        </section>
        <section id="verification">
            <h2 class="section-title">Release Verification <a href="#"><i class="top-link fas fa-fw fa-angle-double-up"></i></a></h2>
            <p>
                We highly recommend verifying the integrity and authenticity of the ZIP archive by comparing cryptographic
                signatures. Following instructions assume binary release on MacOS/Linux environment but the verification steps are
                similar for Windows. 
            </p>
            <h2 class="section-sub-title">Mac OS <a href="#"><i class="top-link fas fa-fw fa-angle-double-up"></i></a></h2>
            <nav>
                <div class="nav nav-tabs" role="tablist">
                    <a class="nav-item nav-link active" data-toggle="tab" href="#nav-macos-sha256" role="tab">SHA256</a>
                    <a class="nav-item nav-link" data-toggle="tab" href="#nav-macos-pgp" role="tab">PGP</a>
                </div>
            </nav>
            <div class="tab-content">
                <div class="tab-pane fade show active" id="nav-macos-sha256" role="tabpanel">
                <pre class="brush: plain, highlight: [2,3]">
                    # Run these two commands and compare generated hashes:
                    $ openssl dgst -sha256 apache-nlpcraft-incubating-{{site.latest_version}}.zip
                    $ cat apache-nlpcraft-incubating-{{site.latest_version}}.zip.sha256
                </pre>
                </div>
                <div class="tab-pane fade show" id="nav-macos-pgp" role="tabpanel">
                <pre class="brush: plain, highlight: [2]">
                    # NOTE: make sure to have GPGTools (gpgtools.org) installed.
                    $ gpg --verify apache-nlpcraft-incubating-{{site.latest_version}}.zip.asc apache-nlpcraft-incubating-{{site.latest_version}}.zip
                </pre>
                </div>
            </div>
            <h2 class="section-sub-title">Linux <a href="#"><i class="top-link fas fa-fw fa-angle-double-up"></i></a></h2>
            <nav>
                <div class="nav nav-tabs" role="tablist">
                    <a class="nav-item nav-link active" data-toggle="tab" href="#nav-linux-sha256" role="tab">SHA256</a>
                    <a class="nav-item nav-link" data-toggle="tab" href="#nav-linux-pgp" role="tab">PGP</a>
                </div>
            </nav>
            <div class="tab-content">
                <div class="tab-pane fade show active" id="nav-linux-sha256" role="tabpanel">
                <pre class="brush: plain, highlight: [1]">
                    $ sha256sum --check apache-nlpcraft-incubating-{{site.latest_version}}.zip.sha256
                </pre>
                </div>
                <div class="tab-pane fade show" id="nav-linux-pgp" role="tabpanel">
                <pre class="brush: plain, highlight: [1]">
                    $ gpg --verify apache-nlpcraft-incubating-{{site.latest_version}}.zip.asc apache-nlpcraft-incubating-{{site.latest_version}}.zip
                </pre>
                </div>
            </div>
        </section>
        <section id="github">
            <h2 class="section-title">GitHub <i class="fab fa-fw fa-github"></i> <a href="#"><i class="top-link fas fa-fw fa-angle-double-up"></i></a></h2>
            <p>
                If you want to contribute to the project you need to get the full developer snapshot from <a target="github" href="https://github.com/apache/incubator-nlpcraft">GitHub</a> mirror:
            </p>
            <pre class="brush: bash">
            $ git clone https://github.com/apache/incubator-nlpcraft.git
            $ mvn clean package -P examples
            </pre>
            <div class="bq warn">
                <p>
                    <b>GitHub vs. Apache Release</b>
                </p>
                <p>
                    Note that cloned GitHub repository is NOT an official Apache release and it does not
                    come with the guarantees made by the official <a href="#src">Apache release</a> in terms of the licensing.
                    GitHub repository may include content not licensed under ASL 2.0. Only the official
                    <a href="#src">Apache source release</a> is guaranteed to be cleanly licensed under ASL 2.0.
                </p>
            </div>
        </section>
    </div>
    <div class="col-md-2 third-column">
        <ul class="side-nav">
            <li class="side-nav-title">On This Page</li>
            <li><a href="#src">Source Release</a></li>
            <li><a href="#zip">Binary Release</a></li>
            <li><a href="#build">Building Binaries</a></li>
            <li><a href="#verification">Verification</a></li>
            <li><a href="#github">GitHub</a></li>
            {% include quick-links.html %}
        </ul>
    </div>
</div>

