kb-bench

dify vs ragflow

Short answer

RAGFlow if the knowledge base is the product or you need to resell it — it retrieved 73% against Dify's 68% and is Apache 2.0. Dify if it is one part of an agent platform and you cannot spare ten gigabytes of memory for Elasticsearch.

Measured side by side

MeasurementdifyragflowBetter
Time to first served request 39 s 511 s dify
Containers 15 5 ragflow
Peak memory during ingestion 2,619.7 MB 9,959.6 MB dify
Parsing fidelity 100% 99% dify
Retrieval accuracy 68% 73% ragflow
Retrieval latency (p50) 298.6 ms 414.7 ms dify

Both were run on the same host against the same corpus with the same embedding model, so these figures are directly comparable. Everything behind them is in the raw data.

Pick dify if

Pick ragflow if

Accuracy: RAGFlow, narrowly

DifyRAGFlow
Documents ingested36/3636/36
Parsing fidelity100%99%
Retrieval accuracy68%73%

Parsing is a tie in practice. Retrieval is five points apart, and worth noting because Dify came last of the five platforms on this corpus — a reversal from our previous run, where it came first on a corpus of much larger documents.

Operations: Dify, by a wide margin

DifyRAGFlow
Peak memory2,620 MB9,960 MB
Ready to serve39 s511 s
Corpus ingestion21 min22 min
Containers155

Nearly four times the memory and thirteen times the start-up, for five points of retrieval. RAGFlow bundles Elasticsearch, which accounts for most of that.

Note that the direction of the container count runs opposite to the memory: RAGFlow runs a third as many containers and needs four times the RAM. Neither number predicts the other.

The licence decides it for one group of buyers

RAGFlow is Apache 2.0 with no restriction on offering it as a service. Dify’s licence adds conditions that prohibit exactly that.

If you intend to host this for customers, that settles the comparison regardless of the memory. If you are running it internally, it costs you nothing.

Dependencies each brings

Dify ships with no model providers. They are plugins fetched from an external marketplace, so an air-gapped Dify cannot reach a model at all. Installing one does not invalidate its cached provider list, so the console keeps reporting an empty list after a successful install until the cache is dropped — and no API drops it.

RAGFlow validates a model endpoint at registration and refuses if it cannot reach it, which surfaces a misconfiguration immediately rather than at first use. Against that, it answers HTTP 200 with a non-zero status code in the body on failure, and uploading a document does not start parsing.