---
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>
                    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/javadoc-{{rel.version}}/index.html"><i class="fab fa-fw fa-java"></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 warn">
                <p>
                    <b>Supported <i class="fab fa-fw fa-java"></i>Java and <span class="scala-16"></span>Scala versions:</b>
                </p>
                <ul>
                    <li>NLPCraft 0.9.0+ requires JDK 11 and Scala 2.13</li>
                    <li>NLPCraft 0.7.0+ requires JDK 11 and Scala 2.12</li>
                    <li>NLPCraft 0.5.0-0.6.2 requires JDK 8 and Scala 2.12</li>
                </ul>
            </div>
            <div class="bq info">
                <p>
                    Releases marked with <i class="fas fa-fw fa-bomb"></i> are <b>NOT</b> 100% <em>backward</em> compatible.
                </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/javadoc-{{rel.version}}/index.html"><i class="fab fa-fw fa-java"></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 warn">
                <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.
                </p>
                <p>
                    See <a target="asf" href="https://www.apache.org/dev/release.html#what">more</a> information about
                    Apache release policy.
                </p>
            </div>
            <div class="bq info">
                <p>
                    Releases marked with <i class="fas fa-fw fa-bomb"></i> are <b>NOT</b> 100% <em>backward</em> compatible.
                </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>
            <div class="bq warn">
                <p>
                    <b>Missing <code>nlpcraft.{sh|cmd}</code> script</b>
                </p>
                <p>
                    Note that when use just Maven dependencies you will not get non-code components of the project
                    such as <code>nlpcraft.{sh|cmd}</code> management script, SQL for various optional databases,
                    local Javadoc, etc. If you need any of these components you will need to download full project.
                </p>
            </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>
        <section id="java-client">
            <h2 class="section-title">Java Client <i class="fab fa-java"></i> <a href="#"><i class="top-link fas fa-fw fa-angle-double-up"></i></a></h2>
            <p>
                NLPCraft provides native Java Client for <a href="using-rest.html">REST APIs</a>. Java Client is hosted as a separate
                <a target="github" href="https://github.com/apache/incubator-nlpcraft-java-client">GitHub project</a> and you
                can add Maven dependency (Grape, SBT, etc.) to your project to start using it:
            </p>
            <nav>
                <div class="nav nav-tabs" role="tablist">
                    <a class="nav-item nav-link active" data-toggle="tab" href="#nav-java-client-maven" role="tab">Maven <img src="/images/java2-h20.png" alt=""></a>
                    <a class="nav-item nav-link" data-toggle="tab" href="#nav-java-client-grape" role="tab">Grape <img src="/images/groovy-h18.png" alt=""></a>
                    <a class="nav-item nav-link" data-toggle="tab" href="#nav-java-client-gradle" role="tab">Gradle <img src="/images/kotlin-h18.png" alt=""></a>
                    <a class="nav-item nav-link" data-toggle="tab" href="#nav-java-client-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-java-client-maven" role="tabpanel">
                    <pre class="brush: xml">
                    &lt;dependency&gt;
                        &lt;groupId&gt;org.apache.nlpcraft&lt;/groupId&gt;
                        &lt;artifactId&gt;java-client&lt;/artifactId&gt;
                        &lt;version&gt;{{site.java_client_latest_version}}&lt;/version&gt;
                    &lt;/dependency&gt;
                    </pre>
                </div>
                <div class="tab-pane fade" id="nav-java-client-grape" role="tabpanel">
                    <pre class="brush: java">
                    @Grab ('org.apache.nlpcraft:java-client:{{site.java_client_latest_version}}')
                    </pre>
                </div>
                <div class="tab-pane fade" id="nav-java-client-gradle" role="tabpanel">
                    <pre class="brush: java">
                    dependencies {
                        runtime group: 'org.apache.nlpcraft', name: 'java-client', version: '{{site.java_client_latest_version}}'
                    }
                    </pre>
                </div>
                <div class="tab-pane fade" id="nav-java-client-sbt" role="tabpanel">
                    <pre class="brush: scala">
                    libraryDependencies += "org.apache.nlpcraft" % "java-client" % "{{site.java_client_latest_version}}"
                    </pre>
                </div>
            </div>
            <div class="bq info">
                <p>
                    <b>Latest Version</b>
                </p>
                <p>
                    <code>{{site.java_client_latest_version}}</code> is the latest Java Client version. You can replace it
                    with a desired version.
                </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>
            <li><a href="#java-client">Java Client</a></li>
            {% include quick-links.html %}
        </ul>
    </div>
</div>

