---
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">
        <ul class="side-nav">
            <li class="side-nav-title">Introduction</li>
            <li><a href="/docs.html">Overview</a></li>
            <li><a href="/installation.html">Installation</a></li>
            <li><a href="/getting-started.html">Getting Started</a></li>
        </ul>
    </div>
    <div class="col-md-8 second-column">
        <section id="prerequisites">
            <h2 class="section-title">Support</h2>
            <p>
                Here's the list of tools you will need to get started with NLPCraft:
            </p>
            <ul>
                <li>
                    <a target=_new href="https://www.oracle.com/technetwork/java/javase/downloads/index.html">Java SE Runtime Environment</a>
                    (JRE) or <a target=_new href="https://openjdk.java.net/">OpenJDK</a> ver. 8 or later installed.
                    <ul>
                        <li>
                            Java 8 and Scala 2.11 are required to build NLPCraft (Java 11 is NOT supported).
                        </li>
                        <li>
                            For runtime Java 8 or later is supported.
                        </li>
                    </ul>
                </li>
                <li>
                    Latest versions of <a target=_ href="https://git-scm.com/downloads">Git</a> and
                    <a target=_ href="https://maven.apache.org/install.html">Maven</a>.
                </li>
            </ul>
            <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>
                </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">Source Release</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>Release Date</th>
                    <th>Signatures</th>
                    <th></th>
                </tr>
                </thead>
                <tbody>
                {% for rel in site.data.src-releases %}
                <tr>
                    <td>
                        <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 %}
                    </td>
                    <td>{{rel.version}}</td>
                    <td>{{rel.date}}</td>
                    <td class="download-sigs">
                        <a href="{{rel.sha256_url}}">SHA256</a>
                        <a href="{{rel.pgp_url}}">PGP</a>
                    </td>
                    <td>
                        <a href="/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 info">
                <p>
                    Releases marked with <i class="fas fa-fw fa-bomb"></i> are <b>NOT</b> backward compatible.
                </p>
                <p>
                    The above 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 / Docker</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>Release Date</th>
                    <th>Signatures</th>
                    <th></th>
                </tr>
                </thead>
                <tbody>
                {% for rel in site.data.bin-releases %}
                <tr>
                    <td>
                        <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 %}
                    </td>
                    <td>{{rel.version}}</td>
                    <td>{{rel.date}}</td>
                    <td class="download-sigs">
                        <a href="{{rel.sha256_url}}">SHA256</a>
                        <a href="{{rel.pgp_url}}">PGP</a>
                    </td>
                    <td>
                        <a href="/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="http://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> backward compatible.
                </p>
            </div>
        </section>
        <section id="build">
            <h2 class="section-title">Building Binaries</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: plain">
                $ unzip -q apache-nlpcraft-incubating-{{site.latest_version}}.zip
                $ cd apache-nlpcraft-incubating-{{site.latest_version}}
            </pre>
            <b>Build NLPCraft:</b>
            <pre class="brush: plain">
                $ mvn clean package -DskipTests
            </pre>
            <p>
                Built JARs and Javadoc will be located in <code>target</code> sub-folder.
            </p>
        </section>
        <section id="verification">
            <h2 class="section-title">Release Verification</h2>
            <p>
                We highly recommend to verify the integrity and authenticity of the ZIP archive by comparing cryptographic
                signatures. Following instructions assume binary release on Mac OS/Linux environment but the verification steps are
                similar for Windows. 
            </p>
            <h3 class="section-title">Mac OS</h3>
            <nav>
                <div class="nav nav-tabs" role="tablist">
                    <a class="nav-item nav-link active" data-toggle="tab" href="#nav-macos-sha256" role="tab" aria-controls="nav-home" aria-selected="true">SHA256</a>
                    <a class="nav-item nav-link" data-toggle="tab" href="#nav-macos-pgp" role="tab" aria-controls="nav-home" aria-selected="true">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>
            <h3 class="section-title">Linux</h3>
            <nav>
                <div class="nav nav-tabs" role="tablist">
                    <a class="nav-item nav-link active" data-toggle="tab" href="#nav-linux-sha256" role="tab" aria-controls="nav-home" aria-selected="true">SHA256</a>
                    <a class="nav-item nav-link" data-toggle="tab" href="#nav-linux-pgp" role="tab" aria-controls="nav-home" aria-selected="true">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</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.
            </p>
            <nav>
                <div class="nav nav-tabs" role="tablist">
                    <a class="nav-item nav-link active" data-toggle="tab" href="#nav-maven" role="tab" aria-controls="nav-home" aria-selected="true">Maven <sup>Java</sup></a>
                    <a class="nav-item nav-link" data-toggle="tab" href="#nav-grape" role="tab" aria-controls="nav-profile" aria-selected="false">Grape <sup>Groovy</sup></a>
                    <a class="nav-item nav-link" data-toggle="tab" href="#nav-gradle" role="tab" aria-controls="nav-profile" aria-selected="false">Gradle <sup>Kotlin</sup></a>
                    <a class="nav-item nav-link" data-toggle="tab" href="#nav-sbt" role="tab" aria-controls="nav-contact" aria-selected="false">SBT <sup>Scala</sup></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 info">
                <p>
                    <b>Latest Version</b>
                </p>
                <p>
                    <code>{{site.latest_version}}</code> is the latest version. You can replace it
                    with a desired version.
                </p>
            </div>
        </section>
        <section id="github">
            <h2 class="section-title">GitHub</h2>
            <p>
                If you want to contribute to the project or build it form the source
                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: plain">
            $ git clone https://github.com/apache/incubator-nlpcraft.git
            $ mvn clean package
            </pre>
            <div class="bq info">
                <p>
                    <b>GitHub vs. ZIP vs. Maven</b>
                </p>
                <p>
                    Use GitHub clone if you want to contribute to the project or build it from source.
                    To build your own models and integrate into your own application it is recommended to
                    download ZIP archive or use build tools and add build dependency.
                </p>
            </div>
        </section>
        <section id="java-client">
            <h2 class="section-title">Java Client <i class="fab fa-java"></i></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" aria-controls="nav-home" aria-selected="true">Maven <sup>Java</sup></a>
                    <a class="nav-item nav-link" data-toggle="tab" href="#nav-java-client-grape" role="tab" aria-controls="nav-profile" aria-selected="false">Grape <sup>Groovy</sup></a>
                    <a class="nav-item nav-link" data-toggle="tab" href="#nav-java-client-gradle" role="tab" aria-controls="nav-profile" aria-selected="false">Gradle <sup>Kotlin</sup></a>
                    <a class="nav-item nav-link" data-toggle="tab" href="#nav-java-client-sbt" role="tab" aria-controls="nav-contact" aria-selected="false">SBT <sup>Scala</sup></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;nlpcraft-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: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: 'nlpcraft-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" % "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>

