Model or dataset
LearningCircuit/local-deep-research avatar
LearningCircuit/local-deep-research

Local Deep Research: agentic research on your own hardware

~95% on SimpleQA (e.g. Qwen3.6-27B on a 3090). Supports all local and cloud LLMs (llama.cpp, Ollama, Google, ...). 10+ search engines - arXiv, PubMed, your private documents. Everything Local & Encrypted.

9,141 stars834 forksPythonMIT

At a glance

What is it?
Local Deep Research is a Python research assistant that runs iterative search-and-synthesis loops against local or cloud LLMs and ten-plus search backends. The README claims roughly 95% SimpleQA accuracy with a 27B model on a single RTX 3090, but the deployment story is where the real trade-offs live.
Who is it for?
Adopt Local Deep Research if you already run Ollama or an OpenAI-compatible endpoint and you want your research queries and retrieved documents to stay on hardware you control; the Docker Compose path plus SearXNG is the shortest route to a working instance. Do not adopt it if you are on Docker Desktop for macOS or Windows and expect the documented `--network host` command to work, or if you are unwilling to operate a second service (SearXNG) alongside it.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository received new commits within the last day.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 29, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

The problem: research runs that leave your machine

Most agentic research tools are thin clients over someone else's inference and someone else's index. You type a question, it fans out to a hosted search API, the retrieved pages and your query go through a vendor's model, and the synthesis comes back. That is fine for public questions and awkward for anything under an NDA, a patient record, or an unpublished draft.

Local Deep Research targets that gap. The README frames it as an "AI research assistant you control" that can "run locally for privacy, use any LLM and build your own searchable knowledge base." The intended user is someone with a GPU who wants iterative, cited research output without shipping the query to a third party, or someone who needs to search sources that are not on the public web, such as private documents or PubMed and arXiv.

The project is Python, MIT licensed, and has no homepage; the repository is the distribution point. It is not a library you import into an existing pipeline so much as an application you run, with a web UI on port 5000 and an examples directory containing API usage samples.

How the research loop is assembled

The architecture is a LangChain stack. The pyproject.toml declares `langchain~=1.2`, `langchain-community~=0.4`, `langchain-core~=1.2`, plus provider adapters: `langchain-ollama`, `langchain-openai`, and `langchain-anthropic`. That is the whole reason the same research loop can drive a local Ollama model, an OpenAI-compatible endpoint such as LM Studio, or a hosted API. The LLM is a swappable component, not a hardcoded backend.

Retrieval is similarly pluggable. The dependency list includes `duckduckgo-search`, and the topics and README mention arXiv, PubMed, Brave, SearXNG, and private documents. Page extraction is handled by a stack of parsers rather than one: `trafilatura`, `readabilipy`, `justext`, `extruct`, and `beautifulsoup4` are all listed, with `playwright` for pages that need a real browser engine. That combination suggests the pipeline fetches a URL, tries structured extraction first, and falls back to readability-style scraping when the markup is hostile.

Storage is SQLite with SQLCipher. The README links a dedicated `docs/SQLCIPHER_INSTALL.md` and states that the database is encrypted; the pip path ships pre-built wheels so SQLCipher does not need compilation. The Dockerfile installs `libsqlcipher-dev`, `sqlcipher`, and `libsqlcipher1` via apt, which confirms the encryption is at the database layer rather than a wrapper around exported files.

Installing Local Deep Research with pip or Docker

The README gives three install routes. The pip route is the shortest if you already have an LLM endpoint and a search backend running. Install the package and start the web app:

bash
pip install local-deep-research
python -m local_deep_research.web.app

The README states this starts the web UI on http://localhost:5000. It also warns that you still need Ollama (or any OpenAI-compatible endpoint) and SearXNG running separately, so this command alone does not give you a working research loop. The pip guide is `docs/install-pip.md`.

The Docker Compose route is the one the README recommends for anything other than native Linux, because the single-container `docker run` example uses `--network host`, which the README says silently fails on Docker Desktop and leaves `localhost` pointing at the LDR container itself. The Compose path is two commands on CPU:

bash
curl -O https://raw.githubusercontent.com/LearningCircuit/local-deep-research/main/docker-compose.yml && docker compose up -d

For NVIDIA acceleration on Linux, the README adds an override file:

bash
curl -O https://raw.githubusercontent.com/LearningCircuit/local-deep-research/main/docker-compose.yml && \
curl -O https://raw.githubusercontent.com/LearningCircuit/local-deep-research/main/docker-compose.gpu.override.yml && \
 docker compose -f docker-compose.yml -f docker-compose.gpu.override.yml up -d

The README says to open http://localhost:5000 after about 30 seconds. The Compose file publishes `5000:5000` and adds `host.docker.internal:host-gateway` so the container can reach services on the host, which is how it talks to LM Studio or an Ollama instance running outside Docker.

One configuration detail matters more than it looks. The README notes that since v1.10.3, private or localhost search engine URLs are blocked by default, and the single-container example pins SearXNG by setting `LDR_SEARCH_ENGINE_WEB_SEARXNG_DEFAULT_PARAMS_INSTANCE_URL=http://localhost:8080`. Setting that variable also marks the engine operator-approved and makes the URL read-only in the web UI. If you prefer not to lock it, `docs/SearXNG-Setup.md` describes an origin allowlist instead.

Where the deployment story breaks down

The most concrete limitation is already in the README, which is unusual and worth crediting: the `--network host` example is Linux-only. On macOS, Windows, and WSL2 with Docker Desktop, the README says it fails to publish port 5000 and, worse, leaves `localhost` resolving to the LDR container, so the container cannot reach Ollama or SearXNG either. A user who copies the first code block and does not read the callout below it will get a container that appears to start and then cannot complete a single search. The README points to a Windows/WSL2 FAQ entry for a working recipe.

The second constraint is CPU support. The README states LDR needs an AVX-capable CPU, Intel Sandy Bridge or AMD Bulldozer (2011) or newer, because several scientific Python dependencies require it. That rules out older home servers and some budget VPS instances, and the failure mode is an import error rather than a graceful message.

The third is encryption. SQLCipher is on by default, but the README offers an escape hatch: `export LDR_BOOTSTRAP_ALLOW_UNENCRYPTED=true` falls back to standard SQLite if encryption causes trouble. That setting is a real trade-off, not a convenience flag, and the README does not document a rollback path from an unencrypted database back to an encrypted one.

Finally, environment variables are not defaults. The Compose file comments state that env vars force settings and prevent any change through the UI, so a variable set once in a compose file becomes a permanent override that users cannot adjust in the web interface.

Compared with Open Deep Research and hosted deep research

The related searches surface two natural comparisons: Open Deep Research and LangChain's local deep researcher. The difference is where the loop lives. Open Deep Research is a framework you configure and run yourself, typically with a cloud model and a hosted search API; you get the loop and you own the wiring. Local Deep Research is an application with a web UI, a settings layer, and a database, so the loop is already assembled and the configuration happens in a browser rather than in a script.

That is a real difference in approach, not just packaging. If your goal is to embed iterative research into an existing Python service, a framework is the better fit, because LDR's surface is a running server on port 5000 with an API you call from outside. If your goal is to sit down and run cited research without writing the orchestration, LDR is closer to what you want. The examples directory contains `examples/api_usage/`, so the API path exists, but the README's framing is the web UI.

Against hosted deep research products, the trade-off is capability against control. A hosted product will have a larger model and a managed index. LDR will run on a 3090 with a 27B model and whatever search engines you connect. The README's benchmark claim, roughly 95% on SimpleQA with Qwen3.6-27B on a single RTX 3090, is the project's own reported number with a linked dataset, and it is worth reading the dataset before treating it as representative of your queries.

Maintenance, licence, and upgrade cost

The last push to the default branch was on 2026-09-10, and the most recent release is v1.10.7 from 2026-08-28, with v1.10.6 the same day and v1.10.5 on 2026-08-16. That is an actively moving project with frequent patch releases, and the release cadence matters for operators: a version-pinned deployment will fall behind quickly.

The codebase carries visible security engineering. The Dockerfile applies a backported CPython fix for CVE-2026-15310 because no patched 3.14 image existed at build time, and it runs `apt-get upgrade -y` on every build deliberately, trading bit-for-bit reproducibility for fresh Debian patches. The comments state that a build-once-promote pipeline mitigates the reproducibility loss by building once per release and retagging the tested digest. Repository entries include `.gitleaks.toml`, `.grype.yaml`, `.semgrep/`, `.trivyignore`, and `.zap/`, and the README shows OpenSSF Scorecard, CodeQL, and Semgrep badges.

The licence is MIT, declared both in the repository LICENSE file and as a classifier in pyproject.toml. MIT is permissive: you can use, modify, and redistribute it, including commercially, provided the copyright notice and licence text are retained. That is a summary of what the licence identifier means, not legal advice; if you are redistributing LDR inside a product, read the LICENSE file and check the licences of the LangChain and parsing dependencies separately, since those are not covered by LDR's MIT grant.

Editorial conclusion

Adopt Local Deep Research if you already run Ollama or an OpenAI-compatible endpoint and you want your research queries and retrieved documents to stay on hardware you control; the Docker Compose path plus SearXNG is the shortest route to a working instance. Do not adopt it if you are on Docker Desktop for macOS or Windows and expect the documented `--network host` command to work, or if you are unwilling to operate a second service (SearXNG) alongside it. Before committing, verify three things: that your CPU supports AVX, that your chosen LLM endpoint answers on the host the container can reach, and whether you want SQLCipher encryption or will set `LDR_BOOTSTRAP_ALLOW_UNENCRYPTED=true`.

Frequently asked questions

How much does one deep research cost with Local Deep Research?

The project itself is MIT licensed and free to run, and the README's benchmark configuration uses a local Qwen3.6-27B model on a single RTX 3090, so the marginal cost of a run is electricity rather than per-token billing. If you point it at a hosted provider through the OpenAI or Anthropic adapters, cost depends on that provider's pricing, which the repository does not document.

Which local LLM is best for Local Deep Research?

The README does not rank models. It reports that a fully local setup using Qwen3.6-27B on a single RTX 3090 reached roughly 95% on SimpleQA (n=500) and 77% on xbench-DeepSearch (n=100), and links the benchmark dataset. The Docker quick start pulls gpt-oss:20b as its example model.

Can I use Local Deep Research for free?

Yes, the software is MIT licensed and the Docker image and PyPI package are published publicly. The costs that remain are hardware and, if you choose a cloud LLM provider, that provider's API charges.

Who has the best deep research AI compared with Local Deep Research?

The repository does not compare itself against named deep research products. The README positions LDR on control and locality: it runs on your hardware, uses any LLM, and reports roughly 95% SimpleQA with a local 27B model on a single RTX 3090, with the benchmark dataset linked for inspection.

Official sources

  1. Issues
  2. LearningCircuit/local-deep-research on GitHub
  3. License: MIT
  4. README
  5. Releases
For maintainers

Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/learningcircuit-local-deep-research.svg)](https://hysenlabs.com/projects/learningcircuit-local-deep-research)
Community notes

Community notes