---
title: What is OpenRAG?
slug: /
---

OpenRAG is an open-source package for building agentic RAG systems that integrates with a wide range of orchestration tools, vector databases, and LLM providers.

OpenRAG connects and amplifies three popular, proven open-source projects into one powerful platform:

* [Langflow](https://docs.langflow.org): Langflow is a versatile tool for building and deploying AI agents and MCP servers. It supports all major LLMs, vector databases, and a growing library of AI tools. 

* [OpenSearch](https://docs.opensearch.org/latest/): OpenSearch is a community-driven, Apache 2.0-licensed open source search and analytics suite that makes it easy to ingest, search, visualize, and analyze data.

* [Docling](https://docling-project.github.io/docling/): Docling simplifies document processing, parsing diverse formats — including advanced PDF understanding — and providing seamless integrations with the gen AI ecosystem. 

OpenRAG builds on Langflow's familiar interface while adding OpenSearch for vector storage and Docling for simplified document parsing, with opinionated flows that serve as ready-to-use recipes for ingestion, retrieval, and generation from popular sources like Google Drive, OneDrive, and Sharepoint.

What's more, every part of the stack is swappable. Write your own custom components in Python, try different language models, and customize your flows to build an agentic RAG system.

Ready to get started? [Install OpenRAG](/install) and then run the [Quickstart](/quickstart) to create a powerful RAG pipeline.

## OpenRAG architecture

OpenRAG deploys and orchestrates a lightweight, container-based architecture that combines **Langflow**, **OpenSearch**, and **Docling** into a cohesive RAG platform.

```mermaid
%%{init: {'theme': 'dark', 'flowchart': {'useMaxWidth': true, 'width': '100%'}}}%%
flowchart LR
    %% Encapsulate the entire diagram in a rectangle with black background
    subgraph DiagramContainer["OpenRAG Architecture"]
        style DiagramContainer fill:#000000,stroke:#ffffff,color:white,stroke-width:2px

        %% Define subgraphs for the different sections
        subgraph LocalService["Local Service"]
            DoclingSrv[Docling Serve]
            style DoclingSrv fill:#a8d1ff,stroke:#0066cc,color:black,stroke-width:2px
        end

        subgraph Containers
            Backend["OpenRAG Backend"]
            style Backend fill:#e6ffe6,stroke:#006600,color:black,stroke-width:2px
            Langflow
            style Langflow fill:#e6ffe6,stroke:#006600,color:black,stroke-width:2px
            OpenSearch
            style OpenSearch fill:#e6ffe6,stroke:#006600,color:black,stroke-width:2px
            Frontend["OpenRAG Frontend"]
            style Frontend fill:#ffcc99,stroke:#ff6600,color:black,stroke-width:2px
        end

        subgraph ThirdParty["Third Party Services"]
            GoogleDrive["Google Drive"]
            style GoogleDrive fill:#f2e6ff,stroke:#6600cc,color:black,stroke-width:2px
            OneDrive
            style OneDrive fill:#f2e6ff,stroke:#6600cc,color:black,stroke-width:2px
            SharePoint["SharePoint"]
            style SharePoint fill:#f2e6ff,stroke:#6600cc,color:black,stroke-width:2px
            More[...]
            style More fill:#f2e6ff,stroke:#6600cc,color:black,stroke-width:2px
        end

        %% Define connections
        DoclingSrv --> Backend
        GoogleDrive --> Backend
        OneDrive --> Backend
        SharePoint --> Backend
        More --> Backend
        Backend --> Langflow
        Langflow <--> OpenSearch
        Backend <--> Frontend

        %% Style subgraphs
        style LocalService fill:#333333,stroke:#666666,color:white,stroke-width:2px
        style Containers fill:#444444,stroke:#666666,color:white,stroke-width:2px
        style ThirdParty fill:#333333,stroke:#666666,color:white,stroke-width:2px
    end
```

```mermaid
%%{init: {'theme': 'dark', 'flowchart': {'useMaxWidth': true, 'width': '100%'}}}%%
architecture-beta
    group ext(cloud)[External connectors]
    service drive1(disk)[Google Drive] in ext
    service drive2(disk)[OneDrive] in ext
    service drive3(disk)[SharePoint] in ext
    service drive4(disk)[Other] in ext

    group local(server)[Local services]
    service docling(database)[Docling Serve] in local

    group containers(server)[OpenRAG containers]
    service backend(database)[OpenRAG backend] in containers
    service langflow(database)[Langflow] in containers
    service opensearch(database)[OpenSearch] in containers
    service frontend(database)[OpenRAG frontend] in containers
    junction junctionCenter
    junction junctionRight

    backend:R -- L:junctionCenter
    frontend:T -- B:junctionCenter
    junctionCenter:R -- L:junctionRight
    langflow:B -- T:junctionRight
    opensearch:T -- B:junctionRight

    docling{group}:R -- L:backend{group}
    drive1{group}:B -- T:backend{group}
```

```mermaid
flowchart TD
    subgraph Containers
    backend[OpenRAG Backend] --> langflow[Langflow]
    langflow <--> opensearch[OpenSearch]
    backend <--> frontend[OpenRAG frontend]
    end
    subgraph local [Local services]
    docling[Docling Serve]
    end
    subgraph ext [External connectors]
    drive1[Google Drive]
    drive2[OneDrive]
    drive3[SharePoint]
    drive4[Others]
    end
    local --> backend
    ext --> backend
```

The **OpenRAG Backend** is the central orchestration service that coordinates all other components.

**Langflow** provides a visual workflow engine for building AI agents, and connects to **OpenSearch** for vector storage and retrieval.

**Docling Serve** is a local document processing service managed by the **OpenRAG Backend**.

**Third Party Services** like **Google Drive** connect to the **OpenRAG Backend** through OAuth authentication, allowing synchronication of cloud storage with the OpenSearch knowledge base.

The **OpenRAG Frontend** provides the user interface for interacting with the system.

## Performance expectations

On a local VM with 7 vCPUs and 8 GiB RAM, OpenRAG ingested approximately 5.03 GB across 1,083 files in about 42 minutes.
This equates to approximately 2.4 documents per second.

You can generally expect equal or better performance on developer laptops and significantly faster on servers.
Throughput scales with CPU cores, memory, storage speed, and configuration choices such as embedding model, chunk size and overlap, and concurrency.

This test returned 12 errors (approximately 1.1%).
All errors were file‑specific, and they didn't stop the pipeline.

Ingestion dataset:

* Total files: 1,083 items mounted
* Total size on disk: 5,026,474,862 bytes (approximately 5.03 GB)

Hardware specifications:

* Machine: Apple M4 Pro
* Podman VM:
  * Name: `podman-machine-default`
  * Type: `applehv`
  * vCPUs: 7
  * Memory: 8 GiB
  * Disk size: 100 GiB

Test results:

```text
2025-09-24T22:40:45.542190Z /app/src/main.py:231 Ingesting default documents when ready disable_langflow_ingest=False
2025-09-24T22:40:45.546385Z /app/src/main.py:270 Using Langflow ingestion pipeline for default documents file_count=1082
...
2025-09-24T23:19:44.866365Z /app/src/main.py:351 Langflow ingestion completed success_count=1070 error_count=12 total_files=1082
```

Elapsed time: ~42 minutes 15 seconds (2,535 seconds)

Throughput: ~2.4 documents/second