A full product around retrieval
RAGFlow covers much more than vector search. Users create datasets, ingest files or connected sources, choose a parsing method, inspect the resulting chunks, configure retrieval, and build chat or agent experiences on top. The project handles office documents, PDFs, images, scanned material, structured files, and web content. Answers can show citations back to the retrieved material.
That visual inspection loop is its best reason to exist. Retrieval quality often fails before the language model receives a prompt: a table is split badly, a heading loses its section, or OCR scrambles a page. RAGFlow lets an operator see chunks and adjust the parsing template instead of treating ingestion as an invisible background job. For document-heavy teams, that can be more useful than another abstraction over a vector database.
The system also has agent workflows, APIs, Python and JavaScript clients, data-source synchronization, and MCP support. Those features can put the same curated knowledge base behind several applications. They also make the product large. This is not the right dependency when all you need is a function that embeds ten Markdown files.
Self-hosting means operating a small stack
The README recommends at least four CPU cores, 16 GB of RAM, and 50 GB of disk. Docker 24 or newer and Docker Compose 2.26.1 or newer are required for its main self-host path. Elasticsearch is the default document engine, while Infinity is available as an alternative. The Compose environment also includes MySQL, Redis, MinIO, and RAGFlow services.
Before startup, Linux hosts need vm.max_map_count set to at least 262144. Administrators then choose image and service settings, set database and object-store passwords, and configure an LLM provider plus its API key. The image relies on external language and embedding services. The README warns that official images target x86, so ARM64 users must follow a source-build path.
The code executor adds another security boundary. RAGFlow requires gVisor when that feature is enabled, which is a sensible requirement for running generated code. It still demands careful network policy, resource limits, image updates, and tenant controls. Anyone exposing the service beyond a trusted team should review default accounts and secrets before the first login.
Source contributors take on more. The development guide installs Python dependencies and downloaded assets, starts the backing services, adds local hostnames, installs jemalloc where needed, launches backend workers, then separately installs and runs the web client. The documented steps are useful, but they confirm that this is a distributed application rather than an ordinary Python package.
Parsing is the product and the risk
RAGFlow's parser choices are valuable because documents do not share one reliable shape. General prose, tables, manuals, scanned PDFs, presentations, and spreadsheets need different treatment. Users can review the chunks and adjust delimiters or methods. Retrieval then combines recall and reranking before the selected model writes an answer with references.
Current issues show why acceptance testing must use your real documents. Issue #18459 describes spreadsheet cells being replaced with null when a value does not fit the inferred column type, after which the chunking path omits them. Issue #18621 traces legacy .doc files into a parser meant for .docx. Other active reports cover cross-page table segmentation and custom delimiters producing unexpectedly tiny chunks.
Connector behavior needs the same scrutiny. Issue #16636 reports that a WebDAV listing exception is swallowed and returned as an empty list. With deletion synchronization enabled, that empty result can cause already-synced documents to be pruned. Until that path is fixed and verified, a team using connector pruning should keep backups and test failure behavior, not only successful synchronization.
What happened when we ran it
We cloned commit 7cb4e30 into a fresh unprivileged Python 3.12 Debian container with three CPUs, 8 GB of RAM, and no secrets. The checkout contained 5,730 files and roughly 1,340,669 source lines, occupying 110.2 MB. Installation took 590 seconds, installed 517 packages, and consumed 4,302 MB on disk. The build completed successfully in 11 seconds.
The test command failed with exit code 4 after 9 seconds. Pytest did not reach the test cases. While loading test/testcases/conftest.py, it imported a configuration module that called pytest.exit because ZHIPU_AI_API_KEY was missing. The log proves that this test entry point expects that provider credential; it does not show whether the suite would pass after supplying one.
Our dependency audit found five known vulnerabilities. The repository had four CI workflow files, a Dockerfile, and a tests directory. Installation and build therefore worked in the clean environment, but the default test path was not self-contained. A contributor needs the expected secrets and probably the services represented in the test configuration before treating local validation as complete.
Release pace is high, upgrades need rehearsal
GitHub showed a last push on August 25, 2026, one day after several detailed issue updates. Release v0.27.0 was published August 19. The combined open count was 1,779 issues and pull requests; a separate search returned 1,291 open issues. That is active maintenance around a large user base, plus a sizable support and defect queue.
Fast releases make pinning and migration practice important. Issue #17578 documents three gaps in a migration from v0.25.5 to v0.26.4 that left configured models unusable. Whether or not that exact route matches your install, it is a useful warning: clone production data, run the documented migration against the clone, verify providers and retrieval, then upgrade the live service.
RAGFlow earns its operational cost when staff will use the ingestion UI, chunk inspection, citations, connectors, and shared workflows. If most of that surface would sit unused, LlamaIndex or Haystack gives developers more control with less platform to run. If document behavior is the product, RAGFlow is worth a pilot built around the ugliest files you own.

