---
active_crumb: Docs
layout: documentation
id: overview
---

<!--
 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 class="col-md-8 second-column">
    <section id="overview">
        <h2 class="section-title">Overview <a href="#"><i class="top-link fas fa-fw fa-angle-double-up"></i></a></h2>
        <p>
            Apache NLPCraft is a Scala3-based <a target=_blank href="https://www.apache.org/licenses/">open source</a> library
            for adding a natural language interface to modern applications. It allows you to build applications that people can
            interact with using a natural language augmenting existing UI/UX with fidelity and simplicity of a familiar
            spoken language. Natural Language has no learning curve, no special rules or cumbersome syntax to master - it's
            a natural interface that your users already know.
        </p>
        <h2 class="section-sub-title">Deterministic Intent Matching <a href="#"><i class="top-link fas fa-fw fa-angle-double-up"></i></a></h2>
        <p>
            NLPCraft is designed around an advanced
            <a href="/intent-matching.html">Intent Definition Language</a> (IDL) for defining non-trivial intents and a
            <em>fully deterministic</em> intent matching algorithm for the input sentences. Full determinism of the NLPCraft is its
            unique capability in contrast to many ML-based approaches that only provide statistical answer without full
            guarantee or traceability. Full determinism makes NLPCraft an ideal tool for domain-specific natural language
            application like command-and-control or mission critical systems vis-a-vis common language comprehension
            tools like ChatGPT. NLPCraft is also an ideal library for use cases where execution proof or traceability is
            required, e.g. blockchain decentralized applications.
        </p>
        <h2 class="section-sub-title">Supported Languages <a href="#"><i class="top-link fas fa-fw fa-angle-double-up"></i></a></h2>
        <p>
            NLPCraft is language agnostic and can work with most modern languages that have basic NLP infrastructure available like
            English, French, German, Spanish, Russian, etc. Note that NLPCraft does not provide its own low-level NLP plumbing
            like stemmatization and lemmatization and relies on 3rd party libraries like
            <a href="https://opennlp.apache.org/" target="_blank">OpenNLP</a> or
            <a href="https://nlp.stanford.edu/" target="_blank">StanfordNLP</a> to be
            configured to provide that functionality.
        </p>
    </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="#overview">Overview</a></li>
        {% include quick-links.html %}
    </ul>
</div>




