finds.dev← all comparisons

// 8 picks · reviewed August 2026

The Best Open Source RAG Frameworks in 2026

RAG frameworks all solve the same base problem — get your own documents in front of an LLM without losing the plot on chunking, embedding, and retrieval — but they disagree on how much of that you should have to see. LlamaIndex and LangChain want to be the default glue for everything, Haystack wants every stage of the pipeline visible and typed, and RAGFlow skips the library entirely and hands you a running application.

The other real split is what kind of retrieval you actually need. Most questions are answered fine by a good chunk and a decent embedding. Some need reasoning across relationships between documents instead — which is what LightRAG and GraphRAG build a knowledge graph for, at very different indexing costs. And if you're on the JVM or can't send documents to a cloud API at all, llmware and LangChain4j exist because none of the Python-first options fit those constraints anyway.

How we picked these

Every repo here was read and assessed on its own before it was considered for this page: we pull the README, the directory layout and a key source file, and write the assessment from those rather than from the project's own marketing. Candidates for this list came from a full-text and topic search over the 207 reviewed repositories that matched this category. Anything with no commit in the last 12 months was cut, as were link collections, tutorials and boilerplates; the floor for inclusion was 500 stars. The ordering is a judgement call about who should pick what, not a ranking by stars. finds.dev is independent of every project listed here: nobody paid for a place on this page, there are no affiliate or referral links on it, and we have no commercial relationship with any of them. That is the point of writing down what each one is bad at as well as what it is good at.

// 1 of 8

run-llama/llama_index

★ 50,097 · Python · MIT · updated Jun 2026

the default starting point for connecting your documents to an LLM

It's the default because of the LlamaHub ecosystem — 300+ integrations mean you're rarely stuck writing your own vector store adapter. The core/integration split keeps the base package lean, and the Workflow abstraction is a genuinely nicer way to build multi-step agent pipelines than LangChain's older chain-of-callbacks style.

The catch is the monorepo has grown past what it can document. The README says outright that it isn't kept current, which is a real problem for a project this often used as a beginner's starting point — you'll hit deprecated names like StorageContext and ServiceContext in tutorials that no longer match the API. LlamaParse, the hosted parsing product, is also increasingly where the actual investment goes, so it's worth asking which parts of the pipeline you're using are the open source core and which are a funnel toward a paid tier.

If you want a library that assumes you're wiring together a production RAG stack and doesn't ask too many questions about your architecture first, this is still the right place to start. If you want to see exactly what's happening at each step, Haystack is more legible.

View on GitHub → Our full take →

// 2 of 8

deepset-ai/haystack

★ 25,011 · MDX · Apache-2.0 · updated Apr 2026

teams who want explicit control over every stage of the pipeline instead of a black box

Haystack's pipeline is the most honest of the group about what's actually happening — components declare typed inputs and outputs, connections are validated when you build the graph, and the whole thing serializes to YAML. That buys you debugging and reproducibility that LangChain's Runnable chains and LlamaIndex's Workflow abstraction don't really offer at the same level.

That explicitness has a cost: the static DAG model fights you the moment an agent needs a genuinely variable number of steps, which is exactly the case LangGraph and LlamaIndex Workflows are built for. Version 2 is also a hard break from v1 — most Haystack code you'll find by searching is v1 and won't run, so expect to read the current docs rather than Stack Overflow. And once you want real observability rather than basic tracing, you're pointed at their paid Enterprise Platform.

Pick this over LangChain or LlamaIndex when you want every stage of the pipeline visible and controllable and are willing to write more explicit code to get it. Pick RAGFlow instead if you don't want to write pipeline code at all.

View on GitHub → Our full take →

// 3 of 8

langchain-ai/langchain

★ 139,056 · Python · MIT · updated Jun 2026

projects that need the widest range of vector store and LLM provider integrations

LangChain's actual advantage is coverage — if a vector store, model provider, or document loader exists, there's a connector for it already, more than LlamaIndex or Haystack can claim. LangGraph, the newer orchestration layer, is a real fix for the stateful-agent problems that plagued the old chain and agent model.

The cost of that coverage is depth: a stack trace for anything nontrivial runs through several layers of Runnable wrappers before you reach the actual error, and the LCEL pipe syntax turns hostile the moment you need a conditional or loop instead of a straight line. The framework has also broken compatibility repeatedly — the v0.1 to v0.3 migration left a long tail of integrations on incompatible versions, worse than what Haystack went through with v2. For a simple call-an-LLM-and-maybe-retrieve use case, this is more framework than you need; the provider SDK directly, or LlamaIndex's leaner core, gets you there with less to debug.

Choose it when you genuinely need the broadest provider and vector store coverage and can tolerate the abstraction tax. Don't choose it for something a single script could do.

View on GitHub → Our full take →

// 4 of 8

infiniflow/ragflow

★ 82,473 · Python · Apache-2.0 · updated Jun 2026

teams who want a deployable RAG engine with a UI, not just a library to wire up

RAGFlow answers a different question than the three Python libraries above it — not how to wire a pipeline, but how to stand up a document Q&A system without writing one. The chunking is template-aware rather than naive (papers, manuals, laws, and resumes each get their own parser), and the chunk visualization UI lets you actually see where retrieval broke instead of guessing, which none of the library-first options offer.

The price is infrastructure: MySQL, MinIO, Elasticsearch, and Redis alongside the app itself, 16GB of RAM as a floor, and no ARM64 Docker images, so Apple Silicon and Graviton users are stuck building from source. The agent workflow is a JSON DSL with about twenty component types that's hard to version-control or diff, and the presence of a dedicated migration script for it suggests it's already broken compatibility once.

Reach for this when you want a deployable product, not a library, and you have the infrastructure budget for it. If you just need a document Q&A prototype on a laptop, this is the wrong amount of platform.

View on GitHub → Our full take →

// 5 of 8

HKUDS/LightRAG

★ 36,457 · Python · MIT · updated Jun 2026

getting a working retrieval pipeline running with the least setup

LightRAG's pitch against Microsoft's GraphRAG is real — it builds a knowledge graph at index time too, but skips the expensive community-report generation that makes GraphRAG's indexing bill so large, and it lets you mix local entity lookup, global relationship traversal, and plain vector fallback per query. The storage flexibility is unusually good: Postgres, Neo4j, Milvus, and others all work, and you can mix vector, graph, and key-value backends independently.

The default storage is file-persisted and in-memory, which is fine until you restart the process on a real corpus and either lose data or hit a memory wall — read the config before you trust it with anything. Pick the wrong embedding model early and there's no migration path, just manual table drops. The benchmark numbers in the README are also LLM-judged pairwise comparisons against NaiveRAG and GraphRAG, not held-out ground truth, so the big win percentages are softer than they look.

If GraphRAG's indexing cost is the blocker, this is the lighter alternative it claims to be. It's lighter in compute, though, not in operational surface area.

View on GitHub → Our full take →

// 6 of 8

microsoft/graphrag

★ 33,661 · Python · MIT · updated Jun 2026

questions that need reasoning across relationships between documents, not just similarity lookup

GraphRAG's global search is the one thing on this list that plain vector RAG genuinely can't do — answering what the main themes are across all your documents by aggregating community summaries, rather than hoping one retrieved chunk has the answer. It's also the more mature of the two graph-based options here, with real migration tooling across three major versions, where LightRAG is newer and has no migration story at all.

That maturity is expensive to run: entity and relationship extraction means many LLM calls per document at index time, not one, and on any real corpus that's hundreds of dollars before you've asked a single question. Minor version bumps can require re-running graphrag init --force, which overwrites your tuned prompts. And Leiden community detection assumes your documents actually have meaningful entity relationships — if they don't, the graph is just noise on top of the same embedding-quality problems local search still has.

Use this when the question is genuinely about synthesis across a large corpus, not lookup. If your questions are mostly find-me-the-passage-that-says-X, you're paying graph-indexing costs for a vector-search problem — LightRAG or a plain framework will be cheaper.

View on GitHub → Our full take →

// 7 of 8

llmware-ai/llmware

★ 14,844 · Python · Apache-2.0 · updated May 2026

regulated or on-prem environments running small, specialized models instead of frontier APIs

llmware exists for the case none of the general-purpose Python frameworks above really address: local-first, air-gapped, or regulated environments where the document can't leave the machine. The SLIM models — small, fine-tuned for a specific task like extraction or SQL generation — run on CPU and give structured output more reliably than prompting a general model, and the same ModelCatalog API covers GGUF, ONNX, OpenVINO, and Qualcomm NPU backends without rewriting inference code per target.

The trade for that self-containment is real: the package ships precompiled .so and .dll binaries rather than building from source, which is the kind of thing a security review flags immediately. The global config pattern makes running multiple pipelines with different backends in one process awkward, and will bite you specifically in async or multi-tenant code. The BLING and DRAGON models top out around 7B parameters, fine for scoped extraction but not for reasoning over long or ambiguous queries, with no built-in path to something bigger without leaving the local-first model entirely.

Pick this when the constraint is that you can't call a cloud API, full stop. If that's not your constraint, the model ceiling alone makes this a worse choice than LlamaIndex or Haystack pointed at a frontier model.

View on GitHub → Our full take →

// 8 of 8

langchain4j/langchain4j

★ 12,304 · Java · Apache-2.0 · updated Jun 2026

Java/JVM shops that don't want to bridge into a Python service for RAG

If you're already on the JVM, this is the only framework here worth considering — the others are Python-first, and bridging into a Python service for RAG is its own maintenance burden. The AI Services abstraction, where you annotate a Java interface and get a working implementation with type-safe structured output, is a genuinely clean pattern with no real equivalent in the Python frameworks on this list.

It's also younger in scope than it looks from the integration count: chat memory is bolted on rather than first-class, with no built-in way to persist agent state across a JVM restart, which LangChain's LangGraph handles more directly. The Maven monorepo has grown past 100 modules, which shows up as slow local builds and a real dependency-management problem in larger projects. Error handling isn't consistent across providers either — some throw LangChain4j's own exceptions, others let the underlying provider SDK's exceptions through, so one catch block won't cover a provider swap.

Use it if Java or Kotlin is the language your team already ships in. There's no reason to introduce a Python service just to use LlamaIndex or Haystack if this covers your integrations.

View on GitHub → Our full take →

Questions people ask

Should I just use LangChain since it has the most stars and integrations?

Not automatically. The integration count is real, but so is the abstraction tax — stack traces run through several Runnable layers, and past major-version migrations left a long tail of broken packages. For a straightforward RAG pipeline, LlamaIndex's core is leaner, and Haystack's typed pipeline is easier to debug.

What's the difference between LightRAG and GraphRAG?

Both build a knowledge graph at index time instead of relying on plain vector search, but GraphRAG's community-report generation makes indexing expensive — often hundreds of dollars on a real corpus — while LightRAG skips that step and mixes local, global, and vector retrieval per query. GraphRAG has more mature migration tooling; LightRAG doesn't have one yet.

Is RAGFlow a replacement for a library like LlamaIndex?

No, it's a different kind of tool — a deployable application with a UI and its own infrastructure (MySQL, MinIO, Elasticsearch, Redis), not a set of primitives you assemble yourself. Choose it if you want a running product on day one and can afford the 16GB-plus footprint; choose a library if you need to control the pipeline in code.

What if I'm not working in Python at all?

LangChain4j is the only framework on this list built for the JVM, with idiomatic Spring Boot and Quarkus integrations, so it's the practical choice if your app is already Java or Kotlin. Bridging into a Python service just to use LlamaIndex or Haystack is extra infrastructure most teams don't need.

None of these is a wrong pick so much as a different set of tradeoffs — control versus convenience, a library versus a running app, vector search versus a graph. The weekly email applies the same amount of scrutiny to whatever shows up next in this space, so you don't have to redo this comparison in six months.

Get finds like these weekly →