An open-source clean & customizable RAG UI for chatting with your documents. Built with both end users and developers in mind.

Live Demo #1 | Live Demo #2 | Online Install | Colab Notebook (Local RAG)
User Guide | Developer Guide | Feedback | Contact
This project serves as a functional RAG UI for both end users who want to do QA on their documents and developers who want to build their own RAG pipeline.
+----------------------------------------------------------------------------+
| End users: Those who use apps built with `kotaemon`. |
| (You use an app like the one in the demo above) |
| +----------------------------------------------------------------+ |
| | Developers: Those who built with `kotaemon`. | |
| | (You have `import kotaemon` somewhere in your project) | |
| | +----------------------------------------------------+ | |
| | | Contributors: Those who make `kotaemon` better. | | |
| | | (You make PR to this repo) | | |
| | +----------------------------------------------------+ | |
| +----------------------------------------------------------------+ |
+----------------------------------------------------------------------------+
ollama and llama-cpp-python).Host your own document QA (RAG) web-UI: Support multi-user login, organize your files in private/public collections, collaborate and share your favorite chat with others.
Organize your LLM & Embedding models: Support both local LLMs & popular API providers (OpenAI, Azure, Ollama, Groq).
Hybrid RAG pipeline: Sane default RAG pipeline with hybrid (full-text & vector) retriever and re-ranking to ensure best retrieval quality.
Multi-modal QA support: Perform Question Answering on multiple documents with figures and tables support. Support multi-modal document parsing (selectable options on UI).
Advanced citations with document preview: By default the system will provide detailed citations to ensure the correctness of LLM answers. View your citations (incl. relevant score) directly in the in-browser PDF viewer with highlights. Warning when retrieval pipeline return low relevant articles.
Support complex reasoning methods: Use question decomposition to answer your complex/multi-hop question. Support agent-based reasoning with ReAct, ReWOO and other agents.
Configurable settings UI: You can adjust most important aspects of retrieval & generation process on the UI (incl. prompts).
Extensible: Being built on Gradio, you are free to customize or add any UI elements as you like. Also, we aim to support multiple strategies for document indexing & retrieval. GraphRAG indexing pipeline is provided as an example.

If you are not a developer and just want to use the app, please check out our easy-to-follow User Guide. Download the
.zipfile from the latest release to get all the newest features and bug fixes.
.pdf, .html, .mhtml, and .xlsx documents. Installation steps differ depending on your operating system. Please visit the link and follow the specific instructions provided there.We support both lite & full version of Docker images. With full version, the extra packages of unstructured will be installed, which can support additional file types (.doc, .docx, ...) but the cost is larger docker image size. For most users, the lite image should work well in most cases.
To use the full version.
shell
docker run \
-e GRADIO_SERVER_NAME=0.0.0.0 \
-e GRADIO_SERVER_PORT=7860 \
-v ./ktem_app_data:/app/ktem_app_data \
-p 7860:7860 -it --rm \
ghcr.io/cinnamon/kotaemon:main-full
To use the full version with bundled Ollama for local / private RAG.
shell
# change image name to
docker run <...> ghcr.io/cinnamon/kotaemon:main-ollama
To use the lite version.
shell
# change image name to
docker run <...> ghcr.io/cinnamon/kotaemon:main-lite
linux/amd64 and linux/arm64 (for newer Mac). You can specify the platform by passing --platform in the docker run command. For example:shell
# To run docker with platform linux/arm64
docker run \
-e GRADIO_SERVER_NAME=0.0.0.0 \
-e GRADIO_SERVER_PORT=7860 \
-v ./ktem_app_data:/app/ktem_app_data \
-p 7860:7860 -it --rm \
--platform linux/arm64 \
ghcr.io/cinnamon/kotaemon:main-lite
Once everything is set up correctly, you can go to http://localhost:7860/ to access the WebUI.
We use GHCR to store docker images, all images can be found here.
shell
git clone https://github.com/Cinnamon/kotaemon
cd kotaemon
Setup the environment:
Option 1: Using uv (recommended)
shell
uv sync --python 3.10
source .venv/bin/activate
```shell conda create -n kotaemon python=3.10 conda activate kotaemon
pip install -e "libs/kotaemon[all]" pip install -e "libs/ktem" ```
.env file in the root of this project. Use .env.example as a template.The .env file is there to serve use cases where users want to pre-config the models before starting up the app (e.g. deploy the app on HF hub). The file will only be used to populate the db once upon the first run, it will no longer be used in consequent runs.
PDF_JS viewer, download PDF_JS_DIST then extract it to libs/ktem/ktem/assets/prebuilt.
shell
python app.py
admin. You can set up additional users directly through the UI.
Resources tab and LLMs and Embeddings and ensure that your api_key value is set correctly from your .env file. If it is not set, you can set it there.[!NOTE] Official MS GraphRAG indexing only works with OpenAI or Ollama API. We recommend most users to use NanoGraphRAG implementation for straightforward integration with Kotaemon.
Setup Nano GRAPHRAG
pip install nano-graphragnano-graphrag install might introduce version conflicts, see this issuepip uninstall hnswlib chroma-hnswlib && pip install chroma-hnswlibUSE_NANO_GRAPHRAG=true environment variable.Setup LIGHTRAG
pip install git+https://github.com/HKUDS/LightRAG.gitLightRAG install might introduce version conflicts, see this issuepip uninstall hnswlib chroma-hnswlib && pip install chroma-hnswlibUSE_LIGHTRAG=true environment variable.Setup MS GRAPHRAG
shell
pip install "graphrag<=0.3.6" future
GRAPHRAG_API_KEY environment variable. You can do this directly in your environment or by adding it to a .env file.Ollama) or customize the default LLM and other configurations, set the USE_CUSTOMIZED_GRAPHRAG_SETTING environment variable to true. Then, adjust your settings in the settings.yaml.example file.See Local model setup.
These options are available:
Select corresponding loaders in Settings -> Retrieval Settings -> File loader
By default, all application data is stored in the ./ktem_app_data folder. You can back up or copy this folder to transfer your installation to a new machine.
For advanced users or specific use cases, you can customize these files:
flowsettings.py
.envflowsettings.pyThis file contains the configuration of your application. You can use the example here as the starting point.
Notable settings
# setup your preferred document store (with full-text search capabilities)
KH_DOCSTORE=(Elasticsearch | LanceDB | SimpleFileDocumentStore)
# setup your preferred vectorstore (for vector-based search)
KH_VECTORSTORE=(ChromaDB | LanceDB | InMemory | Milvus | Qdrant)
# Enable / disable multimodal QA
KH_REASONINGS_USE_MULTIMODAL=True
# Setup your new reasoning pipeline or modify existing one.
KH_REASONINGS = [
"ktem.reasoning.simple.FullQAPipeline",
"ktem.reasoning.simple.FullDecomposeQAPipeline",
"ktem.reasoning.react.ReactAgentPipeline",
"ktem.reasoning.rewoo.RewooAgentPipeline",
]
.envThis file provides another way to configure your models and credentials.
<summa
$ claude mcp add kotaemon \
-- python -m otcore.mcp_server <graph>