---
layout: default
---

<!--
 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 id="banner-box" class="bottom-arrow">
    <div id="inner-banner-box">
        <div id="banner">
            <div id="nat-lang-itf">Apache NLPCraft</div>
            <h1 id="banner-sub-title">An API to convert natural language into actions</h1>
            <div>
                <a id="get-started-btn" role="button" href="docs.html" class="btn mt-5">GET STARTED <i class="ml-2 fas fa-angle-right"></i></a>
            </div>
        </div>
    </div>
</div>

<div id="about-nlpcraft" class="bottom-arrow main-section">
    <div class="container-fluid">
        <div class="row">
            <div class="col-4">
                <h2 class="section-title">What Is <span>NLPCraft</span></h2>
                <section>
                    <p>
                        Apache NLPCraft&reg; is an open source library for adding natural language Interface
                        to any applications. Based on semantic modelling it allows rapid implementation and
                        requires no model training or pre-existing text corpora.
                    </p>
                    <p>
                        Define a semantic model and intents to interpret
                        user input using any JVM-based language like Java, Scala, Groovy or Kotlin. Deploy the model and use REST API to explore the data using natural language.
                    </p>
                    <div class="learn-more">
                        <a href="docs.html">Learn more <i class="align-text-bottom fas fa-angle-right"></i></a>
                    </div>
                </section>
            </div>
            <div class="col-4">
                <h2 class="section-title">Natural <span>Language</span></h2>
                <section>
                    <p>
                        Natural Language Interface (NLI) enables users to explore any type of data
                        sources using natural language augmenting existing UI/UX with fidelity
                        and simplicity of a familiar spoken language.
                    </p>
                    <p>
                        There is no learning curve, no special rules or UI to master, no cumbersome syntax or terms to remember -
                        just a natural language that your users already speak.
                    </p>
                </section>
            </div>
            <div class="col-4">
                <h2 class="section-title">Quick <span>Links</span></h2>
                <section>
                    <div class="quick-link" >
                        <a href="https://github.com/apache/incubator-nlpcraft" target="github">
                            <img
                                class="quick-link-img"
                                src="{{ 'images/github_logo.png' | relative_url }}" alt="">
                        </a>
                        <div class="gh-btn">
                            <a
                                class="github-button"
                                href="https://github.com/apache/incubator-nlpcraft/subscription"
                                data-icon="octicon-eye"
                                aria-label="Watch on GitHub">Watch</a>
                        </div>
                        <div class="gh-btn">
                            <a
                                class="github-button"
                                href="https://github.com/apache/incubator-nlpcraft/tree/master/src/main/scala/org/apache/nlpcraft/examples"
                                aria-label="NLPCraft examples on GitHub">Examples</a>
                        </div>
                        <a target=_ href="https://gitter.im/apache-nlpcraft/community"><img alt="Gitter" src="https://badges.gitter.im/apache-nlpcraft/community.svg"></a>
                    </div>
                    <div class="quick-link" >
                        <a href="/apis/latest/index.html" target="_">
                            <img alt="" class="quick-link-img" src="{{ 'images/java.png' | relative_url }}">
                            <span class="txt">Latest&nbsp;</span>
                            <a target="_" href="https://javadoc.io/doc/org.apache.nlpcraft/nlpcraft"><img src="https://javadoc.io/badge/org.apache.nlpcraft/nlpcraft.svg" alt="Javadocs"></a>
                        </a>
                        <a href="https://github.com/apache/incubator-nlpcraft/blob/master/openapi/nlpcraft_swagger.yml" target="github" style="margin-left: 20px">
                            <img alt="" class="quick-link-img" src="{{ 'images/swagger.png' | relative_url }}"><span class="txt">REST API</span>
                        </a>
                    </div>
                    <div class="quick-link">
                        <img alt="" class="quick-link-img" src="{{ 'images/apache_20_logo2.png' | relative_url }}">
                        <a target="asf" href="https://www.apache.org/events/current-event.html"><span class="txt">Events</span></a>
                        <span class="sep">•</span>
                        <a target="asf" href="https://www.apache.org/licenses/"><span class="txt">License</span></a>
                        <span class="sep">•</span>
                        <a target="asf" href="https://www.apache.org/security"><span class="txt">Security</span></a>
                        <span class="sep">•</span>
                        <a target="asf" href="https://www.apache.org/foundation/thanks.html"><span class="txt">Thanks</span></a>
                        <span class="sep">•</span>
                        <a target="asf" href="https://www.apache.org/foundation/sponsorship.html"><span class="txt">Sponsorship</span></a>
                    </div>
                </section>
            </div>
        </div>
    </div>
</div>

<div id="features" class="bottom-arrow main-section">
    <div class="container-fluid">
        <div class="row">
            <div class="col-12">
                <h2 class="section-title">Key <span>Features</span></h2>
            </div>
        </div>
        <div class="row">
            <div class="col-4">
                <h3 class="sub-section-title">Semantic Modeling</h3>
                <section>
                    <p>
                        Advanced semantic modelling and intent-based matching enables
                        deterministic natural language understanding without
                        requiring deep learning training or pre-existing text corpora.
                    </p>
                </section>
            </div>
            <div class="col-4">
                <h3 class="sub-section-title">Any Data Source</h3>
                <section>
                    <p>
                        Any data source, device, or service - public or private. From databases and SaaS systems,
                        to smart home devices, voice assistants and chatbots.
                    </p>
                </section>
            </div>
            <div class="col-4">
                <h3 class="sub-section-title">Java-First</h3>
                <section>
                    <p>
                        REST API and Java-based implementation natively
                        support world's largest ecosystem of development tools, programming languages and services.
                    </p>
                </section>
            </div>
        </div>
        <div class="row mt-4">
            <div class="col-4">
                <h3 class="sub-section-title">Strong Security</h3>
                <section>
                    <p>
                        HTTPs, model deployment isolation, 256-bit encryption and ingress-only connectivity are
                        among the key security features in NLPCraft.
                    </p>
                </section>
            </div>
            <div class="col-4">
                <h3 class="sub-section-title">Model-As-A-Code</h3>
                <section>
                    <p>
                        Model-as-a-code convention natively
                        supports any system development life cycle tools and frameworks in Java eco-system.
                    </p>
                </section>
            </div>
            <div class="col-4">
                <h3 class="sub-section-title">Out-Of-The-Box Integration</h3>
                <section>
                    <p>
                        NLPCraft natively <a href="/integrations.html">integrates</a> with 3rd party libraries for base NLP processing
                        and named entity recognition:
                    </p>
                    <div id="integration-logos">
                        <a target=_ href="https://opennlp.apache.org"><img src="/images/opennlp-logo.png" height="32px" alt=""></a>
                        <a target=_ href="https://cloud.google.com/natural-language/"><img src="/images/google-cloud-logo-small.png" height="32px" alt=""></a>
                        <a target=_ href="https://stanfordnlp.github.io/CoreNLP"><img src="/images/corenlp-logo.gif" height="48px" alt=""></a>
                        <a target=_ href="https://spacy.io"><img src="/images/spacy-logo.png" height="32px" alt=""></a>
                    </div>
                </section>
            </div>
        </div>
        <div class="learn-more">
            <a href="docs.html">Learn more <i class="align-text-bottom fas fa-angle-right"></i></a>
        </div>
    </div>
</div>

<div id="howitworks" class="bottom-arrow main-section">
    <div class="container-fluid">
        <div class="row">
            <div class="col-12">
                <h2 class="section-title">How <span>It Works</span></h2>
            </div>
        </div>
        <div class="row d-flex flex-wrap align-items-center">
            <div class="col-6">
                <section>
                    <p>
                        There are three main software components:
                        <p>
                        <b>Data model</b> specifies how to interpret user input, how to query a data
                        source, and how to format the result back. Developers use model-as-a-code approach
                        to build models using any JVM language like Java, Scala, Groovy or Kotlin.
                        <p>
                        <b>Data probe</b> is a DMZ-deployed application designed to securely
                        deploy and manage data models. Each probe can manage multiple models and you can
                        have many probes.
                        <p>
                        <b>REST server</b> provides REST endpoint for user applications to securely query data
                        sources using NLI via data models deployed in data probes.
                    </p>
                </section>
            </div>
            <div class="col-6">
                <center>
                    <img class="img-fluid" src="{{ 'images/homepage-fig1.1.png' | relative_url}}" alt="">
                </center>
            </div>
        </div>
        <div class="learn-more">
            <a href="docs.html">Learn more <i class="align-text-bottom fas fa-angle-right"></i></a>
        </div>
    </div>
</div>

<div id="news" class="bottom-arrow main-section">
    <div class="container-fluid">
        <div class="row">
            <div class="col-12">
                <h2 class="section-title">Latest <span>News</span></h2>
            </div>
        </div>
        <div id="news-container" class="row">
            {% for news in site.data.news %}
            <div class="col-4">
                <div class="news-title">
                    <a href="{{ news.url }}" target=_>
                        {{ news.title }}
                    </a>
                </div>
                <div class="news-excerpt">
                    {{ news.excerpt}}&nbsp;<a target=_ href="{{ news.url }}"><i class="fas fa-angle-double-right"></i></a>
                </div>
                <div class="news-footer">
                    {% if news.avatar_url %}<img class="avatar-img" src="{{ news.avatar_url | relative_url}}" alt="">{% endif %}
                    {% if news.pub_logo_url %}<img class="pub-logo-img" src="{{ news.pub_logo_url | relative_url}}" alt="">{% endif %}
                    {% if news.medium_id %}<a class="news-author text-nowrap " target="news" href="https://medium.com/@{{ news.medium_id}}">{{ news.author }}</a>{% endif %}
                    {% if news.linkedin_id %}<a target="linkedin" href="https://www.linkedin.com/in/{{ news.linkedin_id}}/"><i class="fab fa-fw fa-linkedin"></i></a>{% endif %}
                    {% if news.medium_id %}<a target="medium" href="https://medium.com/@{{ news.medium_id}}"><i class="fab fa-fw fa-medium"></i></a>{% endif %}
                    {% if news.twitter_id %}<a target="twitter" href="https://twitter.com/{{ news.twitter_id}}"><i class="fab fa-fw fa-twitter"></i></a>{% endif %}
                    <span class="text-nowrap news-date">{{ news.publish_date }}</span>
                </div>
            </div>
            {% endfor %}
        </div>
    </div>
</div>

<div id="about" class="bottom-arrow main-section">
    <div class="container-fluid">
        <div id="about-container" class="row">
            <div class="col-12" style="margin-top: 50px;">
<!--                <p align="center">-->
<!--                    <a href="https://www.apache.org/licenses/LICENSE-2.0" target=_><img src="{{ 'images/asf20.jpg' | relative_url}}" height="64px" alt=""></a>-->
<!--                </p>-->
                <center>
                    <a href="https://incubator.apache.org/" target=_><img src="{{ 'images/apache_incubator.png' | relative_url}}" height="64px" alt=""></a>
                </center>
                <p style="font-size: 90%; margin: 2% 20% 0 20%">
                    Apache NLPCraft is an effort undergoing incubation at The Apache Software Foundation (ASF),
                    sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a
                    further review indicates that the infrastructure, communications, and decision making process have
                    stabilized in a manner consistent with other successful ASF projects. While incubation status is not
                    necessarily a reflection of the completeness or stability of the code, it does indicate that the
                    project has yet to be fully endorsed by the ASF. Licensed under the Apache License, Version 2.0.
                    Apache NLPCraft, Apache, the Apache feather, and the Apache NLPCraft project logo are either
                    trademarks or registered trademarks of the Apache Software Foundation.
                </p>
            </div>
        </div>
    </div>
</div>



