---
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="maven">
            <h2 class="section-title">Maven/Grape/SBT <a href="#"><i class="top-link fas fa-fw fa-angle-double-up"></i></a></h2>
            <p>
                The easiest way to start using NLPCraft is to add Maven dependency (Grape, SBT, etc.) to your
                project. NLPCraft project consists of a single module (<code><b>{{site.latest_version}}</b></code> is the latest version).
            </p>
            <nav>
                <div class="nav nav-tabs" role="tablist">
                    <a class="nav-item nav-link active" data-toggle="tab" href="#nav-maven" role="tab">Maven <img src="/images/java2-h20.png" alt=""></a>
                    <a class="nav-item nav-link" data-toggle="tab" href="#nav-grape" role="tab">Grape <img src="/images/groovy-h18.png" alt=""></a>
                    <a class="nav-item nav-link" data-toggle="tab" href="#nav-gradle" role="tab">Gradle <img src="/images/kotlin-h18.png" alt=""></a>
                    <a class="nav-item nav-link" data-toggle="tab" href="#nav-sbt" role="tab">SBT <img src="/images/scala-logo-h16.png" alt=""></a>
                </div>
            </nav>
            <div class="tab-content">
                <div class="tab-pane fade show active" id="nav-maven" role="tabpanel">
                    <pre class="brush: xml">
                    &lt;dependency&gt;
                        &lt;groupId&gt;org.apache.nlpcraft&lt;/groupId&gt;
                        &lt;artifactId&gt;nlpcraft&lt;/artifactId&gt;
                        &lt;version&gt;{{site.latest_version}}&lt;/version&gt;
                    &lt;/dependency&gt;
                    </pre>
                </div>
                <div class="tab-pane fade" id="nav-grape" role="tabpanel">
                    <pre class="brush: java">
                    @Grab ('org.apache.nlpcraft:nlpcraft:{{site.latest_version}}')
                    </pre>
                </div>
                <div class="tab-pane fade" id="nav-gradle" role="tabpanel">
                    <pre class="brush: java">
                    dependencies {
                        runtime group: 'org.apache.nlpcraft', name: 'nlpcraft', version: '{{site.latest_version}}'
                    }
                    </pre>
                </div>
                <div class="tab-pane fade" id="nav-sbt" role="tabpanel">
                    <pre class="brush: scala">
                    libraryDependencies += "org.apache.nlpcraft" % "nlpcraft" % "{{site.latest_version}}"
                    </pre>
                </div>
            </div>
            <p>
                See <a href="/integrations.html#stanford">integration</a> section for additional integration
                with Stanford CoreNLP library that is not part of the official Apache NLPCraft release.
            </p>
        </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="#maven">Maven/Grape/SBT</a></li>
            <li><a href="#github">GitHub</a></li>
            {% include quick-links.html %}
        </ul>
    </div>
</div>

